forked from s434596/CatOrNot
Remove redundant directory
This commit is contained in:
parent
11b478aa97
commit
0f51b7975a
@ -1,76 +0,0 @@
|
|||||||
# This file must be used with "source bin/activate" *from bash*
|
|
||||||
# you cannot run it directly
|
|
||||||
|
|
||||||
deactivate () {
|
|
||||||
# reset old environment variables
|
|
||||||
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
|
||||||
PATH="${_OLD_VIRTUAL_PATH:-}"
|
|
||||||
export PATH
|
|
||||||
unset _OLD_VIRTUAL_PATH
|
|
||||||
fi
|
|
||||||
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
|
||||||
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
|
||||||
export PYTHONHOME
|
|
||||||
unset _OLD_VIRTUAL_PYTHONHOME
|
|
||||||
fi
|
|
||||||
|
|
||||||
# This should detect bash and zsh, which have a hash command that must
|
|
||||||
# be called to get it to forget past commands. Without forgetting
|
|
||||||
# past commands the $PATH changes we made may not be respected
|
|
||||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
|
||||||
hash -r
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
|
||||||
PS1="${_OLD_VIRTUAL_PS1:-}"
|
|
||||||
export PS1
|
|
||||||
unset _OLD_VIRTUAL_PS1
|
|
||||||
fi
|
|
||||||
|
|
||||||
unset VIRTUAL_ENV
|
|
||||||
if [ ! "$1" = "nondestructive" ] ; then
|
|
||||||
# Self destruct!
|
|
||||||
unset -f deactivate
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# unset irrelevant variables
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
VIRTUAL_ENV="/home/c00ler/cat_or_not/venv"
|
|
||||||
export VIRTUAL_ENV
|
|
||||||
|
|
||||||
_OLD_VIRTUAL_PATH="$PATH"
|
|
||||||
PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
# unset PYTHONHOME if set
|
|
||||||
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
|
||||||
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
|
||||||
if [ -n "${PYTHONHOME:-}" ] ; then
|
|
||||||
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
|
||||||
unset PYTHONHOME
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
|
||||||
_OLD_VIRTUAL_PS1="${PS1:-}"
|
|
||||||
if [ "x(venv) " != x ] ; then
|
|
||||||
PS1="(venv) ${PS1:-}"
|
|
||||||
else
|
|
||||||
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
|
|
||||||
# special case for Aspen magic directories
|
|
||||||
# see http://www.zetadev.com/software/aspen/
|
|
||||||
PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
|
|
||||||
else
|
|
||||||
PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
export PS1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# This should detect bash and zsh, which have a hash command that must
|
|
||||||
# be called to get it to forget past commands. Without forgetting
|
|
||||||
# past commands the $PATH changes we made may not be respected
|
|
||||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
|
||||||
hash -r
|
|
||||||
fi
|
|
@ -1,37 +0,0 @@
|
|||||||
# This file must be used with "source bin/activate.csh" *from csh*.
|
|
||||||
# You cannot run it directly.
|
|
||||||
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
|
||||||
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
|
||||||
|
|
||||||
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
|
|
||||||
|
|
||||||
# Unset irrelevant variables.
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
setenv VIRTUAL_ENV "/home/c00ler/cat_or_not/venv"
|
|
||||||
|
|
||||||
set _OLD_VIRTUAL_PATH="$PATH"
|
|
||||||
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
|
|
||||||
|
|
||||||
|
|
||||||
set _OLD_VIRTUAL_PROMPT="$prompt"
|
|
||||||
|
|
||||||
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
|
||||||
if ("venv" != "") then
|
|
||||||
set env_name = "venv"
|
|
||||||
else
|
|
||||||
if (`basename "VIRTUAL_ENV"` == "__") then
|
|
||||||
# special case for Aspen magic directories
|
|
||||||
# see http://www.zetadev.com/software/aspen/
|
|
||||||
set env_name = `basename \`dirname "$VIRTUAL_ENV"\``
|
|
||||||
else
|
|
||||||
set env_name = `basename "$VIRTUAL_ENV"`
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
set prompt = "[$env_name] $prompt"
|
|
||||||
unset env_name
|
|
||||||
endif
|
|
||||||
|
|
||||||
alias pydoc python -m pydoc
|
|
||||||
|
|
||||||
rehash
|
|
@ -1,75 +0,0 @@
|
|||||||
# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org)
|
|
||||||
# you cannot run it directly
|
|
||||||
|
|
||||||
function deactivate -d "Exit virtualenv and return to normal shell environment"
|
|
||||||
# reset old environment variables
|
|
||||||
if test -n "$_OLD_VIRTUAL_PATH"
|
|
||||||
set -gx PATH $_OLD_VIRTUAL_PATH
|
|
||||||
set -e _OLD_VIRTUAL_PATH
|
|
||||||
end
|
|
||||||
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
|
|
||||||
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
|
|
||||||
set -e _OLD_VIRTUAL_PYTHONHOME
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
|
|
||||||
functions -e fish_prompt
|
|
||||||
set -e _OLD_FISH_PROMPT_OVERRIDE
|
|
||||||
functions -c _old_fish_prompt fish_prompt
|
|
||||||
functions -e _old_fish_prompt
|
|
||||||
end
|
|
||||||
|
|
||||||
set -e VIRTUAL_ENV
|
|
||||||
if test "$argv[1]" != "nondestructive"
|
|
||||||
# Self destruct!
|
|
||||||
functions -e deactivate
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# unset irrelevant variables
|
|
||||||
deactivate nondestructive
|
|
||||||
|
|
||||||
set -gx VIRTUAL_ENV "/home/c00ler/cat_or_not/venv"
|
|
||||||
|
|
||||||
set -gx _OLD_VIRTUAL_PATH $PATH
|
|
||||||
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
|
|
||||||
|
|
||||||
# unset PYTHONHOME if set
|
|
||||||
if set -q PYTHONHOME
|
|
||||||
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
|
|
||||||
set -e PYTHONHOME
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
|
||||||
# fish uses a function instead of an env var to generate the prompt.
|
|
||||||
|
|
||||||
# save the current fish_prompt function as the function _old_fish_prompt
|
|
||||||
functions -c fish_prompt _old_fish_prompt
|
|
||||||
|
|
||||||
# with the original prompt function renamed, we can override with our own.
|
|
||||||
function fish_prompt
|
|
||||||
# Save the return status of the last command
|
|
||||||
set -l old_status $status
|
|
||||||
|
|
||||||
# Prompt override?
|
|
||||||
if test -n "(venv) "
|
|
||||||
printf "%s%s" "(venv) " (set_color normal)
|
|
||||||
else
|
|
||||||
# ...Otherwise, prepend env
|
|
||||||
set -l _checkbase (basename "$VIRTUAL_ENV")
|
|
||||||
if test $_checkbase = "__"
|
|
||||||
# special case for Aspen magic directories
|
|
||||||
# see http://www.zetadev.com/software/aspen/
|
|
||||||
printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal)
|
|
||||||
else
|
|
||||||
printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Restore the return status of the previous command.
|
|
||||||
echo "exit $old_status" | .
|
|
||||||
_old_fish_prompt
|
|
||||||
end
|
|
||||||
|
|
||||||
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
|
||||||
end
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from chardet.cli.chardetect import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools.command.easy_install import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools.command.easy_install import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from flask.cli import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from gunicorn.app.wsgiapp import run
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(run())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from gunicorn.app.pasterapp import run
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(run())
|
|
11
venv/bin/pip
11
venv/bin/pip
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pip import main
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.cli import decrypt
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(decrypt())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.cli import encrypt
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(encrypt())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.cli import keygen
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(keygen())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.util import private_to_public
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(private_to_public())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.cli import sign
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(sign())
|
|
@ -1,11 +0,0 @@
|
|||||||
#!/home/c00ler/cat_or_not/venv/bin/python3
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from rsa.cli import verify
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(verify())
|
|
@ -1 +0,0 @@
|
|||||||
python3
|
|
@ -1 +0,0 @@
|
|||||||
/usr/bin/python3
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,39 +0,0 @@
|
|||||||
Copyright © 2014 by the Pallets team.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms of the software as
|
|
||||||
well as documentation, with or without modification, are permitted
|
|
||||||
provided that the following conditions are met:
|
|
||||||
|
|
||||||
- Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
- Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
- Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
||||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGE.
|
|
||||||
|
|
||||||
----
|
|
||||||
|
|
||||||
Click uses parts of optparse written by Gregory P. Ward and maintained
|
|
||||||
by the Python Software Foundation. This is limited to code in parser.py.
|
|
||||||
|
|
||||||
Copyright © 2001-2006 Gregory P. Ward. All rights reserved.
|
|
||||||
Copyright © 2002-2006 Python Software Foundation. All rights reserved.
|
|
@ -1,121 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: Click
|
|
||||||
Version: 7.0
|
|
||||||
Summary: Composable command line interface toolkit
|
|
||||||
Home-page: https://palletsprojects.com/p/click/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
Maintainer: Pallets Team
|
|
||||||
Maintainer-email: contact@palletsprojects.com
|
|
||||||
License: BSD
|
|
||||||
Project-URL: Documentation, https://click.palletsprojects.com/
|
|
||||||
Project-URL: Code, https://github.com/pallets/click
|
|
||||||
Project-URL: Issue tracker, https://github.com/pallets/click/issues
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
|
|
||||||
|
|
||||||
\$ click\_
|
|
||||||
==========
|
|
||||||
|
|
||||||
Click is a Python package for creating beautiful command line interfaces
|
|
||||||
in a composable way with as little code as necessary. It's the "Command
|
|
||||||
Line Interface Creation Kit". It's highly configurable but comes with
|
|
||||||
sensible defaults out of the box.
|
|
||||||
|
|
||||||
It aims to make the process of writing command line tools quick and fun
|
|
||||||
while also preventing any frustration caused by the inability to
|
|
||||||
implement an intended CLI API.
|
|
||||||
|
|
||||||
Click in three points:
|
|
||||||
|
|
||||||
- Arbitrary nesting of commands
|
|
||||||
- Automatic help page generation
|
|
||||||
- Supports lazy loading of subcommands at runtime
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
$ pip install click
|
|
||||||
|
|
||||||
Click supports Python 3.4 and newer, Python 2.7, and PyPy.
|
|
||||||
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
||||||
A Simple Example
|
|
||||||
----------------
|
|
||||||
|
|
||||||
What does it look like? Here is an example of a simple Click program:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
import click
|
|
||||||
|
|
||||||
@click.command()
|
|
||||||
@click.option("--count", default=1, help="Number of greetings.")
|
|
||||||
@click.option("--name", prompt="Your name",
|
|
||||||
help="The person to greet.")
|
|
||||||
def hello(count, name):
|
|
||||||
"""Simple program that greets NAME for a total of COUNT times."""
|
|
||||||
for _ in range(count):
|
|
||||||
click.echo("Hello, %s!" % name)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
hello()
|
|
||||||
|
|
||||||
And what it looks like when run:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
$ python hello.py --count=3
|
|
||||||
Your name: Click
|
|
||||||
Hello, Click!
|
|
||||||
Hello, Click!
|
|
||||||
Hello, Click!
|
|
||||||
|
|
||||||
|
|
||||||
Donate
|
|
||||||
------
|
|
||||||
|
|
||||||
The Pallets organization develops and supports Click and other popular
|
|
||||||
packages. In order to grow the community of contributors and users, and
|
|
||||||
allow the maintainers to devote more time to the projects, `please
|
|
||||||
donate today`_.
|
|
||||||
|
|
||||||
.. _please donate today: https://palletsprojects.com/donate
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://palletsprojects.com/p/click/
|
|
||||||
* Documentation: https://click.palletsprojects.com/
|
|
||||||
* License: `BSD <https://github.com/pallets/click/blob/master/LICENSE.rst>`_
|
|
||||||
* Releases: https://pypi.org/project/click/
|
|
||||||
* Code: https://github.com/pallets/click
|
|
||||||
* Issue tracker: https://github.com/pallets/click/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/click
|
|
||||||
* Windows: https://ci.appveyor.com/project/pallets/click
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/click
|
|
||||||
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
Click-7.0.dist-info/LICENSE.txt,sha256=4hIxn676T0Wcisk3_chVcECjyrivKTZsoqSNI5AlIlw,1876
|
|
||||||
Click-7.0.dist-info/METADATA,sha256=-r8jeke3Zer4diRvT1MjFZuiJ6yTT_qFP39svLqdaLI,3516
|
|
||||||
Click-7.0.dist-info/RECORD,,
|
|
||||||
Click-7.0.dist-info/WHEEL,sha256=gduuPyBvFJQSQ0zdyxF7k0zynDXbIbvg5ZBHoXum5uk,110
|
|
||||||
Click-7.0.dist-info/top_level.txt,sha256=J1ZQogalYS4pphY_lPECoNMfw0HzTSrZglC4Yfwo4xA,6
|
|
||||||
click/__init__.py,sha256=HjGThQ7tef9kkwCV371TBnrf0SAi6fKfU_jtEnbYTvQ,2789
|
|
||||||
click/_bashcomplete.py,sha256=iaNUmtxag0YPfxba3TDYCNietiTMQIrvhRLj-H8okFU,11014
|
|
||||||
click/_compat.py,sha256=vYmvoj4opPxo-c-2GMQQjYT_r_QkOKybkfGoeVrt0dA,23399
|
|
||||||
click/_termui_impl.py,sha256=xHmLtOJhKUCVD6168yucJ9fknUJPAMs0eUTPgVUO-GQ,19611
|
|
||||||
click/_textwrap.py,sha256=gwS4m7bdQiJnzaDG8osFcRb-5vn4t4l2qSCy-5csCEc,1198
|
|
||||||
click/_unicodefun.py,sha256=QHy2_5jYlX-36O-JVrTHNnHOqg8tquUR0HmQFev7Ics,4364
|
|
||||||
click/_winconsole.py,sha256=PPWVak8Iikm_gAPsxMrzwsVFCvHgaW3jPaDWZ1JBl3U,8965
|
|
||||||
click/core.py,sha256=q8FLcDZsagBGSRe5Y9Hi_FGvAeZvusNfoO5EkhkSQ8Y,75305
|
|
||||||
click/decorators.py,sha256=idKt6duLUUfAFftrHoREi8MJSd39XW36pUVHthdglwk,11226
|
|
||||||
click/exceptions.py,sha256=CNpAjBAE7qjaV4WChxQeak95e5yUOau8AsvT-8m6wss,7663
|
|
||||||
click/formatting.py,sha256=eh-cypTUAhpI3HD-K4ZpR3vCiURIO62xXvKkR3tNUTM,8889
|
|
||||||
click/globals.py,sha256=oQkou3ZQ5DgrbVM6BwIBirwiqozbjfirzsLGAlLRRdg,1514
|
|
||||||
click/parser.py,sha256=m-nGZz4VwprM42_qtFlWFGo7yRJQxkBlRcZodoH593Y,15510
|
|
||||||
click/termui.py,sha256=o_ZXB2jyvL2Rce7P_bFGq452iyBq9ykJyRApIPMCZO0,23207
|
|
||||||
click/testing.py,sha256=aYGqY_iWLu2p4k7lkuJ6t3fqpf6aPGqTsyLzNY_ngKg,13062
|
|
||||||
click/types.py,sha256=2Q929p-aBP_ZYuMFJqJR-Ipucofv3fmDc5JzBDPmzJU,23287
|
|
||||||
click/utils.py,sha256=6-D0WkAxvv9FkgHXSHwDIv0l9Gdx9Mm6Z5vuKNLIfZI,15763
|
|
||||||
Click-7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
click/__pycache__/testing.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_termui_impl.cpython-36.pyc,,
|
|
||||||
click/__pycache__/parser.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_bashcomplete.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_winconsole.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
click/__pycache__/types.cpython-36.pyc,,
|
|
||||||
click/__pycache__/termui.cpython-36.pyc,,
|
|
||||||
click/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
click/__pycache__/exceptions.cpython-36.pyc,,
|
|
||||||
click/__pycache__/globals.cpython-36.pyc,,
|
|
||||||
click/__pycache__/utils.cpython-36.pyc,,
|
|
||||||
click/__pycache__/core.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_unicodefun.cpython-36.pyc,,
|
|
||||||
click/__pycache__/decorators.cpython-36.pyc,,
|
|
||||||
click/__pycache__/formatting.cpython-36.pyc,,
|
|
||||||
click/__pycache__/_textwrap.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.1)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
click
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,31 +0,0 @@
|
|||||||
Copyright © 2010 by the Pallets team.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms of the software as
|
|
||||||
well as documentation, with or without modification, are permitted
|
|
||||||
provided that the following conditions are met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
||||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGE.
|
|
@ -1,130 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: Flask
|
|
||||||
Version: 1.0.2
|
|
||||||
Summary: A simple framework for building complex web applications.
|
|
||||||
Home-page: https://www.palletsprojects.com/p/flask/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
Maintainer: Pallets team
|
|
||||||
Maintainer-email: contact@palletsprojects.com
|
|
||||||
License: BSD
|
|
||||||
Project-URL: Documentation, http://flask.pocoo.org/docs/
|
|
||||||
Project-URL: Code, https://github.com/pallets/flask
|
|
||||||
Project-URL: Issue tracker, https://github.com/pallets/flask/issues
|
|
||||||
Platform: any
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Framework :: Flask
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Provides-Extra: dev
|
|
||||||
Provides-Extra: docs
|
|
||||||
Provides-Extra: dotenv
|
|
||||||
Requires-Dist: Werkzeug (>=0.14)
|
|
||||||
Requires-Dist: Jinja2 (>=2.10)
|
|
||||||
Requires-Dist: itsdangerous (>=0.24)
|
|
||||||
Requires-Dist: click (>=5.1)
|
|
||||||
Provides-Extra: dev
|
|
||||||
Requires-Dist: pytest (>=3); extra == 'dev'
|
|
||||||
Requires-Dist: coverage; extra == 'dev'
|
|
||||||
Requires-Dist: tox; extra == 'dev'
|
|
||||||
Requires-Dist: sphinx; extra == 'dev'
|
|
||||||
Requires-Dist: pallets-sphinx-themes; extra == 'dev'
|
|
||||||
Requires-Dist: sphinxcontrib-log-cabinet; extra == 'dev'
|
|
||||||
Provides-Extra: docs
|
|
||||||
Requires-Dist: sphinx; extra == 'docs'
|
|
||||||
Requires-Dist: pallets-sphinx-themes; extra == 'docs'
|
|
||||||
Requires-Dist: sphinxcontrib-log-cabinet; extra == 'docs'
|
|
||||||
Provides-Extra: dotenv
|
|
||||||
Requires-Dist: python-dotenv; extra == 'dotenv'
|
|
||||||
|
|
||||||
Flask
|
|
||||||
=====
|
|
||||||
|
|
||||||
Flask is a lightweight `WSGI`_ web application framework. It is designed
|
|
||||||
to make getting started quick and easy, with the ability to scale up to
|
|
||||||
complex applications. It began as a simple wrapper around `Werkzeug`_
|
|
||||||
and `Jinja`_ and has become one of the most popular Python web
|
|
||||||
application frameworks.
|
|
||||||
|
|
||||||
Flask offers suggestions, but doesn't enforce any dependencies or
|
|
||||||
project layout. It is up to the developer to choose the tools and
|
|
||||||
libraries they want to use. There are many extensions provided by the
|
|
||||||
community that make adding new functionality easy.
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
pip install -U Flask
|
|
||||||
|
|
||||||
|
|
||||||
A Simple Example
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from flask import Flask
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
@app.route('/')
|
|
||||||
def hello():
|
|
||||||
return 'Hello, World!'
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
$ FLASK_APP=hello.py flask run
|
|
||||||
* Serving Flask app "hello"
|
|
||||||
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
|
|
||||||
|
|
||||||
|
|
||||||
Donate
|
|
||||||
------
|
|
||||||
|
|
||||||
The Pallets organization develops and supports Flask and the libraries
|
|
||||||
it uses. In order to grow the community of contributors and users, and
|
|
||||||
allow the maintainers to devote more time to the projects, `please
|
|
||||||
donate today`_.
|
|
||||||
|
|
||||||
.. _please donate today: https://psfmember.org/civicrm/contribute/transact?reset=1&id=20
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://www.palletsprojects.com/p/flask/
|
|
||||||
* Documentation: http://flask.pocoo.org/docs/
|
|
||||||
* License: `BSD <https://github.com/pallets/flask/blob/master/LICENSE>`_
|
|
||||||
* Releases: https://pypi.org/project/Flask/
|
|
||||||
* Code: https://github.com/pallets/flask
|
|
||||||
* Issue tracker: https://github.com/pallets/flask/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/flask
|
|
||||||
* Windows: https://ci.appveyor.com/project/pallets/flask
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/flask
|
|
||||||
|
|
||||||
.. _WSGI: https://wsgi.readthedocs.io
|
|
||||||
.. _Werkzeug: https://www.palletsprojects.com/p/werkzeug/
|
|
||||||
.. _Jinja: https://www.palletsprojects.com/p/jinja/
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
Flask-1.0.2.dist-info/LICENSE.txt,sha256=ziEXA3AIuaiUn1qe4cd1XxCESWTYrk4TjN7Qb06J3l8,1575
|
|
||||||
Flask-1.0.2.dist-info/METADATA,sha256=iA5tiNWzTtgCVe80aTZGNWsckj853fJyfvHs9U-WZRk,4182
|
|
||||||
Flask-1.0.2.dist-info/RECORD,,
|
|
||||||
Flask-1.0.2.dist-info/WHEEL,sha256=J3CsTk7Mf2JNUyhImI-mjX-fmI4oDjyiXgWT4qgZiCE,110
|
|
||||||
Flask-1.0.2.dist-info/entry_points.txt,sha256=gBLA1aKg0OYR8AhbAfg8lnburHtKcgJLDU52BBctN0k,42
|
|
||||||
Flask-1.0.2.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6
|
|
||||||
flask/__init__.py,sha256=qq8lK6QQbxJALf1igz7qsvUwOTAoKvFGfdLm7jPNsso,1673
|
|
||||||
flask/__main__.py,sha256=pgIXrHhxM5MAMvgzAqWpw_t6AXZ1zG38us4JRgJKtxk,291
|
|
||||||
flask/_compat.py,sha256=UDFGhosh6mOdNB-4evKPuneHum1OpcAlwTNJCRm0irQ,2892
|
|
||||||
flask/app.py,sha256=ahpe3T8w98rQd_Er5d7uDxK57S1nnqGQx3V3hirBovU,94147
|
|
||||||
flask/blueprints.py,sha256=Cyhl_x99tgwqEZPtNDJUFneAfVJxWfEU4bQA7zWS6VU,18331
|
|
||||||
flask/cli.py,sha256=30QYAO10Do9LbZYCLgfI_xhKjASdLopL8wKKVUGS2oA,29442
|
|
||||||
flask/config.py,sha256=kznUhj4DLYxsTF_4kfDG8GEHto1oZG_kqblyrLFtpqQ,9951
|
|
||||||
flask/ctx.py,sha256=leFzS9fzmo0uaLCdxpHc5_iiJZ1H0X_Ig4yPCOvT--g,16224
|
|
||||||
flask/debughelpers.py,sha256=1ceC-UyqZTd4KsJkf0OObHPsVt5R3T6vnmYhiWBjV-w,6479
|
|
||||||
flask/globals.py,sha256=pGg72QW_-4xUfsI33I5L_y76c21AeqfSqXDcbd8wvXU,1649
|
|
||||||
flask/helpers.py,sha256=YCl8D1plTO1evEYP4KIgaY3H8Izww5j4EdgRJ89oHTw,40106
|
|
||||||
flask/logging.py,sha256=qV9h0vt7NIRkKM9OHDWndzO61E5CeBMlqPJyTt-W2Wc,2231
|
|
||||||
flask/sessions.py,sha256=2XHV4ASREhSEZ8bsPQW6pNVNuFtbR-04BzfKg0AfvHo,14452
|
|
||||||
flask/signals.py,sha256=BGQbVyCYXnzKK2DVCzppKFyWN1qmrtW1QMAYUs-1Nr8,2211
|
|
||||||
flask/templating.py,sha256=FDfWMbpgpC3qObW8GGXRAVrkHFF8K4CHOJymB1wvULI,4914
|
|
||||||
flask/testing.py,sha256=XD3gWNvLUV8dqVHwKd9tZzsj81fSHtjOphQ1wTNtlMs,9379
|
|
||||||
flask/views.py,sha256=Wy-_WkUVtCfE2zCXYeJehNgHuEtviE4v3HYfJ--MpbY,5733
|
|
||||||
flask/wrappers.py,sha256=1Z9hF5-hXQajn_58XITQFRY8efv3Vy3uZ0avBfZu6XI,7511
|
|
||||||
flask/json/__init__.py,sha256=Ns1Hj805XIxuBMh2z0dYnMVfb_KUgLzDmP3WoUYaPhw,10729
|
|
||||||
flask/json/tag.py,sha256=9ehzrmt5k7hxf7ZEK0NOs3swvQyU9fWNe-pnYe69N60,8223
|
|
||||||
../../../bin/flask,sha256=1RmXXcG_g9i701ODWEGGhFA3KfN8lLFwp4CMSdYinIc,236
|
|
||||||
Flask-1.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
flask/__pycache__/signals.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/logging.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/testing.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/debughelpers.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/templating.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/wrappers.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/globals.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/app.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/cli.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/views.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/blueprints.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/helpers.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/ctx.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/sessions.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/config.cpython-36.pyc,,
|
|
||||||
flask/__pycache__/__main__.cpython-36.pyc,,
|
|
||||||
flask/json/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
flask/json/__pycache__/tag.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
[console_scripts]
|
|
||||||
flask = flask.cli:main
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
flask
|
|
@ -1,21 +0,0 @@
|
|||||||
Flask-WTF
|
|
||||||
=========
|
|
||||||
|
|
||||||
.. image:: https://travis-ci.org/lepture/flask-wtf.svg?branch=master
|
|
||||||
:target: https://travis-ci.org/lepture/flask-wtf
|
|
||||||
:alt: Travis CI Status
|
|
||||||
.. image:: https://coveralls.io/repos/lepture/flask-wtf/badge.svg?branch=master
|
|
||||||
:target: https://coveralls.io/r/lepture/flask-wtf
|
|
||||||
:alt: Coverage Status
|
|
||||||
|
|
||||||
Simple integration of Flask and WTForms, including CSRF, file upload,
|
|
||||||
and reCAPTCHA.
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* `Documentation <https://flask-wtf.readthedocs.io>`_
|
|
||||||
* `PyPI <https://pypi.python.org/pypi/Flask-WTF>`_
|
|
||||||
* `GitHub <https://github.com/lepture/flask-wtf>`_
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,32 +0,0 @@
|
|||||||
Copyright (c) 2010 by Dan Jacob.
|
|
||||||
Copyright (c) 2013 by Hsiaoming Yang.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer in the documentation and/or other materials provided
|
|
||||||
with the distribution.
|
|
||||||
|
|
||||||
* The names of the contributors may not be used to endorse or
|
|
||||||
promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,52 +0,0 @@
|
|||||||
Metadata-Version: 2.0
|
|
||||||
Name: Flask-WTF
|
|
||||||
Version: 0.14.2
|
|
||||||
Summary: Simple integration of Flask and WTForms.
|
|
||||||
Home-page: https://github.com/lepture/flask-wtf
|
|
||||||
Author: Hsiaoming Yang
|
|
||||||
Author-email: me@lepture.com
|
|
||||||
License: BSD
|
|
||||||
Platform: any
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Framework :: Flask
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Requires-Dist: Flask
|
|
||||||
Requires-Dist: WTForms
|
|
||||||
|
|
||||||
Flask-WTF
|
|
||||||
=========
|
|
||||||
|
|
||||||
.. image:: https://travis-ci.org/lepture/flask-wtf.svg?branch=master
|
|
||||||
:target: https://travis-ci.org/lepture/flask-wtf
|
|
||||||
:alt: Travis CI Status
|
|
||||||
.. image:: https://coveralls.io/repos/lepture/flask-wtf/badge.svg?branch=master
|
|
||||||
:target: https://coveralls.io/r/lepture/flask-wtf
|
|
||||||
:alt: Coverage Status
|
|
||||||
|
|
||||||
Simple integration of Flask and WTForms, including CSRF, file upload,
|
|
||||||
and reCAPTCHA.
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* `Documentation <https://flask-wtf.readthedocs.io>`_
|
|
||||||
* `PyPI <https://pypi.python.org/pypi/Flask-WTF>`_
|
|
||||||
* `GitHub <https://github.com/lepture/flask-wtf>`_
|
|
||||||
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
Flask_WTF-0.14.2.dist-info/DESCRIPTION.rst,sha256=vyJWnOD4vgnZ6x2ERr5EH1l2uzLxXCBhr_O1L6Ell2E,584
|
|
||||||
Flask_WTF-0.14.2.dist-info/LICENSE.txt,sha256=oHX42YrP2wXdmHFiQrniwbOrmHIpJrPEz2yRasFOg1A,1490
|
|
||||||
Flask_WTF-0.14.2.dist-info/METADATA,sha256=M8ZfImxUciRZ5Av5r1x37JnEC3wG5sacQv346wmldHU,1846
|
|
||||||
Flask_WTF-0.14.2.dist-info/RECORD,,
|
|
||||||
Flask_WTF-0.14.2.dist-info/WHEEL,sha256=5wvfB7GvgZAbKBSE9uX9Zbi6LCL-_KgezgHblXhCRnM,113
|
|
||||||
Flask_WTF-0.14.2.dist-info/metadata.json,sha256=qGwhg5DSr2WilK8cvCcQsdrtDJ5NFgR1faLrO8YZCAY,1370
|
|
||||||
Flask_WTF-0.14.2.dist-info/top_level.txt,sha256=zK3flQPSjYTkAMjB0V6Jhu3jyotC0biL1mMhzitYoog,10
|
|
||||||
flask_wtf/__init__.py,sha256=zNLRzvfi7PLTc7jkqQT7pzgtsw9_9eN7BfO4fzwKxJc,406
|
|
||||||
flask_wtf/_compat.py,sha256=4h1U_W5vbM9L8sJ4ZPFevuneM1TirnBTTVrsHRH3uUE,849
|
|
||||||
flask_wtf/csrf.py,sha256=suKAZarzLIBuiJFqwP--RldEYabPj0DGfYkQA32Cc1E,11554
|
|
||||||
flask_wtf/file.py,sha256=2UnODjSq47IjsFQMiu_z218vFA5pnQ9nL1FpX7hpK1M,2971
|
|
||||||
flask_wtf/form.py,sha256=lpx-ItUnKjYOW8VxQpBAlbhoROJNd2PHi3v0loPPyYI,4948
|
|
||||||
flask_wtf/html5.py,sha256=ReZHJto8DAZkO3BxUDdHnkyz5mM21KtqKYh0achJ5IM,372
|
|
||||||
flask_wtf/i18n.py,sha256=xMB_jHCOaWfF1RXm7E6hsRHwPsUyVyKX2Rhy3tBOUgk,1790
|
|
||||||
flask_wtf/recaptcha/__init__.py,sha256=q3TC7tZPSAZ3On3GApZKGn0EcydX4zprisbyTlhN3sQ,86
|
|
||||||
flask_wtf/recaptcha/fields.py,sha256=kN_10iZYQcYg1EtxFp4B87BlFnnrJCktrh7bTykOVj4,453
|
|
||||||
flask_wtf/recaptcha/validators.py,sha256=8UgjA72OxUyHVk_lm8-fGhPEvKgkMtsoFNt7yzjo0xw,2398
|
|
||||||
flask_wtf/recaptcha/widgets.py,sha256=me-oaqMNPW2BLujNTuDHCXWcVhh6eI7wlm6_TIrIF_U,1267
|
|
||||||
Flask_WTF-0.14.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
flask_wtf/recaptcha/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
flask_wtf/recaptcha/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
flask_wtf/recaptcha/__pycache__/widgets.cpython-36.pyc,,
|
|
||||||
flask_wtf/recaptcha/__pycache__/validators.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/csrf.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/form.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/i18n.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/file.cpython-36.pyc,,
|
|
||||||
flask_wtf/__pycache__/html5.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.30.0.a0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
{"classifiers": ["Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Flask", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules"], "extensions": {"python.details": {"contacts": [{"email": "me@lepture.com", "name": "Hsiaoming Yang", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}, "project_urls": {"Home": "https://github.com/lepture/flask-wtf"}}}, "extras": [], "generator": "bdist_wheel (0.30.0.a0)", "license": "BSD", "metadata_version": "2.0", "name": "Flask-WTF", "platform": "any", "run_requires": [{"requires": ["Flask", "WTForms"]}], "summary": "Simple integration of Flask and WTForms.", "version": "0.14.2"}
|
|
@ -1 +0,0 @@
|
|||||||
flask_wtf
|
|
@ -1,37 +0,0 @@
|
|||||||
|
|
||||||
Jinja2
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
Jinja2 is a template engine written in pure Python. It provides a
|
|
||||||
`Django`_ inspired non-XML syntax but supports inline expressions and
|
|
||||||
an optional `sandboxed`_ environment.
|
|
||||||
|
|
||||||
Nutshell
|
|
||||||
--------
|
|
||||||
|
|
||||||
Here a small example of a Jinja template::
|
|
||||||
|
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% block title %}Memberlist{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<ul>
|
|
||||||
{% for user in users %}
|
|
||||||
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
Philosophy
|
|
||||||
----------
|
|
||||||
|
|
||||||
Application logic is for the controller but don't try to make the life
|
|
||||||
for the template designer too hard by giving him too few functionality.
|
|
||||||
|
|
||||||
For more informations visit the new `Jinja2 webpage`_ and `documentation`_.
|
|
||||||
|
|
||||||
.. _sandboxed: https://en.wikipedia.org/wiki/Sandbox_(computer_security)
|
|
||||||
.. _Django: https://www.djangoproject.com/
|
|
||||||
.. _Jinja2 webpage: http://jinja.pocoo.org/
|
|
||||||
.. _documentation: http://jinja.pocoo.org/2/documentation/
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,31 +0,0 @@
|
|||||||
Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above
|
|
||||||
copyright notice, this list of conditions and the following
|
|
||||||
disclaimer in the documentation and/or other materials provided
|
|
||||||
with the distribution.
|
|
||||||
|
|
||||||
* The names of the contributors may not be used to endorse or
|
|
||||||
promote products derived from this software without specific
|
|
||||||
prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,68 +0,0 @@
|
|||||||
Metadata-Version: 2.0
|
|
||||||
Name: Jinja2
|
|
||||||
Version: 2.10
|
|
||||||
Summary: A small but fast and easy to use stand-alone template engine written in pure python.
|
|
||||||
Home-page: http://jinja.pocoo.org/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
License: BSD
|
|
||||||
Description-Content-Type: UNKNOWN
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
||||||
Requires-Dist: MarkupSafe (>=0.23)
|
|
||||||
Provides-Extra: i18n
|
|
||||||
Requires-Dist: Babel (>=0.8); extra == 'i18n'
|
|
||||||
|
|
||||||
|
|
||||||
Jinja2
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
Jinja2 is a template engine written in pure Python. It provides a
|
|
||||||
`Django`_ inspired non-XML syntax but supports inline expressions and
|
|
||||||
an optional `sandboxed`_ environment.
|
|
||||||
|
|
||||||
Nutshell
|
|
||||||
--------
|
|
||||||
|
|
||||||
Here a small example of a Jinja template::
|
|
||||||
|
|
||||||
{% extends 'base.html' %}
|
|
||||||
{% block title %}Memberlist{% endblock %}
|
|
||||||
{% block content %}
|
|
||||||
<ul>
|
|
||||||
{% for user in users %}
|
|
||||||
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
Philosophy
|
|
||||||
----------
|
|
||||||
|
|
||||||
Application logic is for the controller but don't try to make the life
|
|
||||||
for the template designer too hard by giving him too few functionality.
|
|
||||||
|
|
||||||
For more informations visit the new `Jinja2 webpage`_ and `documentation`_.
|
|
||||||
|
|
||||||
.. _sandboxed: https://en.wikipedia.org/wiki/Sandbox_(computer_security)
|
|
||||||
.. _Django: https://www.djangoproject.com/
|
|
||||||
.. _Jinja2 webpage: http://jinja.pocoo.org/
|
|
||||||
.. _documentation: http://jinja.pocoo.org/2/documentation/
|
|
||||||
|
|
||||||
|
|
@ -1,63 +0,0 @@
|
|||||||
Jinja2-2.10.dist-info/DESCRIPTION.rst,sha256=b5ckFDoM7vVtz_mAsJD4OPteFKCqE7beu353g4COoYI,978
|
|
||||||
Jinja2-2.10.dist-info/LICENSE.txt,sha256=JvzUNv3Io51EiWrAPm8d_SXjhJnEjyDYvB3Tvwqqils,1554
|
|
||||||
Jinja2-2.10.dist-info/METADATA,sha256=18EgU8zR6-av-0-5y_gXebzK4GnBB_76lALUsl-6QHM,2258
|
|
||||||
Jinja2-2.10.dist-info/RECORD,,
|
|
||||||
Jinja2-2.10.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110
|
|
||||||
Jinja2-2.10.dist-info/entry_points.txt,sha256=NdzVcOrqyNyKDxD09aERj__3bFx2paZhizFDsKmVhiA,72
|
|
||||||
Jinja2-2.10.dist-info/metadata.json,sha256=NPUJ9TMBxVQAv_kTJzvU8HwmP-4XZvbK9mz6_4YUVl4,1473
|
|
||||||
Jinja2-2.10.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7
|
|
||||||
jinja2/__init__.py,sha256=xJHjaMoy51_KXn1wf0cysH6tUUifUxZCwSOfcJGEYZw,2614
|
|
||||||
jinja2/_compat.py,sha256=xP60CE5Qr8FTYcDE1f54tbZLKGvMwYml4-8T7Q4KG9k,2596
|
|
||||||
jinja2/_identifier.py,sha256=W1QBSY-iJsyt6oR_nKSuNNCzV95vLIOYgUNPUI1d5gU,1726
|
|
||||||
jinja2/asyncfilters.py,sha256=cTDPvrS8Hp_IkwsZ1m9af_lr5nHysw7uTa5gV0NmZVE,4144
|
|
||||||
jinja2/asyncsupport.py,sha256=UErQ3YlTLaSjFb94P4MVn08-aVD9jJxty2JVfMRb-1M,7878
|
|
||||||
jinja2/bccache.py,sha256=nQldx0ZRYANMyfvOihRoYFKSlUdd5vJkS7BjxNwlOZM,12794
|
|
||||||
jinja2/compiler.py,sha256=BqC5U6JxObSRhblyT_a6Tp5GtEU5z3US1a4jLQaxxgo,65386
|
|
||||||
jinja2/constants.py,sha256=uwwV8ZUhHhacAuz5PTwckfsbqBaqM7aKfyJL7kGX5YQ,1626
|
|
||||||
jinja2/debug.py,sha256=WTVeUFGUa4v6ReCsYv-iVPa3pkNB75OinJt3PfxNdXs,12045
|
|
||||||
jinja2/defaults.py,sha256=Em-95hmsJxIenDCZFB1YSvf9CNhe9rBmytN3yUrBcWA,1400
|
|
||||||
jinja2/environment.py,sha256=VnkAkqw8JbjZct4tAyHlpBrka2vqB-Z58RAP-32P1ZY,50849
|
|
||||||
jinja2/exceptions.py,sha256=_Rj-NVi98Q6AiEjYQOsP8dEIdu5AlmRHzcSNOPdWix4,4428
|
|
||||||
jinja2/ext.py,sha256=atMQydEC86tN1zUsdQiHw5L5cF62nDbqGue25Yiu3N4,24500
|
|
||||||
jinja2/filters.py,sha256=yOAJk0MsH-_gEC0i0U6NweVQhbtYaC-uE8xswHFLF4w,36528
|
|
||||||
jinja2/idtracking.py,sha256=2GbDSzIvGArEBGLkovLkqEfmYxmWsEf8c3QZwM4uNsw,9197
|
|
||||||
jinja2/lexer.py,sha256=ySEPoXd1g7wRjsuw23uimS6nkGN5aqrYwcOKxCaVMBQ,28559
|
|
||||||
jinja2/loaders.py,sha256=xiTuURKAEObyym0nU8PCIXu_Qp8fn0AJ5oIADUUm-5Q,17382
|
|
||||||
jinja2/meta.py,sha256=fmKHxkmZYAOm9QyWWy8EMd6eefAIh234rkBMW2X4ZR8,4340
|
|
||||||
jinja2/nativetypes.py,sha256=_sJhS8f-8Q0QMIC0dm1YEdLyxEyoO-kch8qOL5xUDfE,7308
|
|
||||||
jinja2/nodes.py,sha256=L10L_nQDfubLhO3XjpF9qz46FSh2clL-3e49ogVlMmA,30853
|
|
||||||
jinja2/optimizer.py,sha256=MsdlFACJ0FRdPtjmCAdt7JQ9SGrXFaDNUaslsWQaG3M,1722
|
|
||||||
jinja2/parser.py,sha256=lPzTEbcpTRBLw8ii6OYyExHeAhaZLMA05Hpv4ll3ULk,35875
|
|
||||||
jinja2/runtime.py,sha256=DHdD38Pq8gj7uWQC5usJyWFoNWL317A9AvXOW_CLB34,27755
|
|
||||||
jinja2/sandbox.py,sha256=TVyZHlNqqTzsv9fv2NvJNmSdWRHTguhyMHdxjWms32U,16708
|
|
||||||
jinja2/tests.py,sha256=iJQLwbapZr-EKquTG_fVOVdwHUUKf3SX9eNkjQDF8oU,4237
|
|
||||||
jinja2/utils.py,sha256=q24VupGZotQ-uOyrJxCaXtDWhZC1RgsQG7kcdmjck2Q,20629
|
|
||||||
jinja2/visitor.py,sha256=JD1H1cANA29JcntFfN5fPyqQxB4bI4wC00BzZa-XHks,3316
|
|
||||||
Jinja2-2.10.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
jinja2/__pycache__/sandbox.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/parser.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/nodes.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/constants.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/environment.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/exceptions.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/runtime.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/nativetypes.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/bccache.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/loaders.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/utils.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/defaults.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/_identifier.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/tests.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/asyncsupport.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/debug.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/meta.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/asyncfilters.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/filters.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/compiler.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/visitor.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/optimizer.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/idtracking.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/lexer.cpython-36.pyc,,
|
|
||||||
jinja2/__pycache__/ext.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.30.0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
[babel.extractors]
|
|
||||||
jinja2 = jinja2.ext:babel_extract[i18n]
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
{"classifiers": ["Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing :: Markup :: HTML"], "description_content_type": "UNKNOWN", "extensions": {"python.details": {"contacts": [{"email": "armin.ronacher@active-4.com", "name": "Armin Ronacher", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}, "project_urls": {"Home": "http://jinja.pocoo.org/"}}, "python.exports": {"babel.extractors": {"jinja2": "jinja2.ext:babel_extract [i18n]"}}}, "extras": ["i18n"], "generator": "bdist_wheel (0.30.0)", "license": "BSD", "metadata_version": "2.0", "name": "Jinja2", "run_requires": [{"extra": "i18n", "requires": ["Babel (>=0.8)"]}, {"requires": ["MarkupSafe (>=0.23)"]}], "summary": "A small but fast and easy to use stand-alone template engine written in pure python.", "version": "2.10"}
|
|
@ -1 +0,0 @@
|
|||||||
jinja2
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,33 +0,0 @@
|
|||||||
`BSD 3-Clause <https://opensource.org/licenses/BSD-3-Clause>`_
|
|
||||||
|
|
||||||
Copyright © 2010 by the Pallets team.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
- Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
- Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
- Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
||||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGE.
|
|
@ -1,103 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: MarkupSafe
|
|
||||||
Version: 1.1.0
|
|
||||||
Summary: Safely add untrusted strings to HTML/XML markup.
|
|
||||||
Home-page: https://www.palletsprojects.com/p/markupsafe/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
Maintainer: Pallets Team
|
|
||||||
Maintainer-email: contact@palletsprojects.com
|
|
||||||
License: BSD
|
|
||||||
Project-URL: Documentation, https://markupsafe.palletsprojects.com/
|
|
||||||
Project-URL: Code, https://github.com/pallets/markupsafe
|
|
||||||
Project-URL: Issue tracker, https://github.com/pallets/markupsafe/issues
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Classifier: Topic :: Text Processing :: Markup :: HTML
|
|
||||||
Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*
|
|
||||||
|
|
||||||
MarkupSafe
|
|
||||||
==========
|
|
||||||
|
|
||||||
MarkupSafe implements a text object that escapes characters so it is
|
|
||||||
safe to use in HTML and XML. Characters that have special meanings are
|
|
||||||
replaced so that they display as the actual characters. This mitigates
|
|
||||||
injection attacks, meaning untrusted user input can safely be displayed
|
|
||||||
on a page.
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
pip install -U MarkupSafe
|
|
||||||
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
||||||
Examples
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. code-block:: pycon
|
|
||||||
|
|
||||||
>>> from markupsafe import Markup, escape
|
|
||||||
>>> # escape replaces special characters and wraps in Markup
|
|
||||||
>>> escape('<script>alert(document.cookie);</script>')
|
|
||||||
Markup(u'<script>alert(document.cookie);</script>')
|
|
||||||
>>> # wrap in Markup to mark text "safe" and prevent escaping
|
|
||||||
>>> Markup('<strong>Hello</strong>')
|
|
||||||
Markup('<strong>hello</strong>')
|
|
||||||
>>> escape(Markup('<strong>Hello</strong>'))
|
|
||||||
Markup('<strong>hello</strong>')
|
|
||||||
>>> # Markup is a text subclass (str on Python 3, unicode on Python 2)
|
|
||||||
>>> # methods and operators escape their arguments
|
|
||||||
>>> template = Markup("Hello <em>%s</em>")
|
|
||||||
>>> template % '"World"'
|
|
||||||
Markup('Hello <em>"World"</em>')
|
|
||||||
|
|
||||||
|
|
||||||
Donate
|
|
||||||
------
|
|
||||||
|
|
||||||
The Pallets organization develops and supports MarkupSafe and other
|
|
||||||
libraries that use it. In order to grow the community of contributors
|
|
||||||
and users, and allow the maintainers to devote more time to the
|
|
||||||
projects, `please donate today`_.
|
|
||||||
|
|
||||||
.. _please donate today: https://psfmember.org/civicrm/contribute/transact?reset=1&id=20
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://www.palletsprojects.com/p/markupsafe/
|
|
||||||
* Documentation: https://markupsafe.palletsprojects.com/
|
|
||||||
* License: `BSD <https://github.com/pallets/markupsafe/blob/master/LICENSE.rst>`_
|
|
||||||
* Releases: https://pypi.org/project/MarkupSafe/
|
|
||||||
* Code: https://github.com/pallets/markupsafe
|
|
||||||
* Issue tracker: https://github.com/pallets/markupsafe/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/markupsafe
|
|
||||||
* Windows: https://ci.appveyor.com/project/pallets/markupsafe
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/markupsafe
|
|
||||||
|
|
||||||
|
|
@ -1,16 +0,0 @@
|
|||||||
markupsafe/_compat.py,sha256=3oSvQpEFzsJ29NKVy-Fqk6ZlRxmlCB5k0G21aN0zNtQ,596
|
|
||||||
markupsafe/_speedups.c,sha256=VfElhhq9oulHEd2wBZ2MX9A80r4jFovsVGQD2zxmVk0,9883
|
|
||||||
markupsafe/_constants.py,sha256=ueEz1Jxdw5TKWBbhPr4Ad_2L2MSEh73AYiYe4l3cZy4,4728
|
|
||||||
markupsafe/__init__.py,sha256=T5J4pS7LRx1xRqfV3xz-QN_D9pSmfVDJnTrc2cTO4Ro,10164
|
|
||||||
markupsafe/_speedups.cpython-36m-x86_64-linux-gnu.so,sha256=BS7m4DA4L7J_sXAEFkmQeW3HJStGrC1yXYRifVOaTvc,38555
|
|
||||||
markupsafe/_native.py,sha256=fUrjjbRXIpHM-8l9QXFJ2xg5rv_48U2aN99plyL0kfs,1911
|
|
||||||
MarkupSafe-1.1.0.dist-info/LICENSE.txt,sha256=7V249lpOdvRv2m6SF9gCDtq_nsg8tFpdeTdsWWM_g9M,1614
|
|
||||||
MarkupSafe-1.1.0.dist-info/WHEEL,sha256=d2ILPScH-y2UwGxsW1PeA2TT-KW0Git4AJ6LeOK8sQo,109
|
|
||||||
MarkupSafe-1.1.0.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11
|
|
||||||
MarkupSafe-1.1.0.dist-info/METADATA,sha256=usFnBges7tmAH4_Yt5Ypb8Bco4R9uLUdD0V6YHbvhLw,3585
|
|
||||||
MarkupSafe-1.1.0.dist-info/RECORD,,
|
|
||||||
MarkupSafe-1.1.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
markupsafe/__pycache__/_constants.cpython-36.pyc,,
|
|
||||||
markupsafe/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
markupsafe/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
markupsafe/__pycache__/_native.cpython-36.pyc,,
|
|
@ -1,5 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.1)
|
|
||||||
Root-Is-Purelib: false
|
|
||||||
Tag: cp36-cp36m-manylinux1_x86_64
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
markupsafe
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,101 +0,0 @@
|
|||||||
Metadata-Version: 2.1
|
|
||||||
Name: WTForms
|
|
||||||
Version: 2.2.1
|
|
||||||
Summary: A flexible forms validation and rendering library for Python web development.
|
|
||||||
Home-page: https://wtforms.readthedocs.io/
|
|
||||||
Author: Thomas Johansson, James Crasta
|
|
||||||
Author-email: wtforms@simplecodes.com
|
|
||||||
Maintainer: WTForms team
|
|
||||||
Maintainer-email: davidism@gmail.com
|
|
||||||
License: BSD
|
|
||||||
Project-URL: Documentation, https://wtforms.readthedocs.io/
|
|
||||||
Project-URL: Code, https://github.com/wtforms/wtforms
|
|
||||||
Project-URL: Issue tracker, https://github.com/wtforms/wtforms/issues
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Provides-Extra: locale
|
|
||||||
Requires-Dist: ordereddict; python_version=="2.6"
|
|
||||||
Provides-Extra: locale
|
|
||||||
Requires-Dist: Babel (>=1.3); extra == 'locale'
|
|
||||||
|
|
||||||
WTForms
|
|
||||||
=======
|
|
||||||
|
|
||||||
WTForms is a flexible forms validation and rendering library for Python
|
|
||||||
web development. It is `framework agnostic`_ and can work with whatever
|
|
||||||
web framework and template engine you choose. There are various
|
|
||||||
community libraries that provide closer integration with popular
|
|
||||||
frameworks.
|
|
||||||
|
|
||||||
To get started using WTForms, we recommend reading the `crash course`_
|
|
||||||
in the docs.
|
|
||||||
|
|
||||||
.. _crash course: https://wtforms.readthedocs.io/en/stable/crash_course.html
|
|
||||||
.. _framework agnostic: https://wtforms.readthedocs.io/en/stable/faq.html#does-wtforms-work-with-library-here
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
Install and update using pip::
|
|
||||||
|
|
||||||
pip install -U WTForms
|
|
||||||
|
|
||||||
|
|
||||||
Third-Party Library Integrations
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
WTForms is designed to work with any web framework and template engine.
|
|
||||||
There are a number of community-provided libraries that make integrating
|
|
||||||
with frameworks even better.
|
|
||||||
|
|
||||||
- `Flask-WTF`_ integrates with the Flask framework. It can
|
|
||||||
automatically load data from the request, uses Flask-Babel to
|
|
||||||
translate based on user-selected locale, provides full-application
|
|
||||||
CSRF, and more.
|
|
||||||
- `WTForms-Alchemy`_ provides rich support for generating forms from
|
|
||||||
SQLAlchemy models, including an expanded set of fields and
|
|
||||||
validators.
|
|
||||||
- `WTForms-SQLAlchemy`_ provides ORM-backed fields and form generation
|
|
||||||
from SQLAlchemy models.
|
|
||||||
- `WTForms-AppEngine`_ provides ORM-backed fields and form generation
|
|
||||||
from AppEnding db/ndb schema
|
|
||||||
- `WTForms-AppEngine`_ provides ORM-backed fields and form generation
|
|
||||||
from Django models, as well as integration with Django's I18N
|
|
||||||
support.
|
|
||||||
|
|
||||||
.. _Flask-WTF: https://flask-wtf.readthedocs.io/
|
|
||||||
.. _WTForms-Alchemy: https://wtforms-alchemy.readthedocs.io/
|
|
||||||
.. _WTForms-SQLAlchemy: https://github.com/wtforms/wtforms-sqlalchemy
|
|
||||||
.. _WTForms-AppEngine: https://github.com/wtforms/wtforms-appengine
|
|
||||||
.. _WTForms-Django: https://github.com/wtforms/wtforms-django
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
- Documentation: https://wtforms.readthedocs.io/
|
|
||||||
- License: `BSD <https://github.com/wtforms/wtforms/blob/master/LICENSE>`_
|
|
||||||
- Releases: https://pypi.org/project/WTForms/
|
|
||||||
- Code: https://github.com/wtforms/wtforms
|
|
||||||
- Issue tracker: https://github.com/wtforms/wtforms/issues
|
|
||||||
- Test status:
|
|
||||||
|
|
||||||
- Linux: https://travis-ci.org/wtforms/wtforms
|
|
||||||
|
|
||||||
- Test coverage: https://coveralls.io/github/wtforms/wtforms
|
|
||||||
|
|
||||||
|
|
@ -1,147 +0,0 @@
|
|||||||
WTForms-2.2.1.dist-info/METADATA,sha256=Aqv5s_FPo1o3VxjnX-nclKn2dBPIVOpTwggPPH-DJs0,3771
|
|
||||||
WTForms-2.2.1.dist-info/RECORD,,
|
|
||||||
WTForms-2.2.1.dist-info/WHEEL,sha256=gduuPyBvFJQSQ0zdyxF7k0zynDXbIbvg5ZBHoXum5uk,110
|
|
||||||
WTForms-2.2.1.dist-info/top_level.txt,sha256=k5K62RAEkLEN23p118t3tRgvL6I_k56NiIU7Hk8Phv8,8
|
|
||||||
wtforms/__init__.py,sha256=h4gmUHtk1Y9cGJ-l63rhrp-nC9REGdpcRPBGoJKP9hk,380
|
|
||||||
wtforms/compat.py,sha256=buY-q7yLNO-2OlxA5QPAcdBO8urjZTtxvFnxg_1Euuo,589
|
|
||||||
wtforms/form.py,sha256=ahME3_8CmTuvVsatV-AKqinBkOSEnLOE_nMeQLgrQEA,11608
|
|
||||||
wtforms/i18n.py,sha256=RuMPdvfsxHGMqKySUy4DpMfEAzruPK_7gHe6GQTrekc,2175
|
|
||||||
wtforms/meta.py,sha256=9yLQuKP4N_OiPBsPy3tBc7auldxhFryZweySDsKL8zI,3822
|
|
||||||
wtforms/utils.py,sha256=Zg70vKv96pnHjrkSZ6KlzSo1noh20GV5IqfPy6FrOyA,1504
|
|
||||||
wtforms/validators.py,sha256=niMtYGGRijIiZ2ruslYfRP7CTGDul_DHiR-iYen7zRg,19430
|
|
||||||
wtforms/csrf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
wtforms/csrf/core.py,sha256=Ot8eOSAZ88qeDBlSUhRqiLfyWA13g3EFJ4zWZ7EGYnc,3157
|
|
||||||
wtforms/csrf/session.py,sha256=baww8MJ5YObyYItXX0Vz5AjxZTdOfTqti3zsD3koka0,3056
|
|
||||||
wtforms/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
wtforms/ext/appengine/__init__.py,sha256=xXkE1qkwzkkBw4o0YhWGZSZXcsV60DaLxX4fkxNcNe8,269
|
|
||||||
wtforms/ext/appengine/db.py,sha256=IEJng34ztXLVSlLxneZ7M4kgGOZOPf9zR_6RTqv6Z1Q,18588
|
|
||||||
wtforms/ext/appengine/fields.py,sha256=8Z2BJy7ft0fu_vZksneZ7xdVxdqHkWIMNjgnyfdKtho,7574
|
|
||||||
wtforms/ext/appengine/ndb.py,sha256=szIwWA5FyD2lqZefayl__C2UsXMEAGQndqPYPhOH4Vk,17124
|
|
||||||
wtforms/ext/csrf/__init__.py,sha256=bIQ48rbnoYrYPZkkGz04b_7PZ8leQY_CExEqYw8yitI,45
|
|
||||||
wtforms/ext/csrf/fields.py,sha256=Ta3vLg9KQkpUTCnDF-7CP3IW11X0UqqhvL68sAopYTs,430
|
|
||||||
wtforms/ext/csrf/form.py,sha256=ZxmvC3Um2qYeUncu6D390-W62mVQclzwPLP9_R7GedU,1785
|
|
||||||
wtforms/ext/csrf/session.py,sha256=aKYb9_jgEmxIgvWuk0cdx9YAGTi9s3F4xy_0ibxyhbo,2627
|
|
||||||
wtforms/ext/dateutil/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
wtforms/ext/dateutil/fields.py,sha256=RlupqB1WX_HiKJEYqi9IAxiCElxgbBDHHuXrGF4nbYs,3429
|
|
||||||
wtforms/ext/django/__init__.py,sha256=OQ0wr3s5_cUmUU7htHXhobyxVWJS16Ve4qBK_PLs_rw,259
|
|
||||||
wtforms/ext/django/fields.py,sha256=pEWxaAtMq5_p8QaJPOffWsX7U4LB5f8Bq8ZBw4fedxk,4580
|
|
||||||
wtforms/ext/django/i18n.py,sha256=VLvzJ8lQOqs5Uxnhe4aOE5StGgPEvGhfBEHNrRQFtp0,626
|
|
||||||
wtforms/ext/django/orm.py,sha256=Mme5i_o_bJTXGKkabRz03EJmGggPMejAg95XNhYtNUc,6096
|
|
||||||
wtforms/ext/django/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
wtforms/ext/django/templatetags/wtforms.py,sha256=iCOicSMEkixm5bcJHz35Zx0h6xVwnz1H9JglB_hU69o,2826
|
|
||||||
wtforms/ext/i18n/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
wtforms/ext/i18n/form.py,sha256=mfsavr4LGI1GhoFLsWSuSqVPHH6QNiyqoAfY94u-XP0,1608
|
|
||||||
wtforms/ext/i18n/utils.py,sha256=rx9-pNYjIp8DLU-VQ9XxRSXHYZuFv4ktRejzVBPTDBg,530
|
|
||||||
wtforms/ext/sqlalchemy/__init__.py,sha256=4U9BzeiFD_YF8pXRsTehei0ekP6jikt2bX4MN3GNT9s,431
|
|
||||||
wtforms/ext/sqlalchemy/fields.py,sha256=XwOgJUJCcXvw-QGdF6q2w51m1CI4E_COq8GXb9blgI0,6846
|
|
||||||
wtforms/ext/sqlalchemy/orm.py,sha256=6wJN-Zm4YB3st9xsXU5xJR5jQUsdSRqcbEZ7JvvGD9s,10671
|
|
||||||
wtforms/fields/__init__.py,sha256=M-0pFfY9EEk-GoYzRkg3yvarM_iP_cRhPjpLEl5KgVU,219
|
|
||||||
wtforms/fields/core.py,sha256=KevHc47k4mMJgRGe8Y07UrS_9o_nzXbn3U2HznpdMI0,34307
|
|
||||||
wtforms/fields/html5.py,sha256=bwLHIBrEWICRcS80am_lBp6GitDCVIRvBdIWEPJeSz0,1995
|
|
||||||
wtforms/fields/simple.py,sha256=dY7cYfb6PXMDjUefXcDeTDWpv3UGyr_BMlebJAeoRso,2218
|
|
||||||
wtforms/locale/README.md,sha256=xL3Ain6UPZK3UdL8tMrIKwfodEsPT0IYCVDpI6do524,1062
|
|
||||||
wtforms/locale/wtforms.pot,sha256=Sqe4LRpObVRUc30htYXgZuueKYfW7wt2lNVKtM_Jrr0,4170
|
|
||||||
wtforms/locale/ar/LC_MESSAGES/wtforms.mo,sha256=r1DDYnBCr1hT7KwEG3NpQLR52i4j_-er5ENIVqT9Sbo,4530
|
|
||||||
wtforms/locale/ar/LC_MESSAGES/wtforms.po,sha256=Qkhg_pS-ZEf7jEZz76mDC47UPpqWcU_8t7L88ALAPvk,6262
|
|
||||||
wtforms/locale/bg/LC_MESSAGES/wtforms.mo,sha256=aPnglyINf0hH4FGUM3U5OJpqcJT_8XRx6GiaD4Jif3g,4297
|
|
||||||
wtforms/locale/bg/LC_MESSAGES/wtforms.po,sha256=xflJaMOGUTNN7zbFMWL-FbMVjmj-Svmvkek84mJl5NI,6356
|
|
||||||
wtforms/locale/ca/LC_MESSAGES/wtforms.mo,sha256=zBX48Ru44A2O82FXwC9CwzU3_FiFkUyb4KGNya4toSg,3425
|
|
||||||
wtforms/locale/ca/LC_MESSAGES/wtforms.po,sha256=oT09ydRQNsmf0a1uwskao0wfbwQqAh2tKXjFqI_iscw,5465
|
|
||||||
wtforms/locale/cs_CZ/LC_MESSAGES/wtforms.mo,sha256=MJQPoiMNPfdHYX5eQQ2OW7PmvQ9BFETva2qm3xmPSvo,3618
|
|
||||||
wtforms/locale/cs_CZ/LC_MESSAGES/wtforms.po,sha256=MZ1Iv28-oX4dqzSPgGo65YU3iijeBmYBKZSGsl8YYS0,5596
|
|
||||||
wtforms/locale/cy/LC_MESSAGES/wtforms.mo,sha256=8pJPG9dguZLej33ksWSwWmCOKIJ7VmpNVlaDMb30_lc,3371
|
|
||||||
wtforms/locale/cy/LC_MESSAGES/wtforms.po,sha256=DTGkDUWJ1MsZqFPV8YhwHaBI1uJP6uXwiud7K3LW1yw,5415
|
|
||||||
wtforms/locale/de/LC_MESSAGES/wtforms.mo,sha256=D4BRsJeeT_cKYagO7W1LHQ8YpwC2c7_0hbv3tDgk82E,3412
|
|
||||||
wtforms/locale/de/LC_MESSAGES/wtforms.po,sha256=BF7F3vwQOAL_yaZTHi7x2KZnaCTzz3MNUNCtuc6e47A,5457
|
|
||||||
wtforms/locale/de_CH/LC_MESSAGES/wtforms.mo,sha256=lBUgz2N_AlkXB4W-CxaNGuHdwhgTrYCPtwM9DWL-pP0,3418
|
|
||||||
wtforms/locale/de_CH/LC_MESSAGES/wtforms.po,sha256=LiAqravsNbETdXHJiOi3vJD4o3hWrTRZWSHcLNvHjgc,5477
|
|
||||||
wtforms/locale/el/LC_MESSAGES/wtforms.mo,sha256=r0_oQGB_KYBZdSmFsielQMCF0P7rgsLDCA28u37XAkw,4307
|
|
||||||
wtforms/locale/el/LC_MESSAGES/wtforms.po,sha256=snlBcC-cjlFdpIbSG9pRGYlWFhl1EaQX72Umv2PWfp8,6345
|
|
||||||
wtforms/locale/en/LC_MESSAGES/wtforms.mo,sha256=DCJnvT-_j_oec9za8vxn0FZSog4mm5PnaiWIpesctDE,3285
|
|
||||||
wtforms/locale/en/LC_MESSAGES/wtforms.po,sha256=-GGpFQm9Sdz3Yg0EqltIGTEcOwnYqmepRSREkHV_UVU,5347
|
|
||||||
wtforms/locale/es/LC_MESSAGES/wtforms.mo,sha256=U_oe-S3-i6A2VsBTVKxZ8N5QAEbpqXBlenSIaLnFupE,3394
|
|
||||||
wtforms/locale/es/LC_MESSAGES/wtforms.po,sha256=P36kwWq3LZNjYHXTyoyMl86WziWpZYXxGFsFiqev1oU,5368
|
|
||||||
wtforms/locale/et/LC_MESSAGES/wtforms.mo,sha256=Ugx0IpG1TJtP-DKpNZiVyo-L5F8ESrr_qCpPXR96pww,3456
|
|
||||||
wtforms/locale/et/LC_MESSAGES/wtforms.po,sha256=doeYijsnPkyHy_JK4JRH6AQdHG8uaQTQWYwsCP6_Iuk,5497
|
|
||||||
wtforms/locale/fa/LC_MESSAGES/wtforms.mo,sha256=exJzwjxXvOALqJhsQetN9Kcad4Lx62Exvnx2jtzja8Q,4137
|
|
||||||
wtforms/locale/fa/LC_MESSAGES/wtforms.po,sha256=MHjVwlp-MHMV-TTUUkUYtuBdtbEjfV0jzVSgWHFv80Q,6149
|
|
||||||
wtforms/locale/fi/LC_MESSAGES/wtforms.mo,sha256=NiodjvNOW25UkxEpuCioXdpvjbGwPoYmz0dfiMxE3S8,3416
|
|
||||||
wtforms/locale/fi/LC_MESSAGES/wtforms.po,sha256=4uP6A6sfNoATdRR_8PlecqiiTsVzIp9qpcn9qe0jGMA,5456
|
|
||||||
wtforms/locale/fr/LC_MESSAGES/wtforms.mo,sha256=BoZI4I1MK0-nipyLWOSG-s_55E9x9eG0WqYdz1qZ1KQ,3484
|
|
||||||
wtforms/locale/fr/LC_MESSAGES/wtforms.po,sha256=60tb7Uyco3tdKc1Z4sdvwta46V_RGSmvXM9SdvuBvhg,5529
|
|
||||||
wtforms/locale/he/LC_MESSAGES/wtforms.mo,sha256=UhetGKepgOnGXa5IsjZBdOi5IbPLCufpIugkkDuXkjQ,3649
|
|
||||||
wtforms/locale/he/LC_MESSAGES/wtforms.po,sha256=GJy7zG0ik8U0YnubNlfjjl9iPT62w3XyaAP4kNCntkQ,5657
|
|
||||||
wtforms/locale/hu/LC_MESSAGES/wtforms.mo,sha256=Z-qEeJI422dmm7-2qJIgCuCS1eyS2pJfoavPnGK2334,3544
|
|
||||||
wtforms/locale/hu/LC_MESSAGES/wtforms.po,sha256=eiyNXYa4_XLQWRd-j4KmAXml27cYAPjIBhjjIv9WMbE,5492
|
|
||||||
wtforms/locale/it/LC_MESSAGES/wtforms.mo,sha256=petuqW4x1p1S69sJax15WpLQryWoDRXW0uQjr58E9Jw,3510
|
|
||||||
wtforms/locale/it/LC_MESSAGES/wtforms.po,sha256=EuI0Plf7nLfg5NcRPqQvfg3z7fpfIdRQGBmyq1ivpGE,5556
|
|
||||||
wtforms/locale/ja/LC_MESSAGES/wtforms.mo,sha256=thfPsxKfihz2wNvb9LA7MzYb4PnfyXT81gaE_802AlM,3736
|
|
||||||
wtforms/locale/ja/LC_MESSAGES/wtforms.po,sha256=ydUzTwxnk8sUQcPTeS7AuU7sgArIMWgbDzxFt85mhG8,5753
|
|
||||||
wtforms/locale/ko/LC_MESSAGES/wtforms.mo,sha256=ZRJGcizRhJifuw4rElZ6Bb-hNdH3zqCYzxhwYJisCpU,3851
|
|
||||||
wtforms/locale/ko/LC_MESSAGES/wtforms.po,sha256=9os2sRuqxoX0fTWHr47IvBwlkY_sDoLKdn3byS7MfjQ,5842
|
|
||||||
wtforms/locale/nb/LC_MESSAGES/wtforms.mo,sha256=0YxYTElaTGBpIurcZqZHPU2lXslt3UNF_HOw575OAKM,3337
|
|
||||||
wtforms/locale/nb/LC_MESSAGES/wtforms.po,sha256=NXrr3nrnoOo2x2t0g8UZXT2Jm9KQnkYdnieeoB7U9Yw,5387
|
|
||||||
wtforms/locale/nl/LC_MESSAGES/wtforms.mo,sha256=8wLTkRK82jpG5oDkqM-jLNVLYHte4fRHYF6VAN7lB6U,3350
|
|
||||||
wtforms/locale/nl/LC_MESSAGES/wtforms.po,sha256=9xSoztymVdIgFBA2vnzaHeSK4qEGTGbiPbfwjdcHN0k,5388
|
|
||||||
wtforms/locale/pl/LC_MESSAGES/wtforms.mo,sha256=QUs5iz_IOoo6oCVmcpWWNNkXyqYA0X01wERmQYQiXYo,3610
|
|
||||||
wtforms/locale/pl/LC_MESSAGES/wtforms.po,sha256=XrkwltOhyLHrOOgxYVvcmR2Hcw4LUN3_sZEdJofS5Vk,5652
|
|
||||||
wtforms/locale/pt/LC_MESSAGES/wtforms.mo,sha256=PC5HRiM-QYt4GX3eMPapzG31jLKmo3zt6nKGVb_o174,3438
|
|
||||||
wtforms/locale/pt/LC_MESSAGES/wtforms.po,sha256=cXIZJJZ4UDDR24yrQ-XYck3klonRZd9Ajt8A7dqqJc4,5481
|
|
||||||
wtforms/locale/ru/LC_MESSAGES/wtforms.mo,sha256=ski71qWfnwGL9GtZEQZ1fksHBeZsePxi4ZN16AlLeZE,4406
|
|
||||||
wtforms/locale/ru/LC_MESSAGES/wtforms.po,sha256=3eeI-CxivICl6FzYpKrqfYnz2rB68hMNCicC_9aM90s,6407
|
|
||||||
wtforms/locale/sk/LC_MESSAGES/wtforms.mo,sha256=Lo_5eGNF_LnkJsJLOde_YNWE_F3UZtScFTFlO4v-EyU,3548
|
|
||||||
wtforms/locale/sk/LC_MESSAGES/wtforms.po,sha256=ywPpnxYnHgEkD6Ab7LJgyqgC6dIj8cBmn6hB21aS3NI,5586
|
|
||||||
wtforms/locale/sv/LC_MESSAGES/wtforms.mo,sha256=U7noK9cso_pRgaQcvF4duRQ69joI7SHN0XcHyd0mAVg,3376
|
|
||||||
wtforms/locale/sv/LC_MESSAGES/wtforms.po,sha256=jMtpwUlQPbi4Xiut9KNfLjGhsjqmys1Y_iGZ3lJA4NQ,5416
|
|
||||||
wtforms/locale/tr/LC_MESSAGES/wtforms.mo,sha256=kp3J8k2FVBaXVVJJclGnUmZTEUYHS6Hg1v2baGwtReo,3391
|
|
||||||
wtforms/locale/tr/LC_MESSAGES/wtforms.po,sha256=PFo_e3vKCMgKtkcQSaXqNOlr-YgzxvgUtg8Ju5M-8f8,5431
|
|
||||||
wtforms/locale/uk/LC_MESSAGES/wtforms.mo,sha256=5iZS-8LmCyeteqN3TXQ15byNTGJbjpsDa8AF3zh6L1o,4451
|
|
||||||
wtforms/locale/uk/LC_MESSAGES/wtforms.po,sha256=fIijOGm8gXO-yZkdYoX6kWMPXZE6j9yALhekfQCK5KU,6520
|
|
||||||
wtforms/locale/zh/LC_MESSAGES/wtforms.mo,sha256=yCzjCCwAf5yu80NhllpGqlk7V6PBFyJYfoZ6IF2dQnM,3362
|
|
||||||
wtforms/locale/zh/LC_MESSAGES/wtforms.po,sha256=ZIh59O9rnjZMRpdKFfvrk59wouOAUHyjZS0f-TMsN6U,5378
|
|
||||||
wtforms/locale/zh_TW/LC_MESSAGES/wtforms.mo,sha256=iha5oFUQDVs7wPBpcWLLAP_Jgm42Ea9n9xIlaCsUsNE,3204
|
|
||||||
wtforms/locale/zh_TW/LC_MESSAGES/wtforms.po,sha256=a7q2T9fdwN_xESBCD4umHMfSptN7Qt-abjO9UFRWDBo,5218
|
|
||||||
wtforms/widgets/__init__.py,sha256=nxI0oIsofuJCNgc4Oxwzf3_q3IiCYZTSiCoEuSRZeJM,124
|
|
||||||
wtforms/widgets/core.py,sha256=X3I5PRFbPeX1nU3DrPpsJyglsObujdN1hMxHHFTkKOk,11150
|
|
||||||
wtforms/widgets/html5.py,sha256=LDnNegNTx-LYpw4YkbymvS2TaA2V03p2rRdYN83skYQ,2440
|
|
||||||
WTForms-2.2.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
wtforms/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/utils.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/form.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/i18n.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/meta.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/validators.cpython-36.pyc,,
|
|
||||||
wtforms/__pycache__/compat.cpython-36.pyc,,
|
|
||||||
wtforms/csrf/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/csrf/__pycache__/core.cpython-36.pyc,,
|
|
||||||
wtforms/csrf/__pycache__/session.cpython-36.pyc,,
|
|
||||||
wtforms/widgets/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/widgets/__pycache__/core.cpython-36.pyc,,
|
|
||||||
wtforms/widgets/__pycache__/html5.cpython-36.pyc,,
|
|
||||||
wtforms/fields/__pycache__/simple.cpython-36.pyc,,
|
|
||||||
wtforms/fields/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/fields/__pycache__/core.cpython-36.pyc,,
|
|
||||||
wtforms/fields/__pycache__/html5.cpython-36.pyc,,
|
|
||||||
wtforms/ext/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/templatetags/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/templatetags/__pycache__/wtforms.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/__pycache__/i18n.cpython-36.pyc,,
|
|
||||||
wtforms/ext/django/__pycache__/orm.cpython-36.pyc,,
|
|
||||||
wtforms/ext/csrf/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
wtforms/ext/csrf/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/csrf/__pycache__/form.cpython-36.pyc,,
|
|
||||||
wtforms/ext/csrf/__pycache__/session.cpython-36.pyc,,
|
|
||||||
wtforms/ext/dateutil/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
wtforms/ext/dateutil/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/i18n/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/i18n/__pycache__/utils.cpython-36.pyc,,
|
|
||||||
wtforms/ext/i18n/__pycache__/form.cpython-36.pyc,,
|
|
||||||
wtforms/ext/appengine/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
wtforms/ext/appengine/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/appengine/__pycache__/db.cpython-36.pyc,,
|
|
||||||
wtforms/ext/appengine/__pycache__/ndb.cpython-36.pyc,,
|
|
||||||
wtforms/ext/sqlalchemy/__pycache__/fields.cpython-36.pyc,,
|
|
||||||
wtforms/ext/sqlalchemy/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
wtforms/ext/sqlalchemy/__pycache__/orm.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.31.1)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
wtforms
|
|
@ -1,80 +0,0 @@
|
|||||||
Werkzeug
|
|
||||||
========
|
|
||||||
|
|
||||||
Werkzeug is a comprehensive `WSGI`_ web application library. It began as
|
|
||||||
a simple collection of various utilities for WSGI applications and has
|
|
||||||
become one of the most advanced WSGI utility libraries.
|
|
||||||
|
|
||||||
It includes:
|
|
||||||
|
|
||||||
* An interactive debugger that allows inspecting stack traces and source
|
|
||||||
code in the browser with an interactive interpreter for any frame in
|
|
||||||
the stack.
|
|
||||||
* A full-featured request object with objects to interact with headers,
|
|
||||||
query args, form data, files, and cookies.
|
|
||||||
* A response object that can wrap other WSGI applications and handle
|
|
||||||
streaming data.
|
|
||||||
* A routing system for matching URLs to endpoints and generating URLs
|
|
||||||
for endpoints, with an extensible system for capturing variables from
|
|
||||||
URLs.
|
|
||||||
* HTTP utilities to handle entity tags, cache control, dates, user
|
|
||||||
agents, cookies, files, and more.
|
|
||||||
* A threaded WSGI server for use while developing applications locally.
|
|
||||||
* A test client for simulating HTTP requests during testing without
|
|
||||||
requiring running a server.
|
|
||||||
|
|
||||||
Werkzeug is Unicode aware and doesn't enforce any dependencies. It is up
|
|
||||||
to the developer to choose a template engine, database adapter, and even
|
|
||||||
how to handle requests. It can be used to build all sorts of end user
|
|
||||||
applications such as blogs, wikis, or bulletin boards.
|
|
||||||
|
|
||||||
`Flask`_ wraps Werkzeug, using it to handle the details of WSGI while
|
|
||||||
providing more structure and patterns for defining powerful
|
|
||||||
applications.
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
pip install -U Werkzeug
|
|
||||||
|
|
||||||
|
|
||||||
A Simple Example
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from werkzeug.wrappers import Request, Response
|
|
||||||
|
|
||||||
@Request.application
|
|
||||||
def application(request):
|
|
||||||
return Response('Hello, World!')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from werkzeug.serving import run_simple
|
|
||||||
run_simple('localhost', 4000, application)
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://www.palletsprojects.com/p/werkzeug/
|
|
||||||
* Releases: https://pypi.org/project/Werkzeug/
|
|
||||||
* Code: https://github.com/pallets/werkzeug
|
|
||||||
* Issue tracker: https://github.com/pallets/werkzeug/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/werkzeug
|
|
||||||
* Windows: https://ci.appveyor.com/project/davidism/werkzeug
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/werkzeug
|
|
||||||
|
|
||||||
.. _WSGI: https://wsgi.readthedocs.io/en/latest/
|
|
||||||
.. _Flask: https://www.palletsprojects.com/p/flask/
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,31 +0,0 @@
|
|||||||
Copyright © 2007 by the Pallets team.
|
|
||||||
|
|
||||||
Some rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are
|
|
||||||
met:
|
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
|
||||||
this list of conditions and the following disclaimer.
|
|
||||||
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
* Neither the name of the copyright holder nor the names of its
|
|
||||||
contributors may be used to endorse or promote products derived from
|
|
||||||
this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
||||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
|
||||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
||||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGE.
|
|
@ -1,116 +0,0 @@
|
|||||||
Metadata-Version: 2.0
|
|
||||||
Name: Werkzeug
|
|
||||||
Version: 0.14.1
|
|
||||||
Summary: The comprehensive WSGI web application library.
|
|
||||||
Home-page: https://www.palletsprojects.org/p/werkzeug/
|
|
||||||
Author: Armin Ronacher
|
|
||||||
Author-email: armin.ronacher@active-4.com
|
|
||||||
License: BSD
|
|
||||||
Description-Content-Type: UNKNOWN
|
|
||||||
Platform: any
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Web Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: BSD License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
Provides-Extra: dev
|
|
||||||
Requires-Dist: coverage; extra == 'dev'
|
|
||||||
Requires-Dist: pytest; extra == 'dev'
|
|
||||||
Requires-Dist: sphinx; extra == 'dev'
|
|
||||||
Requires-Dist: tox; extra == 'dev'
|
|
||||||
Provides-Extra: termcolor
|
|
||||||
Requires-Dist: termcolor; extra == 'termcolor'
|
|
||||||
Provides-Extra: watchdog
|
|
||||||
Requires-Dist: watchdog; extra == 'watchdog'
|
|
||||||
|
|
||||||
Werkzeug
|
|
||||||
========
|
|
||||||
|
|
||||||
Werkzeug is a comprehensive `WSGI`_ web application library. It began as
|
|
||||||
a simple collection of various utilities for WSGI applications and has
|
|
||||||
become one of the most advanced WSGI utility libraries.
|
|
||||||
|
|
||||||
It includes:
|
|
||||||
|
|
||||||
* An interactive debugger that allows inspecting stack traces and source
|
|
||||||
code in the browser with an interactive interpreter for any frame in
|
|
||||||
the stack.
|
|
||||||
* A full-featured request object with objects to interact with headers,
|
|
||||||
query args, form data, files, and cookies.
|
|
||||||
* A response object that can wrap other WSGI applications and handle
|
|
||||||
streaming data.
|
|
||||||
* A routing system for matching URLs to endpoints and generating URLs
|
|
||||||
for endpoints, with an extensible system for capturing variables from
|
|
||||||
URLs.
|
|
||||||
* HTTP utilities to handle entity tags, cache control, dates, user
|
|
||||||
agents, cookies, files, and more.
|
|
||||||
* A threaded WSGI server for use while developing applications locally.
|
|
||||||
* A test client for simulating HTTP requests during testing without
|
|
||||||
requiring running a server.
|
|
||||||
|
|
||||||
Werkzeug is Unicode aware and doesn't enforce any dependencies. It is up
|
|
||||||
to the developer to choose a template engine, database adapter, and even
|
|
||||||
how to handle requests. It can be used to build all sorts of end user
|
|
||||||
applications such as blogs, wikis, or bulletin boards.
|
|
||||||
|
|
||||||
`Flask`_ wraps Werkzeug, using it to handle the details of WSGI while
|
|
||||||
providing more structure and patterns for defining powerful
|
|
||||||
applications.
|
|
||||||
|
|
||||||
|
|
||||||
Installing
|
|
||||||
----------
|
|
||||||
|
|
||||||
Install and update using `pip`_:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
pip install -U Werkzeug
|
|
||||||
|
|
||||||
|
|
||||||
A Simple Example
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from werkzeug.wrappers import Request, Response
|
|
||||||
|
|
||||||
@Request.application
|
|
||||||
def application(request):
|
|
||||||
return Response('Hello, World!')
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from werkzeug.serving import run_simple
|
|
||||||
run_simple('localhost', 4000, application)
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
-----
|
|
||||||
|
|
||||||
* Website: https://www.palletsprojects.com/p/werkzeug/
|
|
||||||
* Releases: https://pypi.org/project/Werkzeug/
|
|
||||||
* Code: https://github.com/pallets/werkzeug
|
|
||||||
* Issue tracker: https://github.com/pallets/werkzeug/issues
|
|
||||||
* Test status:
|
|
||||||
|
|
||||||
* Linux, Mac: https://travis-ci.org/pallets/werkzeug
|
|
||||||
* Windows: https://ci.appveyor.com/project/davidism/werkzeug
|
|
||||||
|
|
||||||
* Test coverage: https://codecov.io/gh/pallets/werkzeug
|
|
||||||
|
|
||||||
.. _WSGI: https://wsgi.readthedocs.io/en/latest/
|
|
||||||
.. _Flask: https://www.palletsprojects.com/p/flask/
|
|
||||||
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
||||||
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
|||||||
Werkzeug-0.14.1.dist-info/DESCRIPTION.rst,sha256=rOCN36jwsWtWsTpqPG96z7FMilB5qI1CIARSKRuUmz8,2452
|
|
||||||
Werkzeug-0.14.1.dist-info/LICENSE.txt,sha256=xndz_dD4m269AF9l_Xbl5V3tM1N3C1LoZC2PEPxWO-8,1534
|
|
||||||
Werkzeug-0.14.1.dist-info/METADATA,sha256=FbfadrPdJNUWAxMOKxGUtHe5R3IDSBKYYmAz3FvI3uY,3872
|
|
||||||
Werkzeug-0.14.1.dist-info/RECORD,,
|
|
||||||
Werkzeug-0.14.1.dist-info/WHEEL,sha256=GrqQvamwgBV4nLoJe0vhYRSWzWsx7xjlt74FT0SWYfE,110
|
|
||||||
Werkzeug-0.14.1.dist-info/metadata.json,sha256=4489UTt6HBp2NQil95-pBkjU4Je93SMHvMxZ_rjOpqA,1452
|
|
||||||
Werkzeug-0.14.1.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9
|
|
||||||
werkzeug/__init__.py,sha256=NR0d4n_-U9BLVKlOISean3zUt2vBwhvK-AZE6M0sC0k,6842
|
|
||||||
werkzeug/_compat.py,sha256=8c4U9o6A_TR9nKCcTbpZNxpqCXcXDVIbFawwKM2s92c,6311
|
|
||||||
werkzeug/_internal.py,sha256=GhEyGMlsSz_tYjsDWO9TG35VN7304MM8gjKDrXLEdVc,13873
|
|
||||||
werkzeug/_reloader.py,sha256=AyPphcOHPbu6qzW0UbrVvTDJdre5WgpxbhIJN_TqzUc,9264
|
|
||||||
werkzeug/datastructures.py,sha256=3IgNKNqrz-ZjmAG7y3YgEYK-enDiMT_b652PsypWcYg,90080
|
|
||||||
werkzeug/exceptions.py,sha256=3wp95Hqj9FqV8MdikV99JRcHse_fSMn27V8tgP5Hw2c,20505
|
|
||||||
werkzeug/filesystem.py,sha256=hHWeWo_gqLMzTRfYt8-7n2wWcWUNTnDyudQDLOBEICE,2175
|
|
||||||
werkzeug/formparser.py,sha256=mUuCwjzjb8_E4RzrAT2AioLuZSYpqR1KXTK6LScRYzA,21722
|
|
||||||
werkzeug/http.py,sha256=RQg4MJuhRv2isNRiEh__Phh09ebpfT3Kuu_GfrZ54_c,40079
|
|
||||||
werkzeug/local.py,sha256=QdQhWV5L8p1Y1CJ1CDStwxaUs24SuN5aebHwjVD08C8,14553
|
|
||||||
werkzeug/posixemulation.py,sha256=xEF2Bxc-vUCPkiu4IbfWVd3LW7DROYAT-ExW6THqyzw,3519
|
|
||||||
werkzeug/routing.py,sha256=2JVtdSgxKGeANy4Z_FP-dKESvKtkYGCZ1J2fARCLGCY,67214
|
|
||||||
werkzeug/script.py,sha256=DwaVDcXdaOTffdNvlBdLitxWXjKaRVT32VbhDtljFPY,11365
|
|
||||||
werkzeug/security.py,sha256=0m107exslz4QJLWQCpfQJ04z3re4eGHVggRvrQVAdWc,9193
|
|
||||||
werkzeug/serving.py,sha256=A0flnIJHufdn2QJ9oeuHfrXwP3LzP8fn3rNW6hbxKUg,31926
|
|
||||||
werkzeug/test.py,sha256=XmECSmnpASiYQTct4oMiWr0LT5jHWCtKqnpYKZd2ui8,36100
|
|
||||||
werkzeug/testapp.py,sha256=3HQRW1sHZKXuAjCvFMet4KXtQG3loYTFnvn6LWt-4zI,9396
|
|
||||||
werkzeug/urls.py,sha256=dUeLg2IeTm0WLmSvFeD4hBZWGdOs-uHudR5-t8n9zPo,36771
|
|
||||||
werkzeug/useragents.py,sha256=BhYMf4cBTHyN4U0WsQedePIocmNlH_34C-UwqSThGCc,5865
|
|
||||||
werkzeug/utils.py,sha256=BrY1j0DHQ8RTb0K1StIobKuMJhN9SQQkWEARbrh2qpk,22972
|
|
||||||
werkzeug/websocket.py,sha256=PpSeDxXD_0UsPAa5hQhQNM6mxibeUgn8lA8eRqiS0vM,11344
|
|
||||||
werkzeug/wrappers.py,sha256=kbyL_aFjxELwPgMwfNCYjKu-CR6kNkh-oO8wv3GXbk8,84511
|
|
||||||
werkzeug/wsgi.py,sha256=1Nob-aeChWQf7MsiicO8RZt6J90iRzEcik44ev9Qu8s,49347
|
|
||||||
werkzeug/contrib/__init__.py,sha256=f7PfttZhbrImqpr5Ezre8CXgwvcGUJK7zWNpO34WWrw,623
|
|
||||||
werkzeug/contrib/atom.py,sha256=qqfJcfIn2RYY-3hO3Oz0aLq9YuNubcPQ_KZcNsDwVJo,15575
|
|
||||||
werkzeug/contrib/cache.py,sha256=xBImHNj09BmX_7kC5NUCx8f_l4L8_O7zi0jCL21UZKE,32163
|
|
||||||
werkzeug/contrib/fixers.py,sha256=gR06T-w71ur-tHQ_31kP_4jpOncPJ4Wc1dOqTvYusr8,10179
|
|
||||||
werkzeug/contrib/iterio.py,sha256=RlqDvGhz0RneTpzE8dVc-yWCUv4nkPl1jEc_EDp2fH0,10814
|
|
||||||
werkzeug/contrib/jsrouting.py,sha256=QTmgeDoKXvNK02KzXgx9lr3cAH6fAzpwF5bBdPNvJPs,8564
|
|
||||||
werkzeug/contrib/limiter.py,sha256=iS8-ahPZ-JLRnmfIBzxpm7O_s3lPsiDMVWv7llAIDCI,1334
|
|
||||||
werkzeug/contrib/lint.py,sha256=Mj9NeUN7s4zIUWeQOAVjrmtZIcl3Mm2yDe9BSIr9YGE,12558
|
|
||||||
werkzeug/contrib/profiler.py,sha256=ISwCWvwVyGpDLRBRpLjo_qUWma6GXYBrTAco4PEQSHY,5151
|
|
||||||
werkzeug/contrib/securecookie.py,sha256=uWMyHDHY3lkeBRiCSayGqWkAIy4a7xAbSE_Hln9ecqc,12196
|
|
||||||
werkzeug/contrib/sessions.py,sha256=39LVNvLbm5JWpbxM79WC2l87MJFbqeISARjwYbkJatw,12577
|
|
||||||
werkzeug/contrib/testtools.py,sha256=G9xN-qeihJlhExrIZMCahvQOIDxdL9NiX874jiiHFMs,2453
|
|
||||||
werkzeug/contrib/wrappers.py,sha256=v7OYlz7wQtDlS9fey75UiRZ1IkUWqCpzbhsLy4k14Hw,10398
|
|
||||||
werkzeug/debug/__init__.py,sha256=uSn9BqCZ5E3ySgpoZtundpROGsn-uYvZtSFiTfAX24M,17452
|
|
||||||
werkzeug/debug/console.py,sha256=n3-dsKk1TsjnN-u4ZgmuWCU_HO0qw5IA7ttjhyyMM6I,5607
|
|
||||||
werkzeug/debug/repr.py,sha256=bKqstDYGfECpeLerd48s_hxuqK4b6UWnjMu3d_DHO8I,9340
|
|
||||||
werkzeug/debug/tbtools.py,sha256=rBudXCmkVdAKIcdhxANxgf09g6kQjJWW9_5bjSpr4OY,18451
|
|
||||||
werkzeug/debug/shared/FONT_LICENSE,sha256=LwAVEI1oYnvXiNMT9SnCH_TaLCxCpeHziDrMg0gPkAI,4673
|
|
||||||
werkzeug/debug/shared/console.png,sha256=bxax6RXXlvOij_KeqvSNX0ojJf83YbnZ7my-3Gx9w2A,507
|
|
||||||
werkzeug/debug/shared/debugger.js,sha256=PKPVYuyO4SX1hkqLOwCLvmIEO5154WatFYaXE-zIfKI,6264
|
|
||||||
werkzeug/debug/shared/jquery.js,sha256=7LkWEzqTdpEfELxcZZlS6wAx5Ff13zZ83lYO2_ujj7g,95957
|
|
||||||
werkzeug/debug/shared/less.png,sha256=-4-kNRaXJSONVLahrQKUxMwXGm9R4OnZ9SxDGpHlIR4,191
|
|
||||||
werkzeug/debug/shared/more.png,sha256=GngN7CioHQoV58rH6ojnkYi8c_qED2Aka5FO5UXrReY,200
|
|
||||||
werkzeug/debug/shared/source.png,sha256=RoGcBTE4CyCB85GBuDGTFlAnUqxwTBiIfDqW15EpnUQ,818
|
|
||||||
werkzeug/debug/shared/style.css,sha256=IEO0PC2pWmh2aEyGCaN--txuWsRCliuhlbEhPDFwh0A,6270
|
|
||||||
werkzeug/debug/shared/ubuntu.ttf,sha256=1eaHFyepmy4FyDvjLVzpITrGEBu_CZYY94jE0nED1c0,70220
|
|
||||||
Werkzeug-0.14.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
werkzeug/debug/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
werkzeug/debug/__pycache__/console.cpython-36.pyc,,
|
|
||||||
werkzeug/debug/__pycache__/repr.cpython-36.pyc,,
|
|
||||||
werkzeug/debug/__pycache__/tbtools.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/routing.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/websocket.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/test.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/datastructures.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/formparser.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/_compat.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/exceptions.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/wrappers.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/http.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/filesystem.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/utils.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/serving.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/posixemulation.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/_internal.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/wsgi.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/testapp.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/script.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/security.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/useragents.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/local.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/urls.cpython-36.pyc,,
|
|
||||||
werkzeug/__pycache__/_reloader.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/lint.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/limiter.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/fixers.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/cache.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/testtools.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/iterio.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/wrappers.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/atom.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/jsrouting.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/sessions.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/profiler.cpython-36.pyc,,
|
|
||||||
werkzeug/contrib/__pycache__/securecookie.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.26.0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
{"generator": "bdist_wheel (0.26.0)", "summary": "The comprehensive WSGI web application library.", "classifiers": ["Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules"], "description_content_type": "UNKNOWN", "extensions": {"python.details": {"project_urls": {"Home": "https://www.palletsprojects.org/p/werkzeug/"}, "contacts": [{"email": "armin.ronacher@active-4.com", "name": "Armin Ronacher", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst", "license": "LICENSE.txt"}}}, "license": "BSD", "metadata_version": "2.0", "name": "Werkzeug", "platform": "any", "extras": ["dev", "termcolor", "watchdog"], "run_requires": [{"requires": ["coverage", "pytest", "sphinx", "tox"], "extra": "dev"}, {"requires": ["termcolor"], "extra": "termcolor"}, {"requires": ["watchdog"], "extra": "watchdog"}], "version": "0.14.1"}
|
|
@ -1 +0,0 @@
|
|||||||
werkzeug
|
|
Binary file not shown.
Binary file not shown.
@ -1,97 +0,0 @@
|
|||||||
cachetools
|
|
||||||
========================================================================
|
|
||||||
|
|
||||||
This module provides various memoizing collections and decorators,
|
|
||||||
including variants of the Python 3 Standard Library `@lru_cache`_
|
|
||||||
function decorator.
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from cachetools import cached, LRUCache, TTLCache
|
|
||||||
|
|
||||||
# speed up calculating Fibonacci numbers with dynamic programming
|
|
||||||
@cached(cache={})
|
|
||||||
def fib(n):
|
|
||||||
return n if n < 2 else fib(n - 1) + fib(n - 2)
|
|
||||||
|
|
||||||
# cache least recently used Python Enhancement Proposals
|
|
||||||
@cached(cache=LRUCache(maxsize=32))
|
|
||||||
def get_pep(num):
|
|
||||||
url = 'http://www.python.org/dev/peps/pep-%04d/' % num
|
|
||||||
with urllib.request.urlopen(url) as s:
|
|
||||||
return s.read()
|
|
||||||
|
|
||||||
# cache weather data for no longer than ten minutes
|
|
||||||
@cached(cache=TTLCache(maxsize=1024, ttl=600))
|
|
||||||
def get_weather(place):
|
|
||||||
return owm.weather_at_place(place).get_weather()
|
|
||||||
|
|
||||||
For the purpose of this module, a *cache* is a mutable_ mapping_ of a
|
|
||||||
fixed maximum size. When the cache is full, i.e. by adding another
|
|
||||||
item the cache would exceed its maximum size, the cache must choose
|
|
||||||
which item(s) to discard based on a suitable `cache algorithm`_. In
|
|
||||||
general, a cache's size is the total size of its items, and an item's
|
|
||||||
size is a property or function of its value, e.g. the result of
|
|
||||||
``sys.getsizeof(value)``. For the trivial but common case that each
|
|
||||||
item counts as ``1``, a cache's size is equal to the number of its
|
|
||||||
items, or ``len(cache)``.
|
|
||||||
|
|
||||||
Multiple cache classes based on different caching algorithms are
|
|
||||||
implemented, and decorators for easily memoizing function and method
|
|
||||||
calls are provided, too.
|
|
||||||
|
|
||||||
For more information, please refer to the online documentation_.
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Install cachetools using pip::
|
|
||||||
|
|
||||||
pip install cachetools
|
|
||||||
|
|
||||||
|
|
||||||
Project Resources
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/pypi/v/cachetools.svg?style=flat
|
|
||||||
:target: https://pypi.python.org/pypi/cachetools/
|
|
||||||
:alt: Latest PyPI version
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/travis/tkem/cachetools/master.svg?style=flat
|
|
||||||
:target: https://travis-ci.org/tkem/cachetools/
|
|
||||||
:alt: Travis CI build status
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/coveralls/tkem/cachetools/master.svg?style=flat
|
|
||||||
:target: https://coveralls.io/r/tkem/cachetools
|
|
||||||
:alt: Test coverage
|
|
||||||
|
|
||||||
.. image:: https://readthedocs.org/projects/cachetools/badge/?version=latest&style=flat
|
|
||||||
:target: http://cachetools.readthedocs.io/en/latest/
|
|
||||||
:alt: Documentation Status
|
|
||||||
|
|
||||||
- `Issue Tracker`_
|
|
||||||
- `Source Code`_
|
|
||||||
- `Change Log`_
|
|
||||||
|
|
||||||
|
|
||||||
License
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 2014-2018 Thomas Kemmer.
|
|
||||||
|
|
||||||
Licensed under the `MIT License`_.
|
|
||||||
|
|
||||||
|
|
||||||
.. _@lru_cache: http://docs.python.org/3/library/functools.html#functools.lru_cache
|
|
||||||
.. _mutable: http://docs.python.org/dev/glossary.html#term-mutable
|
|
||||||
.. _mapping: http://docs.python.org/dev/glossary.html#term-mapping
|
|
||||||
.. _cache algorithm: http://en.wikipedia.org/wiki/Cache_algorithms
|
|
||||||
|
|
||||||
.. _Documentation: http://cachetools.readthedocs.io/en/latest/
|
|
||||||
.. _Issue Tracker: https://github.com/tkem/cachetools/issues/
|
|
||||||
.. _Source Code: https://github.com/tkem/cachetools/
|
|
||||||
.. _Change Log: https://github.com/tkem/cachetools/blob/master/CHANGES.rst
|
|
||||||
.. _MIT License: http://raw.github.com/tkem/cachetools/master/LICENSE
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,124 +0,0 @@
|
|||||||
Metadata-Version: 2.0
|
|
||||||
Name: cachetools
|
|
||||||
Version: 3.0.0
|
|
||||||
Summary: Extensible memoizing collections and decorators
|
|
||||||
Home-page: https://github.com/tkem/cachetools
|
|
||||||
Author: Thomas Kemmer
|
|
||||||
Author-email: tkemmer@computer.org
|
|
||||||
License: MIT
|
|
||||||
Keywords: cache caching memoize memoizing memoization LRU LFU TTL
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Environment :: Other Environment
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: MIT License
|
|
||||||
Classifier: Operating System :: OS Independent
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
||||||
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
||||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
||||||
|
|
||||||
cachetools
|
|
||||||
========================================================================
|
|
||||||
|
|
||||||
This module provides various memoizing collections and decorators,
|
|
||||||
including variants of the Python 3 Standard Library `@lru_cache`_
|
|
||||||
function decorator.
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
from cachetools import cached, LRUCache, TTLCache
|
|
||||||
|
|
||||||
# speed up calculating Fibonacci numbers with dynamic programming
|
|
||||||
@cached(cache={})
|
|
||||||
def fib(n):
|
|
||||||
return n if n < 2 else fib(n - 1) + fib(n - 2)
|
|
||||||
|
|
||||||
# cache least recently used Python Enhancement Proposals
|
|
||||||
@cached(cache=LRUCache(maxsize=32))
|
|
||||||
def get_pep(num):
|
|
||||||
url = 'http://www.python.org/dev/peps/pep-%04d/' % num
|
|
||||||
with urllib.request.urlopen(url) as s:
|
|
||||||
return s.read()
|
|
||||||
|
|
||||||
# cache weather data for no longer than ten minutes
|
|
||||||
@cached(cache=TTLCache(maxsize=1024, ttl=600))
|
|
||||||
def get_weather(place):
|
|
||||||
return owm.weather_at_place(place).get_weather()
|
|
||||||
|
|
||||||
For the purpose of this module, a *cache* is a mutable_ mapping_ of a
|
|
||||||
fixed maximum size. When the cache is full, i.e. by adding another
|
|
||||||
item the cache would exceed its maximum size, the cache must choose
|
|
||||||
which item(s) to discard based on a suitable `cache algorithm`_. In
|
|
||||||
general, a cache's size is the total size of its items, and an item's
|
|
||||||
size is a property or function of its value, e.g. the result of
|
|
||||||
``sys.getsizeof(value)``. For the trivial but common case that each
|
|
||||||
item counts as ``1``, a cache's size is equal to the number of its
|
|
||||||
items, or ``len(cache)``.
|
|
||||||
|
|
||||||
Multiple cache classes based on different caching algorithms are
|
|
||||||
implemented, and decorators for easily memoizing function and method
|
|
||||||
calls are provided, too.
|
|
||||||
|
|
||||||
For more information, please refer to the online documentation_.
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Install cachetools using pip::
|
|
||||||
|
|
||||||
pip install cachetools
|
|
||||||
|
|
||||||
|
|
||||||
Project Resources
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/pypi/v/cachetools.svg?style=flat
|
|
||||||
:target: https://pypi.python.org/pypi/cachetools/
|
|
||||||
:alt: Latest PyPI version
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/travis/tkem/cachetools/master.svg?style=flat
|
|
||||||
:target: https://travis-ci.org/tkem/cachetools/
|
|
||||||
:alt: Travis CI build status
|
|
||||||
|
|
||||||
.. image:: http://img.shields.io/coveralls/tkem/cachetools/master.svg?style=flat
|
|
||||||
:target: https://coveralls.io/r/tkem/cachetools
|
|
||||||
:alt: Test coverage
|
|
||||||
|
|
||||||
.. image:: https://readthedocs.org/projects/cachetools/badge/?version=latest&style=flat
|
|
||||||
:target: http://cachetools.readthedocs.io/en/latest/
|
|
||||||
:alt: Documentation Status
|
|
||||||
|
|
||||||
- `Issue Tracker`_
|
|
||||||
- `Source Code`_
|
|
||||||
- `Change Log`_
|
|
||||||
|
|
||||||
|
|
||||||
License
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Copyright (c) 2014-2018 Thomas Kemmer.
|
|
||||||
|
|
||||||
Licensed under the `MIT License`_.
|
|
||||||
|
|
||||||
|
|
||||||
.. _@lru_cache: http://docs.python.org/3/library/functools.html#functools.lru_cache
|
|
||||||
.. _mutable: http://docs.python.org/dev/glossary.html#term-mutable
|
|
||||||
.. _mapping: http://docs.python.org/dev/glossary.html#term-mapping
|
|
||||||
.. _cache algorithm: http://en.wikipedia.org/wiki/Cache_algorithms
|
|
||||||
|
|
||||||
.. _Documentation: http://cachetools.readthedocs.io/en/latest/
|
|
||||||
.. _Issue Tracker: https://github.com/tkem/cachetools/issues/
|
|
||||||
.. _Source Code: https://github.com/tkem/cachetools/
|
|
||||||
.. _Change Log: https://github.com/tkem/cachetools/blob/master/CHANGES.rst
|
|
||||||
.. _MIT License: http://raw.github.com/tkem/cachetools/master/LICENSE
|
|
||||||
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
cachetools/__init__.py,sha256=EERQ_1aYW58bGxbfbu41RQlLZcuarUYp_nVtuGrQn54,3453
|
|
||||||
cachetools/abc.py,sha256=D8L3E9v3H5NLeJKZNicpXcIQW_9lWjel16e-V5E6Cjs,1104
|
|
||||||
cachetools/cache.py,sha256=8_E_WOll4FszonLSKZc8JI8aDA_Nm2r3szEiv669uoQ,2312
|
|
||||||
cachetools/func.py,sha256=MGgePdjszsqFEgSLhb1h4bBb0UuTlxCKXENfsh9MZO0,3652
|
|
||||||
cachetools/keys.py,sha256=f459jDZ5NP3lex4s9T7WKfBNnlfmQ9dr8c4VYoJ7hZk,1073
|
|
||||||
cachetools/lfu.py,sha256=Jyfap_yoNxrTbTetestcdfPXcrDn8xB8-MVXIJg3CoI,1073
|
|
||||||
cachetools/lru.py,sha256=whvmU7CLpJtrWu1l2queu1uxpzlW51gMYflSUuotm-c,1460
|
|
||||||
cachetools/rr.py,sha256=MW2Xy0T8EVj2TYdvuejrVnWvbQeiiPKverU6pD2-Tys,982
|
|
||||||
cachetools/ttl.py,sha256=qc0vDlZJORJ9yu_wJO3S8U9cJJPrdAGIbcB9bnhXCEQ,6050
|
|
||||||
cachetools-3.0.0.dist-info/DESCRIPTION.rst,sha256=-5D9_M6bQv1NBf3F0FKGAfpck0UT4i4iM5oDWDq7yh8,3427
|
|
||||||
cachetools-3.0.0.dist-info/METADATA,sha256=ZsYry8h7qmKMq9zkuDVeVzFXtbedus1firAn7VL6tnA,4585
|
|
||||||
cachetools-3.0.0.dist-info/RECORD,,
|
|
||||||
cachetools-3.0.0.dist-info/WHEEL,sha256=kdsN-5OJAZIiHN-iO4Rhl82KyS0bDWf4uBwMbkNafr8,110
|
|
||||||
cachetools-3.0.0.dist-info/metadata.json,sha256=HqHj7Lz3bjQVLNDWVgjsK37RD71p-CIUCya4S0xQ090,1245
|
|
||||||
cachetools-3.0.0.dist-info/top_level.txt,sha256=ai2FH78TGwoBcCgVfoqbzk5IQCtnDukdSs4zKuVPvDs,11
|
|
||||||
cachetools-3.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
cachetools/__pycache__/cache.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/lru.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/__init__.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/ttl.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/abc.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/func.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/lfu.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/keys.cpython-36.pyc,,
|
|
||||||
cachetools/__pycache__/rr.cpython-36.pyc,,
|
|
@ -1,6 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: bdist_wheel (0.30.0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py2-none-any
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
{"classifiers": ["Development Status :: 5 - Production/Stable", "Environment :: Other Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules"], "extensions": {"python.details": {"contacts": [{"email": "tkemmer@computer.org", "name": "Thomas Kemmer", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/tkem/cachetools"}}}, "generator": "bdist_wheel (0.30.0)", "keywords": ["cache", "caching", "memoize", "memoizing", "memoization", "LRU", "LFU", "TTL"], "license": "MIT", "metadata_version": "2.0", "name": "cachetools", "summary": "Extensible memoizing collections and decorators", "version": "3.0.0"}
|
|
@ -1 +0,0 @@
|
|||||||
cachetools
|
|
@ -1,112 +0,0 @@
|
|||||||
"""Extensible memoizing collections and decorators."""
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import functools
|
|
||||||
|
|
||||||
from . import keys
|
|
||||||
from .cache import Cache
|
|
||||||
from .lfu import LFUCache
|
|
||||||
from .lru import LRUCache
|
|
||||||
from .rr import RRCache
|
|
||||||
from .ttl import TTLCache
|
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
'Cache', 'LFUCache', 'LRUCache', 'RRCache', 'TTLCache',
|
|
||||||
'cached', 'cachedmethod'
|
|
||||||
)
|
|
||||||
|
|
||||||
__version__ = '3.0.0'
|
|
||||||
|
|
||||||
if hasattr(functools.update_wrapper(lambda f: f(), lambda: 42), '__wrapped__'):
|
|
||||||
_update_wrapper = functools.update_wrapper
|
|
||||||
else:
|
|
||||||
def _update_wrapper(wrapper, wrapped):
|
|
||||||
functools.update_wrapper(wrapper, wrapped)
|
|
||||||
wrapper.__wrapped__ = wrapped
|
|
||||||
return wrapper
|
|
||||||
|
|
||||||
|
|
||||||
def cached(cache, key=keys.hashkey, lock=None):
|
|
||||||
"""Decorator to wrap a function with a memoizing callable that saves
|
|
||||||
results in a cache.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def decorator(func):
|
|
||||||
if cache is None:
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
return func(*args, **kwargs)
|
|
||||||
elif lock is None:
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
k = key(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
return cache[k]
|
|
||||||
except KeyError:
|
|
||||||
pass # key not found
|
|
||||||
v = func(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
cache[k] = v
|
|
||||||
except ValueError:
|
|
||||||
pass # value too large
|
|
||||||
return v
|
|
||||||
else:
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
k = key(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
with lock:
|
|
||||||
return cache[k]
|
|
||||||
except KeyError:
|
|
||||||
pass # key not found
|
|
||||||
v = func(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
with lock:
|
|
||||||
cache[k] = v
|
|
||||||
except ValueError:
|
|
||||||
pass # value too large
|
|
||||||
return v
|
|
||||||
return _update_wrapper(wrapper, func)
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
|
|
||||||
def cachedmethod(cache, key=keys.hashkey, lock=None):
|
|
||||||
"""Decorator to wrap a class or instance method with a memoizing
|
|
||||||
callable that saves results in a cache.
|
|
||||||
|
|
||||||
"""
|
|
||||||
def decorator(method):
|
|
||||||
if lock is None:
|
|
||||||
def wrapper(self, *args, **kwargs):
|
|
||||||
c = cache(self)
|
|
||||||
if c is None:
|
|
||||||
return method(self, *args, **kwargs)
|
|
||||||
k = key(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
return c[k]
|
|
||||||
except KeyError:
|
|
||||||
pass # key not found
|
|
||||||
v = method(self, *args, **kwargs)
|
|
||||||
try:
|
|
||||||
c[k] = v
|
|
||||||
except ValueError:
|
|
||||||
pass # value too large
|
|
||||||
return v
|
|
||||||
else:
|
|
||||||
def wrapper(self, *args, **kwargs):
|
|
||||||
c = cache(self)
|
|
||||||
if c is None:
|
|
||||||
return method(self, *args, **kwargs)
|
|
||||||
k = key(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
with lock(self):
|
|
||||||
return c[k]
|
|
||||||
except KeyError:
|
|
||||||
pass # key not found
|
|
||||||
v = method(self, *args, **kwargs)
|
|
||||||
try:
|
|
||||||
with lock(self):
|
|
||||||
c[k] = v
|
|
||||||
except ValueError:
|
|
||||||
pass # value too large
|
|
||||||
return v
|
|
||||||
return _update_wrapper(wrapper, method)
|
|
||||||
return decorator
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,48 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import collections
|
|
||||||
from abc import abstractmethod
|
|
||||||
|
|
||||||
|
|
||||||
class DefaultMapping(collections.MutableMapping):
|
|
||||||
|
|
||||||
__slots__ = ()
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def __contains__(self, key): # pragma: nocover
|
|
||||||
return False
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def __getitem__(self, key): # pragma: nocover
|
|
||||||
if hasattr(self.__class__, '__missing__'):
|
|
||||||
return self.__class__.__missing__(self, key)
|
|
||||||
else:
|
|
||||||
raise KeyError(key)
|
|
||||||
|
|
||||||
def get(self, key, default=None):
|
|
||||||
if key in self:
|
|
||||||
return self[key]
|
|
||||||
else:
|
|
||||||
return default
|
|
||||||
|
|
||||||
__marker = object()
|
|
||||||
|
|
||||||
def pop(self, key, default=__marker):
|
|
||||||
if key in self:
|
|
||||||
value = self[key]
|
|
||||||
del self[key]
|
|
||||||
elif default is self.__marker:
|
|
||||||
raise KeyError(key)
|
|
||||||
else:
|
|
||||||
value = default
|
|
||||||
return value
|
|
||||||
|
|
||||||
def setdefault(self, key, default=None):
|
|
||||||
if key in self:
|
|
||||||
value = self[key]
|
|
||||||
else:
|
|
||||||
self[key] = value = default
|
|
||||||
return value
|
|
||||||
|
|
||||||
|
|
||||||
DefaultMapping.register(dict)
|
|
@ -1,91 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
from .abc import DefaultMapping
|
|
||||||
|
|
||||||
|
|
||||||
class _DefaultSize(object):
|
|
||||||
def __getitem__(self, _):
|
|
||||||
return 1
|
|
||||||
|
|
||||||
def __setitem__(self, _, value):
|
|
||||||
assert value == 1
|
|
||||||
|
|
||||||
def pop(self, _):
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
class Cache(DefaultMapping):
|
|
||||||
"""Mutable mapping to serve as a simple cache or cache base class."""
|
|
||||||
|
|
||||||
__size = _DefaultSize()
|
|
||||||
|
|
||||||
def __init__(self, maxsize, getsizeof=None):
|
|
||||||
if getsizeof:
|
|
||||||
self.getsizeof = getsizeof
|
|
||||||
if self.getsizeof is not Cache.getsizeof:
|
|
||||||
self.__size = dict()
|
|
||||||
self.__data = dict()
|
|
||||||
self.__currsize = 0
|
|
||||||
self.__maxsize = maxsize
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
return '%s(%r, maxsize=%r, currsize=%r)' % (
|
|
||||||
self.__class__.__name__,
|
|
||||||
list(self.__data.items()),
|
|
||||||
self.__maxsize,
|
|
||||||
self.__currsize,
|
|
||||||
)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
try:
|
|
||||||
return self.__data[key]
|
|
||||||
except KeyError:
|
|
||||||
return self.__missing__(key)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
maxsize = self.__maxsize
|
|
||||||
size = self.getsizeof(value)
|
|
||||||
if size > maxsize:
|
|
||||||
raise ValueError('value too large')
|
|
||||||
if key not in self.__data or self.__size[key] < size:
|
|
||||||
while self.__currsize + size > maxsize:
|
|
||||||
self.popitem()
|
|
||||||
if key in self.__data:
|
|
||||||
diffsize = size - self.__size[key]
|
|
||||||
else:
|
|
||||||
diffsize = size
|
|
||||||
self.__data[key] = value
|
|
||||||
self.__size[key] = size
|
|
||||||
self.__currsize += diffsize
|
|
||||||
|
|
||||||
def __delitem__(self, key):
|
|
||||||
size = self.__size.pop(key)
|
|
||||||
del self.__data[key]
|
|
||||||
self.__currsize -= size
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
return key in self.__data
|
|
||||||
|
|
||||||
def __missing__(self, key):
|
|
||||||
raise KeyError(key)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
return iter(self.__data)
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
return len(self.__data)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def maxsize(self):
|
|
||||||
"""The maximum size of the cache."""
|
|
||||||
return self.__maxsize
|
|
||||||
|
|
||||||
@property
|
|
||||||
def currsize(self):
|
|
||||||
"""The current size of the cache."""
|
|
||||||
return self.__currsize
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def getsizeof(value):
|
|
||||||
"""Return the size of a cache element's value."""
|
|
||||||
return 1
|
|
@ -1,136 +0,0 @@
|
|||||||
"""`functools.lru_cache` compatible memoizing function decorators."""
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import collections
|
|
||||||
import functools
|
|
||||||
import random
|
|
||||||
import time
|
|
||||||
|
|
||||||
try:
|
|
||||||
from threading import RLock
|
|
||||||
except ImportError: # pragma: no cover
|
|
||||||
from dummy_threading import RLock
|
|
||||||
|
|
||||||
from . import keys
|
|
||||||
from .lfu import LFUCache
|
|
||||||
from .lru import LRUCache
|
|
||||||
from .rr import RRCache
|
|
||||||
from .ttl import TTLCache
|
|
||||||
|
|
||||||
__all__ = ('lfu_cache', 'lru_cache', 'rr_cache', 'ttl_cache')
|
|
||||||
|
|
||||||
|
|
||||||
_CacheInfo = collections.namedtuple('CacheInfo', [
|
|
||||||
'hits', 'misses', 'maxsize', 'currsize'
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
class _UnboundCache(dict):
|
|
||||||
|
|
||||||
maxsize = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def currsize(self):
|
|
||||||
return len(self)
|
|
||||||
|
|
||||||
|
|
||||||
class _UnboundTTLCache(TTLCache):
|
|
||||||
def __init__(self, ttl, timer):
|
|
||||||
TTLCache.__init__(self, float('inf'), ttl, timer)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def maxsize(self):
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def _cache(cache, typed=False):
|
|
||||||
def decorator(func):
|
|
||||||
key = keys.typedkey if typed else keys.hashkey
|
|
||||||
lock = RLock()
|
|
||||||
stats = [0, 0]
|
|
||||||
|
|
||||||
def cache_info():
|
|
||||||
with lock:
|
|
||||||
hits, misses = stats
|
|
||||||
maxsize = cache.maxsize
|
|
||||||
currsize = cache.currsize
|
|
||||||
return _CacheInfo(hits, misses, maxsize, currsize)
|
|
||||||
|
|
||||||
def cache_clear():
|
|
||||||
with lock:
|
|
||||||
try:
|
|
||||||
cache.clear()
|
|
||||||
finally:
|
|
||||||
stats[:] = [0, 0]
|
|
||||||
|
|
||||||
def wrapper(*args, **kwargs):
|
|
||||||
k = key(*args, **kwargs)
|
|
||||||
with lock:
|
|
||||||
try:
|
|
||||||
v = cache[k]
|
|
||||||
stats[0] += 1
|
|
||||||
return v
|
|
||||||
except KeyError:
|
|
||||||
stats[1] += 1
|
|
||||||
v = func(*args, **kwargs)
|
|
||||||
try:
|
|
||||||
with lock:
|
|
||||||
cache[k] = v
|
|
||||||
except ValueError:
|
|
||||||
pass # value too large
|
|
||||||
return v
|
|
||||||
functools.update_wrapper(wrapper, func)
|
|
||||||
if not hasattr(wrapper, '__wrapped__'):
|
|
||||||
wrapper.__wrapped__ = func # Python 2.7
|
|
||||||
wrapper.cache_info = cache_info
|
|
||||||
wrapper.cache_clear = cache_clear
|
|
||||||
return wrapper
|
|
||||||
return decorator
|
|
||||||
|
|
||||||
|
|
||||||
def lfu_cache(maxsize=128, typed=False):
|
|
||||||
"""Decorator to wrap a function with a memoizing callable that saves
|
|
||||||
up to `maxsize` results based on a Least Frequently Used (LFU)
|
|
||||||
algorithm.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if maxsize is None:
|
|
||||||
return _cache(_UnboundCache(), typed)
|
|
||||||
else:
|
|
||||||
return _cache(LFUCache(maxsize), typed)
|
|
||||||
|
|
||||||
|
|
||||||
def lru_cache(maxsize=128, typed=False):
|
|
||||||
"""Decorator to wrap a function with a memoizing callable that saves
|
|
||||||
up to `maxsize` results based on a Least Recently Used (LRU)
|
|
||||||
algorithm.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if maxsize is None:
|
|
||||||
return _cache(_UnboundCache(), typed)
|
|
||||||
else:
|
|
||||||
return _cache(LRUCache(maxsize), typed)
|
|
||||||
|
|
||||||
|
|
||||||
def rr_cache(maxsize=128, choice=random.choice, typed=False):
|
|
||||||
"""Decorator to wrap a function with a memoizing callable that saves
|
|
||||||
up to `maxsize` results based on a Random Replacement (RR)
|
|
||||||
algorithm.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if maxsize is None:
|
|
||||||
return _cache(_UnboundCache(), typed)
|
|
||||||
else:
|
|
||||||
return _cache(RRCache(maxsize, choice), typed)
|
|
||||||
|
|
||||||
|
|
||||||
def ttl_cache(maxsize=128, ttl=600, timer=time.time, typed=False):
|
|
||||||
"""Decorator to wrap a function with a memoizing callable that saves
|
|
||||||
up to `maxsize` results based on a Least Recently Used (LRU)
|
|
||||||
algorithm with a per-item time-to-live (TTL) value.
|
|
||||||
"""
|
|
||||||
if maxsize is None:
|
|
||||||
return _cache(_UnboundTTLCache(ttl, timer), typed)
|
|
||||||
else:
|
|
||||||
return _cache(TTLCache(maxsize, ttl, timer), typed)
|
|
@ -1,43 +0,0 @@
|
|||||||
"""Key functions for memoizing decorators."""
|
|
||||||
|
|
||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
__all__ = ('hashkey', 'typedkey')
|
|
||||||
|
|
||||||
|
|
||||||
class _HashedTuple(tuple):
|
|
||||||
|
|
||||||
__hashvalue = None
|
|
||||||
|
|
||||||
def __hash__(self, hash=tuple.__hash__):
|
|
||||||
hashvalue = self.__hashvalue
|
|
||||||
if hashvalue is None:
|
|
||||||
self.__hashvalue = hashvalue = hash(self)
|
|
||||||
return hashvalue
|
|
||||||
|
|
||||||
def __add__(self, other, add=tuple.__add__):
|
|
||||||
return _HashedTuple(add(self, other))
|
|
||||||
|
|
||||||
def __radd__(self, other, add=tuple.__add__):
|
|
||||||
return _HashedTuple(add(other, self))
|
|
||||||
|
|
||||||
|
|
||||||
_kwmark = (object(),)
|
|
||||||
|
|
||||||
|
|
||||||
def hashkey(*args, **kwargs):
|
|
||||||
"""Return a cache key for the specified hashable arguments."""
|
|
||||||
|
|
||||||
if kwargs:
|
|
||||||
return _HashedTuple(args + sum(sorted(kwargs.items()), _kwmark))
|
|
||||||
else:
|
|
||||||
return _HashedTuple(args)
|
|
||||||
|
|
||||||
|
|
||||||
def typedkey(*args, **kwargs):
|
|
||||||
"""Return a typed cache key for the specified hashable arguments."""
|
|
||||||
|
|
||||||
key = hashkey(*args, **kwargs)
|
|
||||||
key += tuple(type(v) for v in args)
|
|
||||||
key += tuple(type(v) for _, v in sorted(kwargs.items()))
|
|
||||||
return key
|
|
@ -1,35 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import collections
|
|
||||||
|
|
||||||
from .cache import Cache
|
|
||||||
|
|
||||||
|
|
||||||
class LFUCache(Cache):
|
|
||||||
"""Least Frequently Used (LFU) cache implementation."""
|
|
||||||
|
|
||||||
def __init__(self, maxsize, getsizeof=None):
|
|
||||||
Cache.__init__(self, maxsize, getsizeof)
|
|
||||||
self.__counter = collections.Counter()
|
|
||||||
|
|
||||||
def __getitem__(self, key, cache_getitem=Cache.__getitem__):
|
|
||||||
value = cache_getitem(self, key)
|
|
||||||
self.__counter[key] -= 1
|
|
||||||
return value
|
|
||||||
|
|
||||||
def __setitem__(self, key, value, cache_setitem=Cache.__setitem__):
|
|
||||||
cache_setitem(self, key, value)
|
|
||||||
self.__counter[key] -= 1
|
|
||||||
|
|
||||||
def __delitem__(self, key, cache_delitem=Cache.__delitem__):
|
|
||||||
cache_delitem(self, key)
|
|
||||||
del self.__counter[key]
|
|
||||||
|
|
||||||
def popitem(self):
|
|
||||||
"""Remove and return the `(key, value)` pair least frequently used."""
|
|
||||||
try:
|
|
||||||
(key, _), = self.__counter.most_common(1)
|
|
||||||
except ValueError:
|
|
||||||
raise KeyError('%s is empty' % self.__class__.__name__)
|
|
||||||
else:
|
|
||||||
return (key, self.pop(key))
|
|
@ -1,48 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import collections
|
|
||||||
|
|
||||||
from .cache import Cache
|
|
||||||
|
|
||||||
|
|
||||||
class LRUCache(Cache):
|
|
||||||
"""Least Recently Used (LRU) cache implementation."""
|
|
||||||
|
|
||||||
def __init__(self, maxsize, getsizeof=None):
|
|
||||||
Cache.__init__(self, maxsize, getsizeof)
|
|
||||||
self.__order = collections.OrderedDict()
|
|
||||||
|
|
||||||
def __getitem__(self, key, cache_getitem=Cache.__getitem__):
|
|
||||||
value = cache_getitem(self, key)
|
|
||||||
self.__update(key)
|
|
||||||
return value
|
|
||||||
|
|
||||||
def __setitem__(self, key, value, cache_setitem=Cache.__setitem__):
|
|
||||||
cache_setitem(self, key, value)
|
|
||||||
self.__update(key)
|
|
||||||
|
|
||||||
def __delitem__(self, key, cache_delitem=Cache.__delitem__):
|
|
||||||
cache_delitem(self, key)
|
|
||||||
del self.__order[key]
|
|
||||||
|
|
||||||
def popitem(self):
|
|
||||||
"""Remove and return the `(key, value)` pair least recently used."""
|
|
||||||
try:
|
|
||||||
key = next(iter(self.__order))
|
|
||||||
except StopIteration:
|
|
||||||
raise KeyError('%s is empty' % self.__class__.__name__)
|
|
||||||
else:
|
|
||||||
return (key, self.pop(key))
|
|
||||||
|
|
||||||
if hasattr(collections.OrderedDict, 'move_to_end'):
|
|
||||||
def __update(self, key):
|
|
||||||
try:
|
|
||||||
self.__order.move_to_end(key)
|
|
||||||
except KeyError:
|
|
||||||
self.__order[key] = None
|
|
||||||
else:
|
|
||||||
def __update(self, key):
|
|
||||||
try:
|
|
||||||
self.__order[key] = self.__order.pop(key)
|
|
||||||
except KeyError:
|
|
||||||
self.__order[key] = None
|
|
@ -1,36 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import random
|
|
||||||
|
|
||||||
from .cache import Cache
|
|
||||||
|
|
||||||
|
|
||||||
# random.choice cannot be pickled in Python 2.7
|
|
||||||
def _choice(seq):
|
|
||||||
return random.choice(seq)
|
|
||||||
|
|
||||||
|
|
||||||
class RRCache(Cache):
|
|
||||||
"""Random Replacement (RR) cache implementation."""
|
|
||||||
|
|
||||||
def __init__(self, maxsize, choice=random.choice, getsizeof=None):
|
|
||||||
Cache.__init__(self, maxsize, getsizeof)
|
|
||||||
# TODO: use None as default, assing to self.choice directly?
|
|
||||||
if choice is random.choice:
|
|
||||||
self.__choice = _choice
|
|
||||||
else:
|
|
||||||
self.__choice = choice
|
|
||||||
|
|
||||||
@property
|
|
||||||
def choice(self):
|
|
||||||
"""The `choice` function used by the cache."""
|
|
||||||
return self.__choice
|
|
||||||
|
|
||||||
def popitem(self):
|
|
||||||
"""Remove and return a random `(key, value)` pair."""
|
|
||||||
try:
|
|
||||||
key = self.__choice(list(self))
|
|
||||||
except IndexError:
|
|
||||||
raise KeyError('%s is empty' % self.__class__.__name__)
|
|
||||||
else:
|
|
||||||
return (key, self.pop(key))
|
|
@ -1,216 +0,0 @@
|
|||||||
from __future__ import absolute_import
|
|
||||||
|
|
||||||
import collections
|
|
||||||
import time
|
|
||||||
|
|
||||||
from .cache import Cache
|
|
||||||
|
|
||||||
|
|
||||||
class _Link(object):
|
|
||||||
|
|
||||||
__slots__ = ('key', 'expire', 'next', 'prev')
|
|
||||||
|
|
||||||
def __init__(self, key=None, expire=None):
|
|
||||||
self.key = key
|
|
||||||
self.expire = expire
|
|
||||||
|
|
||||||
def __reduce__(self):
|
|
||||||
return _Link, (self.key, self.expire)
|
|
||||||
|
|
||||||
def unlink(self):
|
|
||||||
next = self.next
|
|
||||||
prev = self.prev
|
|
||||||
prev.next = next
|
|
||||||
next.prev = prev
|
|
||||||
|
|
||||||
|
|
||||||
class _Timer(object):
|
|
||||||
|
|
||||||
def __init__(self, timer):
|
|
||||||
self.__timer = timer
|
|
||||||
self.__nesting = 0
|
|
||||||
|
|
||||||
def __call__(self):
|
|
||||||
if self.__nesting == 0:
|
|
||||||
return self.__timer()
|
|
||||||
else:
|
|
||||||
return self.__time
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
if self.__nesting == 0:
|
|
||||||
self.__time = time = self.__timer()
|
|
||||||
else:
|
|
||||||
time = self.__time
|
|
||||||
self.__nesting += 1
|
|
||||||
return time
|
|
||||||
|
|
||||||
def __exit__(self, *exc):
|
|
||||||
self.__nesting -= 1
|
|
||||||
|
|
||||||
def __reduce__(self):
|
|
||||||
return _Timer, (self.__timer,)
|
|
||||||
|
|
||||||
def __getattr__(self, name):
|
|
||||||
return getattr(self.__timer, name)
|
|
||||||
|
|
||||||
|
|
||||||
class TTLCache(Cache):
|
|
||||||
"""LRU Cache implementation with per-item time-to-live (TTL) value."""
|
|
||||||
|
|
||||||
def __init__(self, maxsize, ttl, timer=time.time, getsizeof=None):
|
|
||||||
Cache.__init__(self, maxsize, getsizeof)
|
|
||||||
self.__root = root = _Link()
|
|
||||||
root.prev = root.next = root
|
|
||||||
self.__links = collections.OrderedDict()
|
|
||||||
self.__timer = _Timer(timer)
|
|
||||||
self.__ttl = ttl
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
try:
|
|
||||||
link = self.__links[key] # no reordering
|
|
||||||
except KeyError:
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return not (link.expire < self.__timer())
|
|
||||||
|
|
||||||
def __getitem__(self, key, cache_getitem=Cache.__getitem__):
|
|
||||||
try:
|
|
||||||
link = self.__getlink(key)
|
|
||||||
except KeyError:
|
|
||||||
expired = False
|
|
||||||
else:
|
|
||||||
expired = link.expire < self.__timer()
|
|
||||||
if expired:
|
|
||||||
return self.__missing__(key)
|
|
||||||
else:
|
|
||||||
return cache_getitem(self, key)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value, cache_setitem=Cache.__setitem__):
|
|
||||||
with self.__timer as time:
|
|
||||||
self.expire(time)
|
|
||||||
cache_setitem(self, key, value)
|
|
||||||
try:
|
|
||||||
link = self.__getlink(key)
|
|
||||||
except KeyError:
|
|
||||||
self.__links[key] = link = _Link(key)
|
|
||||||
else:
|
|
||||||
link.unlink()
|
|
||||||
link.expire = time + self.__ttl
|
|
||||||
link.next = root = self.__root
|
|
||||||
link.prev = prev = root.prev
|
|
||||||
prev.next = root.prev = link
|
|
||||||
|
|
||||||
def __delitem__(self, key, cache_delitem=Cache.__delitem__):
|
|
||||||
cache_delitem(self, key)
|
|
||||||
link = self.__links.pop(key)
|
|
||||||
link.unlink()
|
|
||||||
if link.expire < self.__timer():
|
|
||||||
raise KeyError(key)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
root = self.__root
|
|
||||||
curr = root.next
|
|
||||||
while curr is not root:
|
|
||||||
# "freeze" time for iterator access
|
|
||||||
with self.__timer as time:
|
|
||||||
if not (curr.expire < time):
|
|
||||||
yield curr.key
|
|
||||||
curr = curr.next
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
root = self.__root
|
|
||||||
curr = root.next
|
|
||||||
time = self.__timer()
|
|
||||||
count = len(self.__links)
|
|
||||||
while curr is not root and curr.expire < time:
|
|
||||||
count -= 1
|
|
||||||
curr = curr.next
|
|
||||||
return count
|
|
||||||
|
|
||||||
def __setstate__(self, state):
|
|
||||||
self.__dict__.update(state)
|
|
||||||
root = self.__root
|
|
||||||
root.prev = root.next = root
|
|
||||||
for link in sorted(self.__links.values(), key=lambda obj: obj.expire):
|
|
||||||
link.next = root
|
|
||||||
link.prev = prev = root.prev
|
|
||||||
prev.next = root.prev = link
|
|
||||||
self.expire(self.__timer())
|
|
||||||
|
|
||||||
def __repr__(self, cache_repr=Cache.__repr__):
|
|
||||||
with self.__timer as time:
|
|
||||||
self.expire(time)
|
|
||||||
return cache_repr(self)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def currsize(self):
|
|
||||||
with self.__timer as time:
|
|
||||||
self.expire(time)
|
|
||||||
return super(TTLCache, self).currsize
|
|
||||||
|
|
||||||
@property
|
|
||||||
def timer(self):
|
|
||||||
"""The timer function used by the cache."""
|
|
||||||
return self.__timer
|
|
||||||
|
|
||||||
@property
|
|
||||||
def ttl(self):
|
|
||||||
"""The time-to-live value of the cache's items."""
|
|
||||||
return self.__ttl
|
|
||||||
|
|
||||||
def expire(self, time=None):
|
|
||||||
"""Remove expired items from the cache."""
|
|
||||||
if time is None:
|
|
||||||
time = self.__timer()
|
|
||||||
root = self.__root
|
|
||||||
curr = root.next
|
|
||||||
links = self.__links
|
|
||||||
cache_delitem = Cache.__delitem__
|
|
||||||
while curr is not root and curr.expire < time:
|
|
||||||
cache_delitem(self, curr.key)
|
|
||||||
del links[curr.key]
|
|
||||||
next = curr.next
|
|
||||||
curr.unlink()
|
|
||||||
curr = next
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
with self.__timer as time:
|
|
||||||
self.expire(time)
|
|
||||||
Cache.clear(self)
|
|
||||||
|
|
||||||
def get(self, *args, **kwargs):
|
|
||||||
with self.__timer:
|
|
||||||
return Cache.get(self, *args, **kwargs)
|
|
||||||
|
|
||||||
def pop(self, *args, **kwargs):
|
|
||||||
with self.__timer:
|
|
||||||
return Cache.pop(self, *args, **kwargs)
|
|
||||||
|
|
||||||
def setdefault(self, *args, **kwargs):
|
|
||||||
with self.__timer:
|
|
||||||
return Cache.setdefault(self, *args, **kwargs)
|
|
||||||
|
|
||||||
def popitem(self):
|
|
||||||
"""Remove and return the `(key, value)` pair least recently used that
|
|
||||||
has not already expired.
|
|
||||||
|
|
||||||
"""
|
|
||||||
with self.__timer as time:
|
|
||||||
self.expire(time)
|
|
||||||
try:
|
|
||||||
key = next(iter(self.__links))
|
|
||||||
except StopIteration:
|
|
||||||
raise KeyError('%s is empty' % self.__class__.__name__)
|
|
||||||
else:
|
|
||||||
return (key, self.pop(key))
|
|
||||||
|
|
||||||
if hasattr(collections.OrderedDict, 'move_to_end'):
|
|
||||||
def __getlink(self, key):
|
|
||||||
value = self.__links[key]
|
|
||||||
self.__links.move_to_end(key)
|
|
||||||
return value
|
|
||||||
else:
|
|
||||||
def __getlink(self, key):
|
|
||||||
value = self.__links.pop(key)
|
|
||||||
self.__links[key] = value
|
|
||||||
return value
|
|
@ -1,45 +0,0 @@
|
|||||||
Certifi: Python SSL Certificates
|
|
||||||
================================
|
|
||||||
|
|
||||||
`Certifi`_ is a carefully curated collection of Root Certificates for
|
|
||||||
validating the trustworthiness of SSL certificates while verifying the identity
|
|
||||||
of TLS hosts. It has been extracted from the `Requests`_ project.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
``certifi`` is available on PyPI. Simply install it with ``pip``::
|
|
||||||
|
|
||||||
$ pip install certifi
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
To reference the installed certificate authority (CA) bundle, you can use the
|
|
||||||
built-in function::
|
|
||||||
|
|
||||||
>>> import certifi
|
|
||||||
|
|
||||||
>>> certifi.where()
|
|
||||||
'/usr/local/lib/python2.7/site-packages/certifi/cacert.pem'
|
|
||||||
|
|
||||||
Enjoy!
|
|
||||||
|
|
||||||
1024-bit Root Certificates
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Browsers and certificate authorities have concluded that 1024-bit keys are
|
|
||||||
unacceptably weak for certificates, particularly root certificates. For this
|
|
||||||
reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its
|
|
||||||
bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key)
|
|
||||||
certificate from the same CA. Because Mozilla removed these certificates from
|
|
||||||
its bundle, ``certifi`` removed them as well.
|
|
||||||
|
|
||||||
In previous versions, ``certifi`` provided the ``certifi.old_where()`` function
|
|
||||||
to intentionally re-add the 1024-bit roots back into your bundle. This was not
|
|
||||||
recommended in production and therefore was removed at the end of 2018.
|
|
||||||
|
|
||||||
.. _`Certifi`: https://certifi.io/en/latest/
|
|
||||||
.. _`Requests`: http://docs.python-requests.org/en/latest/
|
|
||||||
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
pip
|
|
@ -1,21 +0,0 @@
|
|||||||
This packge contains a modified version of ca-bundle.crt:
|
|
||||||
|
|
||||||
ca-bundle.crt -- Bundle of CA Root Certificates
|
|
||||||
|
|
||||||
Certificate data from Mozilla as of: Thu Nov 3 19:04:19 2011#
|
|
||||||
This is a bundle of X.509 certificates of public Certificate Authorities
|
|
||||||
(CA). These were automatically extracted from Mozilla's root certificates
|
|
||||||
file (certdata.txt). This file can be found in the mozilla source tree:
|
|
||||||
http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1#
|
|
||||||
It contains the certificates in PEM format and therefore
|
|
||||||
can be directly used with curl / libcurl / php_curl, or with
|
|
||||||
an Apache+mod_ssl webserver for SSL client authentication.
|
|
||||||
Just configure this file as the SSLCACertificateFile.#
|
|
||||||
|
|
||||||
***** BEGIN LICENSE BLOCK *****
|
|
||||||
This Source Code Form is subject to the terms of the Mozilla Public License,
|
|
||||||
v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain
|
|
||||||
one at http://mozilla.org/MPL/2.0/.
|
|
||||||
|
|
||||||
***** END LICENSE BLOCK *****
|
|
||||||
@(#) $RCSfile: certdata.txt,v $ $Revision: 1.80 $ $Date: 2011/11/03 15:11:58 $
|
|
@ -1,69 +0,0 @@
|
|||||||
Metadata-Version: 2.0
|
|
||||||
Name: certifi
|
|
||||||
Version: 2018.11.29
|
|
||||||
Summary: Python package for providing Mozilla's CA Bundle.
|
|
||||||
Home-page: https://certifi.io/
|
|
||||||
Author: Kenneth Reitz
|
|
||||||
Author-email: me@kennethreitz.com
|
|
||||||
License: MPL-2.0
|
|
||||||
Platform: UNKNOWN
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
||||||
Classifier: Natural Language :: English
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 2
|
|
||||||
Classifier: Programming Language :: Python :: 2.6
|
|
||||||
Classifier: Programming Language :: Python :: 2.7
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.3
|
|
||||||
Classifier: Programming Language :: Python :: 3.4
|
|
||||||
Classifier: Programming Language :: Python :: 3.5
|
|
||||||
Classifier: Programming Language :: Python :: 3.6
|
|
||||||
Classifier: Programming Language :: Python :: 3.7
|
|
||||||
|
|
||||||
Certifi: Python SSL Certificates
|
|
||||||
================================
|
|
||||||
|
|
||||||
`Certifi`_ is a carefully curated collection of Root Certificates for
|
|
||||||
validating the trustworthiness of SSL certificates while verifying the identity
|
|
||||||
of TLS hosts. It has been extracted from the `Requests`_ project.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
|
|
||||||
``certifi`` is available on PyPI. Simply install it with ``pip``::
|
|
||||||
|
|
||||||
$ pip install certifi
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
To reference the installed certificate authority (CA) bundle, you can use the
|
|
||||||
built-in function::
|
|
||||||
|
|
||||||
>>> import certifi
|
|
||||||
|
|
||||||
>>> certifi.where()
|
|
||||||
'/usr/local/lib/python2.7/site-packages/certifi/cacert.pem'
|
|
||||||
|
|
||||||
Enjoy!
|
|
||||||
|
|
||||||
1024-bit Root Certificates
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Browsers and certificate authorities have concluded that 1024-bit keys are
|
|
||||||
unacceptably weak for certificates, particularly root certificates. For this
|
|
||||||
reason, Mozilla has removed any weak (i.e. 1024-bit key) certificate from its
|
|
||||||
bundle, replacing it with an equivalent strong (i.e. 2048-bit or greater key)
|
|
||||||
certificate from the same CA. Because Mozilla removed these certificates from
|
|
||||||
its bundle, ``certifi`` removed them as well.
|
|
||||||
|
|
||||||
In previous versions, ``certifi`` provided the ``certifi.old_where()`` function
|
|
||||||
to intentionally re-add the 1024-bit roots back into your bundle. This was not
|
|
||||||
recommended in production and therefore was removed at the end of 2018.
|
|
||||||
|
|
||||||
.. _`Certifi`: https://certifi.io/en/latest/
|
|
||||||
.. _`Requests`: http://docs.python-requests.org/en/latest/
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user