added latest requirements file
This commit is contained in:
parent
a12c14833d
commit
eb15f68857
84
.tox/pep8/bin/activate
Normal file
84
.tox/pep8/bin/activate
Normal file
@ -0,0 +1,84 @@
|
||||
# This file must be used with "source bin/activate" *from bash*
|
||||
# you cannot run it directly
|
||||
|
||||
|
||||
if [ "${BASH_SOURCE-}" = "$0" ]; then
|
||||
echo "You must source this script: \$ source $0" >&2
|
||||
exit 33
|
||||
fi
|
||||
|
||||
deactivate () {
|
||||
unset -f pydoc >/dev/null 2>&1
|
||||
|
||||
# reset old environment variables
|
||||
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
|
||||
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
|
||||
PATH="$_OLD_VIRTUAL_PATH"
|
||||
export PATH
|
||||
unset _OLD_VIRTUAL_PATH
|
||||
fi
|
||||
if ! [ -z "${_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-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
||||
hash -r 2>/dev/null
|
||||
fi
|
||||
|
||||
if ! [ -z "${_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/narinder/develop/charm/charm-cinder-netapp/.tox/pep8'
|
||||
export VIRTUAL_ENV
|
||||
|
||||
_OLD_VIRTUAL_PATH="$PATH"
|
||||
PATH="$VIRTUAL_ENV/bin:$PATH"
|
||||
export PATH
|
||||
|
||||
# unset PYTHONHOME if set
|
||||
if ! [ -z "${PYTHONHOME+_}" ] ; then
|
||||
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
|
||||
unset PYTHONHOME
|
||||
fi
|
||||
|
||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
|
||||
_OLD_VIRTUAL_PS1="${PS1-}"
|
||||
if [ "x" != x ] ; then
|
||||
PS1="${PS1-}"
|
||||
else
|
||||
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
|
||||
fi
|
||||
export PS1
|
||||
fi
|
||||
|
||||
# Make sure to unalias pydoc if it's already there
|
||||
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
|
||||
|
||||
pydoc () {
|
||||
python -m pydoc "$@"
|
||||
}
|
||||
|
||||
# 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-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
|
||||
hash -r 2>/dev/null
|
||||
fi
|
55
.tox/pep8/bin/activate.csh
Normal file
55
.tox/pep8/bin/activate.csh
Normal file
@ -0,0 +1,55 @@
|
||||
# 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>.
|
||||
|
||||
set newline='\
|
||||
'
|
||||
|
||||
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
|
||||
|
||||
# Unset irrelevant variables.
|
||||
deactivate nondestructive
|
||||
|
||||
setenv VIRTUAL_ENV '/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8'
|
||||
|
||||
set _OLD_VIRTUAL_PATH="$PATH:q"
|
||||
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
|
||||
|
||||
|
||||
|
||||
if ('' != "") then
|
||||
set env_name = ''
|
||||
else
|
||||
set env_name = '('"$VIRTUAL_ENV:t:q"') '
|
||||
endif
|
||||
|
||||
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
|
||||
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
|
||||
set do_prompt = "1"
|
||||
else
|
||||
set do_prompt = "0"
|
||||
endif
|
||||
else
|
||||
set do_prompt = "1"
|
||||
endif
|
||||
|
||||
if ( $do_prompt == "1" ) then
|
||||
# Could be in a non-interactive environment,
|
||||
# in which case, $prompt is undefined and we wouldn't
|
||||
# care about the prompt anyway.
|
||||
if ( $?prompt ) then
|
||||
set _OLD_VIRTUAL_PROMPT="$prompt:q"
|
||||
if ( "$prompt:q" =~ *"$newline:q"* ) then
|
||||
:
|
||||
else
|
||||
set prompt = "$env_name:q$prompt:q"
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
unset env_name
|
||||
unset do_prompt
|
||||
|
||||
alias pydoc python -m pydoc
|
||||
|
||||
rehash
|
100
.tox/pep8/bin/activate.fish
Normal file
100
.tox/pep8/bin/activate.fish
Normal file
@ -0,0 +1,100 @@
|
||||
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
|
||||
# Do not run it directly.
|
||||
|
||||
function _bashify_path -d "Converts a fish path to something bash can recognize"
|
||||
set fishy_path $argv
|
||||
set bashy_path $fishy_path[1]
|
||||
for path_part in $fishy_path[2..-1]
|
||||
set bashy_path "$bashy_path:$path_part"
|
||||
end
|
||||
echo $bashy_path
|
||||
end
|
||||
|
||||
function _fishify_path -d "Converts a bash path to something fish can recognize"
|
||||
echo $argv | tr ':' '\n'
|
||||
end
|
||||
|
||||
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
|
||||
# reset old environment variables
|
||||
if test -n "$_OLD_VIRTUAL_PATH"
|
||||
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
||||
if test (echo $FISH_VERSION | head -c 1) -lt 3
|
||||
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
|
||||
else
|
||||
set -gx PATH "$_OLD_VIRTUAL_PATH"
|
||||
end
|
||||
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"
|
||||
and functions -q _old_fish_prompt
|
||||
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
|
||||
set -l fish_function_path
|
||||
|
||||
# Erase virtualenv's `fish_prompt` and restore the original.
|
||||
functions -e fish_prompt
|
||||
functions -c _old_fish_prompt fish_prompt
|
||||
functions -e _old_fish_prompt
|
||||
set -e _OLD_FISH_PROMPT_OVERRIDE
|
||||
end
|
||||
|
||||
set -e VIRTUAL_ENV
|
||||
|
||||
if test "$argv[1]" != 'nondestructive'
|
||||
# Self-destruct!
|
||||
functions -e pydoc
|
||||
functions -e deactivate
|
||||
functions -e _bashify_path
|
||||
functions -e _fishify_path
|
||||
end
|
||||
end
|
||||
|
||||
# Unset irrelevant variables.
|
||||
deactivate nondestructive
|
||||
|
||||
set -gx VIRTUAL_ENV '/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8'
|
||||
|
||||
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
|
||||
if test (echo $FISH_VERSION | head -c 1) -lt 3
|
||||
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
|
||||
else
|
||||
set -gx _OLD_VIRTUAL_PATH "$PATH"
|
||||
end
|
||||
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
|
||||
|
||||
function pydoc
|
||||
python -m pydoc $argv
|
||||
end
|
||||
|
||||
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
||||
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
|
||||
functions -c fish_prompt _old_fish_prompt
|
||||
|
||||
function fish_prompt
|
||||
# Run the user's prompt first; it might depend on (pipe)status.
|
||||
set -l prompt (_old_fish_prompt)
|
||||
|
||||
# Prompt override provided?
|
||||
# If not, just prepend the environment name.
|
||||
if test -n ''
|
||||
printf '%s%s' '' (set_color normal)
|
||||
else
|
||||
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
|
||||
end
|
||||
|
||||
string join -- \n $prompt # handle multi-line prompts
|
||||
end
|
||||
|
||||
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
||||
end
|
60
.tox/pep8/bin/activate.ps1
Normal file
60
.tox/pep8/bin/activate.ps1
Normal file
@ -0,0 +1,60 @@
|
||||
$script:THIS_PATH = $myinvocation.mycommand.path
|
||||
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
|
||||
|
||||
function global:deactivate([switch] $NonDestructive) {
|
||||
if (Test-Path variable:_OLD_VIRTUAL_PATH) {
|
||||
$env:PATH = $variable:_OLD_VIRTUAL_PATH
|
||||
Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
|
||||
}
|
||||
|
||||
if (Test-Path function:_old_virtual_prompt) {
|
||||
$function:prompt = $function:_old_virtual_prompt
|
||||
Remove-Item function:\_old_virtual_prompt
|
||||
}
|
||||
|
||||
if ($env:VIRTUAL_ENV) {
|
||||
Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
if (!$NonDestructive) {
|
||||
# Self destruct!
|
||||
Remove-Item function:deactivate
|
||||
Remove-Item function:pydoc
|
||||
}
|
||||
}
|
||||
|
||||
function global:pydoc {
|
||||
python -m pydoc $args
|
||||
}
|
||||
|
||||
# unset irrelevant variables
|
||||
deactivate -nondestructive
|
||||
|
||||
$VIRTUAL_ENV = $BASE_DIR
|
||||
$env:VIRTUAL_ENV = $VIRTUAL_ENV
|
||||
|
||||
New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
|
||||
|
||||
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
|
||||
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
||||
function global:_old_virtual_prompt {
|
||||
""
|
||||
}
|
||||
$function:_old_virtual_prompt = $function:prompt
|
||||
|
||||
if ("" -ne "") {
|
||||
function global:prompt {
|
||||
# Add the custom prefix to the existing prompt
|
||||
$previous_prompt_value = & $function:_old_virtual_prompt
|
||||
("" + $previous_prompt_value)
|
||||
}
|
||||
}
|
||||
else {
|
||||
function global:prompt {
|
||||
# Add a prefix to the current prompt, but don't discard it.
|
||||
$previous_prompt_value = & $function:_old_virtual_prompt
|
||||
$new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
|
||||
($new_prompt_value + $previous_prompt_value)
|
||||
}
|
||||
}
|
||||
}
|
46
.tox/pep8/bin/activate.xsh
Normal file
46
.tox/pep8/bin/activate.xsh
Normal file
@ -0,0 +1,46 @@
|
||||
"""Xonsh activate script for virtualenv"""
|
||||
from xonsh.tools import get_sep as _get_sep
|
||||
|
||||
def _deactivate(args):
|
||||
if "pydoc" in aliases:
|
||||
del aliases["pydoc"]
|
||||
|
||||
if ${...}.get("_OLD_VIRTUAL_PATH", ""):
|
||||
$PATH = $_OLD_VIRTUAL_PATH
|
||||
del $_OLD_VIRTUAL_PATH
|
||||
|
||||
if ${...}.get("_OLD_VIRTUAL_PYTHONHOME", ""):
|
||||
$PYTHONHOME = $_OLD_VIRTUAL_PYTHONHOME
|
||||
del $_OLD_VIRTUAL_PYTHONHOME
|
||||
|
||||
if "VIRTUAL_ENV" in ${...}:
|
||||
del $VIRTUAL_ENV
|
||||
|
||||
if "VIRTUAL_ENV_PROMPT" in ${...}:
|
||||
del $VIRTUAL_ENV_PROMPT
|
||||
|
||||
if "nondestructive" not in args:
|
||||
# Self destruct!
|
||||
del aliases["deactivate"]
|
||||
|
||||
|
||||
# unset irrelevant variables
|
||||
_deactivate(["nondestructive"])
|
||||
aliases["deactivate"] = _deactivate
|
||||
|
||||
$VIRTUAL_ENV = r"/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8"
|
||||
|
||||
$_OLD_VIRTUAL_PATH = $PATH
|
||||
$PATH = $PATH[:]
|
||||
$PATH.add($VIRTUAL_ENV + _get_sep() + "bin", front=True, replace=True)
|
||||
|
||||
if ${...}.get("PYTHONHOME", ""):
|
||||
# unset PYTHONHOME if set
|
||||
$_OLD_VIRTUAL_PYTHONHOME = $PYTHONHOME
|
||||
del $PYTHONHOME
|
||||
|
||||
$VIRTUAL_ENV_PROMPT = ""
|
||||
if not $VIRTUAL_ENV_PROMPT:
|
||||
del $VIRTUAL_ENV_PROMPT
|
||||
|
||||
aliases["pydoc"] = ["python", "-m", "pydoc"]
|
32
.tox/pep8/bin/activate_this.py
Normal file
32
.tox/pep8/bin/activate_this.py
Normal file
@ -0,0 +1,32 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Activate virtualenv for current interpreter:
|
||||
|
||||
Use exec(open(this_file).read(), {'__file__': this_file}).
|
||||
|
||||
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
|
||||
"""
|
||||
import os
|
||||
import site
|
||||
import sys
|
||||
|
||||
try:
|
||||
abs_file = os.path.abspath(__file__)
|
||||
except NameError:
|
||||
raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
|
||||
|
||||
bin_dir = os.path.dirname(abs_file)
|
||||
base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
|
||||
|
||||
# prepend bin to PATH (this file is inside the bin directory)
|
||||
os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
|
||||
os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
|
||||
|
||||
# add the virtual environments libraries to the host python import mechanism
|
||||
prev_length = len(sys.path)
|
||||
for lib in "../lib/python3.8/site-packages".split(os.pathsep):
|
||||
path = os.path.realpath(os.path.join(bin_dir, lib))
|
||||
site.addsitedir(path.decode("utf-8") if "" else path)
|
||||
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
|
||||
|
||||
sys.real_prefix = sys.prefix
|
||||
sys.prefix = base
|
8
.tox/pep8/bin/chardetect
Executable file
8
.tox/pep8/bin/chardetect
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/chardetect-3.8
Executable file
8
.tox/pep8/bin/chardetect-3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/chardetect3
Executable file
8
.tox/pep8/bin/chardetect3
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/distro
Executable file
8
.tox/pep8/bin/distro
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from distro import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/distro-3.8
Executable file
8
.tox/pep8/bin/distro-3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from distro import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/distro3
Executable file
8
.tox/pep8/bin/distro3
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from distro import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/easy_install
Executable file
8
.tox/pep8/bin/easy_install
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/easy_install-3.8
Executable file
8
.tox/pep8/bin/easy_install-3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/easy_install3
Executable file
8
.tox/pep8/bin/easy_install3
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- 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())
|
8
.tox/pep8/bin/pbr
Executable file
8
.tox/pep8/bin/pbr
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pbr.cmd.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/pip
Executable file
8
.tox/pep8/bin/pip
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/pip-3.8
Executable file
8
.tox/pep8/bin/pip-3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/pip3
Executable file
8
.tox/pep8/bin/pip3
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/pip3.8
Executable file
8
.tox/pep8/bin/pip3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from pip._internal.cli.main import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
1
.tox/pep8/bin/python
Symbolic link
1
.tox/pep8/bin/python
Symbolic link
@ -0,0 +1 @@
|
||||
/usr/bin/python3
|
1
.tox/pep8/bin/python3
Symbolic link
1
.tox/pep8/bin/python3
Symbolic link
@ -0,0 +1 @@
|
||||
python
|
1
.tox/pep8/bin/python3.8
Symbolic link
1
.tox/pep8/bin/python3.8
Symbolic link
@ -0,0 +1 @@
|
||||
python
|
8
.tox/pep8/bin/wheel
Executable file
8
.tox/pep8/bin/wheel
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from wheel.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/wheel-3.8
Executable file
8
.tox/pep8/bin/wheel-3.8
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from wheel.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
8
.tox/pep8/bin/wheel3
Executable file
8
.tox/pep8/bin/wheel3
Executable file
@ -0,0 +1,8 @@
|
||||
#!/home/narinder/develop/charm/charm-cinder-netapp/.tox/pep8/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
import re
|
||||
import sys
|
||||
from wheel.cli import main
|
||||
if __name__ == '__main__':
|
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
||||
sys.exit(main())
|
@ -0,0 +1,562 @@
|
||||
A_Rog <adam.thomas.rogerson@gmail.com>
|
||||
Aakanksha Agrawal <11389424+rasponic@users.noreply.github.com>
|
||||
Abhinav Sagar <40603139+abhinavsagar@users.noreply.github.com>
|
||||
ABHYUDAY PRATAP SINGH <abhyudaypratap@outlook.com>
|
||||
abs51295 <aagams68@gmail.com>
|
||||
AceGentile <ventogrigio83@gmail.com>
|
||||
Adam Chainz <adam@adamj.eu>
|
||||
Adam Tse <adam.tse@me.com>
|
||||
Adam Tse <atse@users.noreply.github.com>
|
||||
Adam Wentz <awentz@theonion.com>
|
||||
admin <admin@admins-MacBook-Pro.local>
|
||||
Adrien Morison <adrien.morison@gmail.com>
|
||||
ahayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Ahilya <ahilya16009@iiitd.ac.in>
|
||||
AinsworthK <yat626@yahoo.com.hk>
|
||||
Akash Srivastava <akashsrivastava4927@gmail.com>
|
||||
Alan Yee <alyee@ucsd.edu>
|
||||
Albert Tugushev <albert@tugushev.ru>
|
||||
Albert-Guan <albert.guan94@gmail.com>
|
||||
albertg <albert.guan94@gmail.com>
|
||||
Aleks Bunin <github@compuix.com>
|
||||
Alethea Flowers <magicalgirl@google.com>
|
||||
Alex Gaynor <alex.gaynor@gmail.com>
|
||||
Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
Alex Loosley <a.loosley@reply.de>
|
||||
Alex Morega <alex@grep.ro>
|
||||
Alex Stachowiak <alexander@computer.org>
|
||||
Alexander Shtyrov <rawzausho@gmail.com>
|
||||
Alexandre Conrad <alexandre.conrad@gmail.com>
|
||||
Alexey Popravka <a.popravka@smartweb.com.ua>
|
||||
Alexey Popravka <alexey.popravka@horsedevel.com>
|
||||
Alli <alzeih@users.noreply.github.com>
|
||||
Ami Fischman <ami@fischman.org>
|
||||
Ananya Maiti <ananyoevo@gmail.com>
|
||||
Anatoly Techtonik <techtonik@gmail.com>
|
||||
Anders Kaseorg <andersk@mit.edu>
|
||||
Andreas Lutro <anlutro@gmail.com>
|
||||
Andrei Geacar <andrei.geacar@gmail.com>
|
||||
Andrew Gaul <andrew@gaul.org>
|
||||
Andrey Bulgakov <mail@andreiko.ru>
|
||||
Andrés Delfino <34587441+andresdelfino@users.noreply.github.com>
|
||||
Andrés Delfino <adelfino@gmail.com>
|
||||
Andy Freeland <andy.freeland@redjack.com>
|
||||
Andy Freeland <andy@andyfreeland.net>
|
||||
Andy Kluger <AndydeCleyre@users.noreply.github.com>
|
||||
Ani Hayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Aniruddha Basak <codewithaniruddha@gmail.com>
|
||||
Anish Tambe <anish.tambe@yahoo.in>
|
||||
Anrs Hu <anrs@douban.com>
|
||||
Anthony Sottile <asottile@umich.edu>
|
||||
Antoine Musso <hashar@free.fr>
|
||||
Anton Ovchinnikov <revolver112@gmail.com>
|
||||
Anton Patrushev <apatrushev@gmail.com>
|
||||
Antonio Alvarado Hernandez <tnotstar@gmail.com>
|
||||
Antony Lee <anntzer.lee@gmail.com>
|
||||
Antti Kaihola <akaihol+github@ambitone.com>
|
||||
Anubhav Patel <anubhavp28@gmail.com>
|
||||
Anuj Godase <godaseanuj@gmail.com>
|
||||
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
|
||||
AraHaan <seandhunt_7@yahoo.com>
|
||||
Arindam Choudhury <arindam@live.com>
|
||||
Armin Ronacher <armin.ronacher@active-4.com>
|
||||
Artem <duketemon@users.noreply.github.com>
|
||||
Ashley Manton <ajd.manton@googlemail.com>
|
||||
Ashwin Ramaswami <aramaswamis@gmail.com>
|
||||
atse <atse@users.noreply.github.com>
|
||||
Atsushi Odagiri <aodagx@gmail.com>
|
||||
Avner Cohen <israbirding@gmail.com>
|
||||
Baptiste Mispelon <bmispelon@gmail.com>
|
||||
Barney Gale <barney.gale@gmail.com>
|
||||
barneygale <barney.gale@gmail.com>
|
||||
Bartek Ogryczak <b.ogryczak@gmail.com>
|
||||
Bastian Venthur <mail@venthur.de>
|
||||
Ben Darnell <ben@bendarnell.com>
|
||||
Ben Hoyt <benhoyt@gmail.com>
|
||||
Ben Rosser <rosser.bjr@gmail.com>
|
||||
Bence Nagy <bence@underyx.me>
|
||||
Benjamin Peterson <benjamin@python.org>
|
||||
Benjamin VanEvery <ben@simondata.com>
|
||||
Benoit Pierre <benoit.pierre@gmail.com>
|
||||
Berker Peksag <berker.peksag@gmail.com>
|
||||
Bernardo B. Marques <bernardo.fire@gmail.com>
|
||||
Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||||
Bertil Hatt <bertil.hatt@farfetch.com>
|
||||
Bogdan Opanchuk <bogdan@opanchuk.net>
|
||||
BorisZZZ <BorisZZZ@users.noreply.github.com>
|
||||
Brad Erickson <eosrei@gmail.com>
|
||||
Bradley Ayers <bradley.ayers@gmail.com>
|
||||
Brandon L. Reiss <brandon@damyata.co>
|
||||
Brandt Bucher <brandtbucher@gmail.com>
|
||||
Brett Randall <javabrett@gmail.com>
|
||||
Brian Cristante <33549821+brcrista@users.noreply.github.com>
|
||||
Brian Cristante <brcrista@microsoft.com>
|
||||
Brian Rosner <brosner@gmail.com>
|
||||
BrownTruck <BrownTruck@users.noreply.github.com>
|
||||
Bruno Oliveira <nicoddemus@gmail.com>
|
||||
Bruno Renié <brutasse@gmail.com>
|
||||
Bstrdsmkr <bstrdsmkr@gmail.com>
|
||||
Buck Golemon <buck@yelp.com>
|
||||
burrows <burrows@preveil.com>
|
||||
Bussonnier Matthias <bussonniermatthias@gmail.com>
|
||||
c22 <c22@users.noreply.github.com>
|
||||
Caleb Martinez <accounts@calebmartinez.com>
|
||||
Calvin Smith <eukaryote@users.noreply.github.com>
|
||||
Carl Meyer <carl@oddbird.net>
|
||||
Carlos Liam <carlos@aarzee.me>
|
||||
Carol Willing <carolcode@willingconsulting.com>
|
||||
Carter Thayer <carterwthayer@gmail.com>
|
||||
Cass <cass.petrus@gmail.com>
|
||||
Chandrasekhar Atina <chandu.atina@gmail.com>
|
||||
Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
Chih-Hsuan Yen <yen@chyen.cc>
|
||||
Chris Brinker <chris.brinker@gmail.com>
|
||||
Chris Hunt <chrahunt@gmail.com>
|
||||
Chris Jerdonek <chris.jerdonek@gmail.com>
|
||||
Chris McDonough <chrism@plope.com>
|
||||
Chris Wolfe <chriswwolfe@gmail.com>
|
||||
Christian Heimes <christian@python.org>
|
||||
Christian Oudard <christian.oudard@gmail.com>
|
||||
Christopher Hunt <chrahunt@gmail.com>
|
||||
Christopher Snyder <cnsnyder@users.noreply.github.com>
|
||||
Clark Boylan <clark.boylan@gmail.com>
|
||||
Clay McClure <clay@daemons.net>
|
||||
Cody <Purring@users.noreply.github.com>
|
||||
Cody Soyland <codysoyland@gmail.com>
|
||||
Colin Watson <cjwatson@debian.org>
|
||||
Connor Osborn <cdosborn@email.arizona.edu>
|
||||
Cooper Lees <me@cooperlees.com>
|
||||
Cooper Ry Lees <me@cooperlees.com>
|
||||
Cory Benfield <lukasaoz@gmail.com>
|
||||
Cory Wright <corywright@gmail.com>
|
||||
Craig Kerstiens <craig.kerstiens@gmail.com>
|
||||
Cristian Sorinel <cristian.sorinel@gmail.com>
|
||||
Curtis Doty <Curtis@GreenKey.net>
|
||||
cytolentino <ctolentino8@bloomberg.net>
|
||||
Damian Quiroga <qdamian@gmail.com>
|
||||
Dan Black <dyspop@gmail.com>
|
||||
Dan Savilonis <djs@n-cube.org>
|
||||
Dan Sully <daniel-github@electricrain.com>
|
||||
daniel <mcdonaldd@unimelb.edu.au>
|
||||
Daniel Collins <accounts@dac.io>
|
||||
Daniel Hahler <git@thequod.de>
|
||||
Daniel Holth <dholth@fastmail.fm>
|
||||
Daniel Jost <torpedojost@gmail.com>
|
||||
Daniel Shaulov <daniel.shaulov@gmail.com>
|
||||
Daniele Esposti <expobrain@users.noreply.github.com>
|
||||
Daniele Procida <daniele@vurt.org>
|
||||
Danny Hermes <daniel.j.hermes@gmail.com>
|
||||
Dav Clark <davclark@gmail.com>
|
||||
Dave Abrahams <dave@boostpro.com>
|
||||
Dave Jones <dave@waveform.org.uk>
|
||||
David Aguilar <davvid@gmail.com>
|
||||
David Black <db@d1b.org>
|
||||
David Bordeynik <david.bordeynik@gmail.com>
|
||||
David Bordeynik <david@zebra-med.com>
|
||||
David Caro <david@dcaro.es>
|
||||
David Evans <d@drhevans.com>
|
||||
David Linke <dr.david.linke@gmail.com>
|
||||
David Pursehouse <david.pursehouse@gmail.com>
|
||||
David Tucker <david@tucker.name>
|
||||
David Wales <daviewales@gmail.com>
|
||||
Davidovich <david.genest@gmail.com>
|
||||
derwolfe <chriswwolfe@gmail.com>
|
||||
Desetude <harry@desetude.com>
|
||||
Diego Caraballo <diegocaraballo84@gmail.com>
|
||||
DiegoCaraballo <diegocaraballo84@gmail.com>
|
||||
Dmitry Gladkov <dmitry.gladkov@gmail.com>
|
||||
Domen Kožar <domen@dev.si>
|
||||
Donald Stufft <donald@stufft.io>
|
||||
Dongweiming <dongweiming@admaster.com.cn>
|
||||
Douglas Thor <dougthor42@users.noreply.github.com>
|
||||
DrFeathers <WilliamGeorgeBurgess@gmail.com>
|
||||
Dustin Ingram <di@di.codes>
|
||||
Dwayne Bailey <dwayne@translate.org.za>
|
||||
Ed Morley <501702+edmorley@users.noreply.github.com>
|
||||
Ed Morley <emorley@mozilla.com>
|
||||
Eitan Adler <lists@eitanadler.com>
|
||||
ekristina <panacejja@gmail.com>
|
||||
elainechan <elaine.chan@outlook.com>
|
||||
Eli Schwartz <eschwartz93@gmail.com>
|
||||
Eli Schwartz <eschwartz@archlinux.org>
|
||||
Emil Burzo <contact@emilburzo.com>
|
||||
Emil Styrke <emil.styrke@gmail.com>
|
||||
Endoh Takanao <djmchl@gmail.com>
|
||||
enoch <lanxenet@gmail.com>
|
||||
Erdinc Mutlu <erdinc_mutlu@yahoo.com>
|
||||
Eric Gillingham <Gillingham@bikezen.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com>
|
||||
Eric Hopper <hopper@omnifarious.org>
|
||||
Erik M. Bray <embray@stsci.edu>
|
||||
Erik Rose <erik@mozilla.com>
|
||||
Ernest W Durbin III <ewdurbin@gmail.com>
|
||||
Ernest W. Durbin III <ewdurbin@gmail.com>
|
||||
Erwin Janssen <erwinjanssen@outlook.com>
|
||||
Eugene Vereshchagin <evvers@gmail.com>
|
||||
everdimension <everdimension@gmail.com>
|
||||
Felix Yan <felixonmars@archlinux.org>
|
||||
fiber-space <fiber-space@users.noreply.github.com>
|
||||
Filip Kokosiński <filip.kokosinski@gmail.com>
|
||||
Florian Briand <ownerfrance+github@hotmail.com>
|
||||
Florian Rathgeber <florian.rathgeber@gmail.com>
|
||||
Francesco <f.guerrieri@gmail.com>
|
||||
Francesco Montesano <franz.bergesund@gmail.com>
|
||||
Frost Ming <mianghong@gmail.com>
|
||||
Gabriel Curio <g.curio@gmail.com>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Garry Polley <garrympolley@gmail.com>
|
||||
gdanielson <graeme.danielson@gmail.com>
|
||||
Geoffrey Lehée <geoffrey@lehee.name>
|
||||
Geoffrey Sneddon <me@gsnedders.com>
|
||||
George Song <george@55minutes.com>
|
||||
Georgi Valkov <georgi.t.valkov@gmail.com>
|
||||
Giftlin Rajaiah <giftlin.rgn@gmail.com>
|
||||
gizmoguy1 <gizmoguy1@gmail.com>
|
||||
gkdoc <40815324+gkdoc@users.noreply.github.com>
|
||||
Gopinath M <31352222+mgopi1990@users.noreply.github.com>
|
||||
GOTO Hayato <3532528+gh640@users.noreply.github.com>
|
||||
gpiks <gaurav.pikale@gmail.com>
|
||||
Guilherme Espada <porcariadagata@gmail.com>
|
||||
Guy Rozendorn <guy@rzn.co.il>
|
||||
gzpan123 <gzpan123@gmail.com>
|
||||
Hanjun Kim <hallazzang@gmail.com>
|
||||
Hari Charan <hcharan997@gmail.com>
|
||||
Harsh Vardhan <harsh59v@gmail.com>
|
||||
Herbert Pfennig <herbert@albinen.com>
|
||||
Hsiaoming Yang <lepture@me.com>
|
||||
Hugo <hugovk@users.noreply.github.com>
|
||||
Hugo Lopes Tavares <hltbra@gmail.com>
|
||||
Hugo van Kemenade <hugovk@users.noreply.github.com>
|
||||
hugovk <hugovk@users.noreply.github.com>
|
||||
Hynek Schlawack <hs@ox.cx>
|
||||
Ian Bicking <ianb@colorstudy.com>
|
||||
Ian Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Lee <IanLee1521@gmail.com>
|
||||
Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Wienand <ian@wienand.org>
|
||||
Ian Wienand <iwienand@redhat.com>
|
||||
Igor Kuzmitshov <kuzmiigo@gmail.com>
|
||||
Igor Sobreira <igor@igorsobreira.com>
|
||||
Ilya Baryshev <baryshev@gmail.com>
|
||||
INADA Naoki <songofacandy@gmail.com>
|
||||
Ionel Cristian Mărieș <contact@ionelmc.ro>
|
||||
Ionel Maries Cristian <ionel.mc@gmail.com>
|
||||
Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Jacob Kim <me@thejacobkim.com>
|
||||
jakirkham <jakirkham@gmail.com>
|
||||
Jakub Stasiak <kuba.stasiak@gmail.com>
|
||||
Jakub Vysoky <jakub@borka.cz>
|
||||
Jakub Wilk <jwilk@jwilk.net>
|
||||
James Cleveland <jamescleveland@gmail.com>
|
||||
James Cleveland <radiosilence@users.noreply.github.com>
|
||||
James Firth <hello@james-firth.com>
|
||||
James Polley <jp@jamezpolley.com>
|
||||
Jan Pokorný <jpokorny@redhat.com>
|
||||
Jannis Leidel <jannis@leidel.info>
|
||||
jarondl <me@jarondl.net>
|
||||
Jason R. Coombs <jaraco@jaraco.com>
|
||||
Jay Graves <jay@skabber.com>
|
||||
Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
|
||||
Jeff Barber <jbarber@computer.org>
|
||||
Jeff Dairiki <dairiki@dairiki.org>
|
||||
Jelmer Vernooij <jelmer@jelmer.uk>
|
||||
jenix21 <devfrog@gmail.com>
|
||||
Jeremy Stanley <fungi@yuggoth.org>
|
||||
Jeremy Zafran <jzafran@users.noreply.github.com>
|
||||
Jiashuo Li <jiasli@microsoft.com>
|
||||
Jim Garrison <jim@garrison.cc>
|
||||
Jivan Amara <Development@JivanAmara.net>
|
||||
John Paton <j.paton@catawiki.nl>
|
||||
John-Scott Atlakson <john.scott.atlakson@gmail.com>
|
||||
johnthagen <johnthagen@gmail.com>
|
||||
johnthagen <johnthagen@users.noreply.github.com>
|
||||
Jon Banafato <jon@jonafato.com>
|
||||
Jon Dufresne <jon.dufresne@gmail.com>
|
||||
Jon Parise <jon@indelible.org>
|
||||
Jonas Nockert <jonasnockert@gmail.com>
|
||||
Jonathan Herbert <foohyfooh@gmail.com>
|
||||
Joost Molenaar <j.j.molenaar@gmail.com>
|
||||
Jorge Niedbalski <niedbalski@gmail.com>
|
||||
Joseph Long <jdl@fastmail.fm>
|
||||
Josh Bronson <jabronson@gmail.com>
|
||||
Josh Hansen <josh@skwash.net>
|
||||
Josh Schneier <josh.schneier@gmail.com>
|
||||
Juanjo Bazán <jjbazan@gmail.com>
|
||||
Julian Berman <Julian@GrayVines.com>
|
||||
Julian Gethmann <julian.gethmann@kit.edu>
|
||||
Julien Demoor <julien@jdemoor.com>
|
||||
jwg4 <jack.grahl@yahoo.co.uk>
|
||||
Jyrki Pulliainen <jyrki@spotify.com>
|
||||
Kai Chen <kaichen120@gmail.com>
|
||||
Kamal Bin Mustafa <kamal@smach.net>
|
||||
kaustav haldar <hi@kaustav.me>
|
||||
keanemind <keanemind@gmail.com>
|
||||
Keith Maxwell <keith.maxwell@gmail.com>
|
||||
Kelsey Hightower <kelsey.hightower@gmail.com>
|
||||
Kenneth Belitzky <kenny@belitzky.com>
|
||||
Kenneth Reitz <me@kennethreitz.com>
|
||||
Kenneth Reitz <me@kennethreitz.org>
|
||||
Kevin Burke <kev@inburke.com>
|
||||
Kevin Carter <kevin.carter@rackspace.com>
|
||||
Kevin Frommelt <kevin.frommelt@webfilings.com>
|
||||
Kevin R Patterson <kevin.r.patterson@intel.com>
|
||||
Kexuan Sun <me@kianasun.com>
|
||||
Kit Randel <kit@nocturne.net.nz>
|
||||
kpinc <kop@meme.com>
|
||||
Krishna Oza <krishoza15sep@gmail.com>
|
||||
Kumar McMillan <kumar.mcmillan@gmail.com>
|
||||
Kyle Persohn <kyle.persohn@gmail.com>
|
||||
lakshmanaram <lakshmanaram.n@gmail.com>
|
||||
Laszlo Kiss-Kollar <kiss.kollar.laszlo@gmail.com>
|
||||
Laurent Bristiel <laurent@bristiel.com>
|
||||
Laurie Opperman <laurie@sitesee.com.au>
|
||||
Leon Sasson <leonsassonha@gmail.com>
|
||||
Lev Givon <lev@columbia.edu>
|
||||
Lincoln de Sousa <lincoln@comum.org>
|
||||
Lipis <lipiridis@gmail.com>
|
||||
Loren Carvalho <lcarvalho@linkedin.com>
|
||||
Lucas Cimon <lucas.cimon@gmail.com>
|
||||
Ludovic Gasc <gmludo@gmail.com>
|
||||
Luke Macken <lmacken@redhat.com>
|
||||
Luo Jiebin <luo.jiebin@qq.com>
|
||||
luojiebin <luojiebin@users.noreply.github.com>
|
||||
luz.paz <luzpaz@users.noreply.github.com>
|
||||
László Kiss Kollár <lkisskollar@bloomberg.net>
|
||||
László Kiss Kollár <lkollar@users.noreply.github.com>
|
||||
Marc Abramowitz <marc@marc-abramowitz.com>
|
||||
Marc Tamlyn <marc.tamlyn@gmail.com>
|
||||
Marcus Smith <qwcode@gmail.com>
|
||||
Mariatta <Mariatta@users.noreply.github.com>
|
||||
Mark Kohler <mark.kohler@proteinsimple.com>
|
||||
Mark Williams <markrwilliams@gmail.com>
|
||||
Mark Williams <mrw@enotuniq.org>
|
||||
Markus Hametner <fin+github@xbhd.org>
|
||||
Masaki <mk5986@nyu.edu>
|
||||
Masklinn <bitbucket.org@masklinn.net>
|
||||
Matej Stuchlik <mstuchli@redhat.com>
|
||||
Mathew Jennings <mjennings@foursquare.com>
|
||||
Mathieu Bridon <bochecha@daitauha.fr>
|
||||
Matt Good <matt@matt-good.net>
|
||||
Matt Maker <trip@monstro.us>
|
||||
Matt Robenolt <matt@ydekproductions.com>
|
||||
matthew <matthew@trumbell.net>
|
||||
Matthew Einhorn <moiein2000@gmail.com>
|
||||
Matthew Gilliard <matthew.gilliard@gmail.com>
|
||||
Matthew Iversen <teh.ivo@gmail.com>
|
||||
Matthew Trumbell <matthew@thirdstonepartners.com>
|
||||
Matthew Willson <matthew@swiftkey.com>
|
||||
Matthias Bussonnier <bussonniermatthias@gmail.com>
|
||||
mattip <matti.picus@gmail.com>
|
||||
Maxim Kurnikov <maxim.kurnikov@gmail.com>
|
||||
Maxime Rouyrre <rouyrre+git@gmail.com>
|
||||
mayeut <mayeut@users.noreply.github.com>
|
||||
mbaluna <44498973+mbaluna@users.noreply.github.com>
|
||||
mdebi <17590103+mdebi@users.noreply.github.com>
|
||||
memoselyk <memoselyk@gmail.com>
|
||||
Michael <michael-k@users.noreply.github.com>
|
||||
Michael Aquilina <michaelaquilina@gmail.com>
|
||||
Michael E. Karpeles <michael.karpeles@gmail.com>
|
||||
Michael Klich <michal@michalklich.com>
|
||||
Michael Williamson <mike@zwobble.org>
|
||||
michaelpacer <michaelpacer@gmail.com>
|
||||
Mickaël Schoentgen <mschoentgen@nuxeo.com>
|
||||
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
|
||||
Mihir Singh <git.service@mihirsingh.com>
|
||||
Mike <mikeh@blur.com>
|
||||
Mike Hendricks <mikeh@blur.com>
|
||||
Min RK <benjaminrk@gmail.com>
|
||||
MinRK <benjaminrk@gmail.com>
|
||||
Miro Hrončok <miro@hroncok.cz>
|
||||
Monica Baluna <mbaluna@bloomberg.net>
|
||||
montefra <franz.bergesund@gmail.com>
|
||||
Monty Taylor <mordred@inaugust.com>
|
||||
Nate Coraor <nate@bx.psu.edu>
|
||||
Nathaniel J. Smith <njs@pobox.com>
|
||||
Nehal J Wani <nehaljw.kkd1@gmail.com>
|
||||
Neil Botelho <neil.botelho321@gmail.com>
|
||||
Nick Coghlan <ncoghlan@gmail.com>
|
||||
Nick Stenning <nick@whiteink.com>
|
||||
Nick Timkovich <prometheus235@gmail.com>
|
||||
Nicolas Bock <nicolasbock@gmail.com>
|
||||
Nikhil Benesch <nikhil.benesch@gmail.com>
|
||||
Nitesh Sharma <nbsharma@outlook.com>
|
||||
Nowell Strite <nowell@strite.org>
|
||||
NtaleGrey <Shadikntale@gmail.com>
|
||||
nvdv <modestdev@gmail.com>
|
||||
Ofekmeister <ofekmeister@gmail.com>
|
||||
ofrinevo <ofrine@gmail.com>
|
||||
Oliver Jeeves <oliver.jeeves@ocado.com>
|
||||
Oliver Tonnhofer <olt@bogosoft.com>
|
||||
Olivier Girardot <ssaboum@gmail.com>
|
||||
Olivier Grisel <olivier.grisel@ensta.org>
|
||||
Ollie Rutherfurd <orutherfurd@gmail.com>
|
||||
OMOTO Kenji <k-omoto@m3.com>
|
||||
Omry Yadan <omry@fb.com>
|
||||
Oren Held <orenhe@il.ibm.com>
|
||||
Oscar Benjamin <oscar.j.benjamin@gmail.com>
|
||||
Oz N Tiram <oz.tiram@gmail.com>
|
||||
Pachwenko <32424503+Pachwenko@users.noreply.github.com>
|
||||
Patrick Dubroy <pdubroy@gmail.com>
|
||||
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
|
||||
Patrick Lawson <pl@foursquare.com>
|
||||
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
|
||||
Patrik Kopkan <pkopkan@redhat.com>
|
||||
Paul Kehrer <paul.l.kehrer@gmail.com>
|
||||
Paul Moore <p.f.moore@gmail.com>
|
||||
Paul Nasrat <pnasrat@gmail.com>
|
||||
Paul Oswald <pauloswald@gmail.com>
|
||||
Paul van der Linden <mail@paultjuh.org>
|
||||
Paulus Schoutsen <paulus@paulusschoutsen.nl>
|
||||
Pavithra Eswaramoorthy <33131404+QueenCoffee@users.noreply.github.com>
|
||||
Pawel Jasinski <pawel.jasinski@gmail.com>
|
||||
Pekka Klärck <peke@iki.fi>
|
||||
Peter Lisák <peter.lisak@showmax.com>
|
||||
Peter Waller <peter.waller@gmail.com>
|
||||
petr-tik <petr-tik@users.noreply.github.com>
|
||||
Phaneendra Chiruvella <hi@pcx.io>
|
||||
Phil Freo <phil@philfreo.com>
|
||||
Phil Pennock <phil@pennock-tech.com>
|
||||
Phil Whelan <phil123@gmail.com>
|
||||
Philip Jägenstedt <philip@foolip.org>
|
||||
Philip Molloy <pamolloy@users.noreply.github.com>
|
||||
Philippe Ombredanne <pombredanne@gmail.com>
|
||||
Pi Delport <pjdelport@gmail.com>
|
||||
Pierre-Yves Rofes <github@rofes.fr>
|
||||
pip <pypa-dev@googlegroups.com>
|
||||
Prabakaran Kumaresshan <k_prabakaran+github@hotmail.com>
|
||||
Prabhjyotsing Surjit Singh Sodhi <psinghsodhi@bloomberg.net>
|
||||
Prabhu Marappan <prabhum.794@gmail.com>
|
||||
Pradyun Gedam <pradyunsg@gmail.com>
|
||||
Pratik Mallya <mallya@us.ibm.com>
|
||||
Preet Thakkar <preet.thakkar@students.iiit.ac.in>
|
||||
Preston Holmes <preston@ptone.com>
|
||||
Przemek Wrzos <hetmankp@none>
|
||||
Pulkit Goyal <7895pulkit@gmail.com>
|
||||
Qiangning Hong <hongqn@gmail.com>
|
||||
Quentin Pradet <quentin.pradet@gmail.com>
|
||||
R. David Murray <rdmurray@bitdance.com>
|
||||
Rafael Caricio <rafael.jacinto@gmail.com>
|
||||
Ralf Schmitt <ralf@systemexit.de>
|
||||
Razzi Abuissa <razzi53@gmail.com>
|
||||
rdb <rdb@users.noreply.github.com>
|
||||
Remi Rampin <r@remirampin.com>
|
||||
Remi Rampin <remirampin@gmail.com>
|
||||
Rene Dudfield <renesd@gmail.com>
|
||||
Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
|
||||
Richard Jones <r1chardj0n3s@gmail.com>
|
||||
RobberPhex <robberphex@gmail.com>
|
||||
Robert Collins <rbtcollins@hp.com>
|
||||
Robert McGibbon <rmcgibbo@gmail.com>
|
||||
Robert T. McGibbon <rmcgibbo@gmail.com>
|
||||
robin elisha robinson <elisha.rob@gmail.com>
|
||||
Roey Berman <roey.berman@gmail.com>
|
||||
Rohan Jain <crodjer@gmail.com>
|
||||
Rohan Jain <crodjer@users.noreply.github.com>
|
||||
Rohan Jain <mail@rohanjain.in>
|
||||
Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
|
||||
Romuald Brunet <romuald@chivil.com>
|
||||
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
|
||||
Rory McCann <rory@technomancy.org>
|
||||
Ross Brattain <ross.b.brattain@intel.com>
|
||||
Roy Wellington Ⅳ <cactus_hugged@yahoo.com>
|
||||
Roy Wellington Ⅳ <roy@mybasis.com>
|
||||
Ryan Wooden <rygwdn@gmail.com>
|
||||
ryneeverett <ryneeverett@gmail.com>
|
||||
Sachi King <nakato@nakato.io>
|
||||
Salvatore Rinchiera <salvatore@rinchiera.com>
|
||||
Savio Jomton <sajo240519@gmail.com>
|
||||
schlamar <marc.schlaich@gmail.com>
|
||||
Scott Kitterman <sklist@kitterman.com>
|
||||
Sean <me@sean.taipei>
|
||||
seanj <seanj@xyke.com>
|
||||
Sebastian Jordan <sebastian.jordan.mail@googlemail.com>
|
||||
Sebastian Schaetz <sschaetz@butterflynetinc.com>
|
||||
Segev Finer <segev208@gmail.com>
|
||||
SeongSoo Cho <ppiyakk2@printf.kr>
|
||||
Sergey Vasilyev <nolar@nolar.info>
|
||||
Seth Woodworth <seth@sethish.com>
|
||||
Shlomi Fish <shlomif@shlomifish.org>
|
||||
Shovan Maity <shovan.maity@mayadata.io>
|
||||
Simeon Visser <svisser@users.noreply.github.com>
|
||||
Simon Cross <hodgestar@gmail.com>
|
||||
Simon Pichugin <simon.pichugin@gmail.com>
|
||||
sinoroc <sinoroc.code+git@gmail.com>
|
||||
Sorin Sbarnea <sorin.sbarnea@gmail.com>
|
||||
Stavros Korokithakis <stavros@korokithakis.net>
|
||||
Stefan Scherfke <stefan@sofa-rockers.org>
|
||||
Stephan Erb <github@stephanerb.eu>
|
||||
stepshal <nessento@openmailbox.org>
|
||||
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Dower <steve.dower@microsoft.com>
|
||||
Steve Kowalik <steven@wedontsleep.org>
|
||||
Steven Myint <git@stevenmyint.com>
|
||||
stonebig <stonebig34@gmail.com>
|
||||
Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
|
||||
Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
Stéphane Klein <contact@stephane-klein.info>
|
||||
Sumana Harihareswara <sh@changeset.nyc>
|
||||
Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
|
||||
Sviatoslav Sydorenko <wk@sydorenko.org.ua>
|
||||
Swat009 <swatantra.kumar8@gmail.com>
|
||||
Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>
|
||||
tbeswick <tbeswick@enphaseenergy.com>
|
||||
Thijs Triemstra <info@collab.nl>
|
||||
Thomas Fenzl <thomas.fenzl@gmail.com>
|
||||
Thomas Grainger <tagrain@gmail.com>
|
||||
Thomas Guettler <tguettler@tbz-pariv.de>
|
||||
Thomas Johansson <devnull@localhost>
|
||||
Thomas Kluyver <thomas@kluyver.me.uk>
|
||||
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
|
||||
Tim D. Smith <github@tim-smith.us>
|
||||
Tim Gates <tim.gates@iress.com>
|
||||
Tim Harder <radhermit@gmail.com>
|
||||
Tim Heap <tim@timheap.me>
|
||||
tim smith <github@tim-smith.us>
|
||||
tinruufu <tinruufu@gmail.com>
|
||||
Tom Forbes <tom@tomforb.es>
|
||||
Tom Freudenheim <tom.freudenheim@onepeloton.com>
|
||||
Tom V <tom@viner.tv>
|
||||
Tomas Orsava <torsava@redhat.com>
|
||||
Tomer Chachamu <tomer.chachamu@gmail.com>
|
||||
Tony Beswick <tonybeswick@orcon.net.nz>
|
||||
Tony Zhaocheng Tan <tony@tonytan.io>
|
||||
TonyBeswick <TonyBeswick@users.noreply.github.com>
|
||||
toonarmycaptain <toonarmycaptain@hotmail.com>
|
||||
Toshio Kuratomi <toshio@fedoraproject.org>
|
||||
Travis Swicegood <development@domain51.com>
|
||||
Tzu-ping Chung <uranusjr@gmail.com>
|
||||
Valentin Haenel <valentin.haenel@gmx.de>
|
||||
Victor Stinner <victor.stinner@gmail.com>
|
||||
victorvpaulo <victorvpaulo@gmail.com>
|
||||
Viktor Szépe <viktor@szepe.net>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Vinay Sajip <vinay_sajip@yahoo.co.uk>
|
||||
Vincent Philippon <sindaewoh@gmail.com>
|
||||
Vinicyus Macedo <7549205+vinicyusmacedo@users.noreply.github.com>
|
||||
Vitaly Babiy <vbabiy86@gmail.com>
|
||||
Vladimir Rutsky <rutsky@users.noreply.github.com>
|
||||
W. Trevor King <wking@drexel.edu>
|
||||
Wil Tan <wil@dready.org>
|
||||
Wilfred Hughes <me@wilfred.me.uk>
|
||||
William ML Leslie <william.leslie.ttg@gmail.com>
|
||||
William T Olson <trevor@heytrevor.com>
|
||||
Wilson Mo <wilsonfv@126.com>
|
||||
wim glenn <wim.glenn@gmail.com>
|
||||
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
|
||||
Xavier Fernandez <xav.fernandez@gmail.com>
|
||||
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
|
||||
xoviat <xoviat@users.noreply.github.com>
|
||||
xtreak <tir.karthi@gmail.com>
|
||||
YAMAMOTO Takashi <yamamoto@midokura.com>
|
||||
Yen Chi Hsuan <yan12125@gmail.com>
|
||||
Yeray Diaz Diaz <yeraydiazdiaz@gmail.com>
|
||||
Yoval P <yoval@gmx.com>
|
||||
Yu Jian <askingyj@gmail.com>
|
||||
Yuan Jing Vincent Yan <yyan82@bloomberg.net>
|
||||
Zearin <zearin@gonk.net>
|
||||
Zearin <Zearin@users.noreply.github.com>
|
||||
Zhiping Deng <kofreestyler@gmail.com>
|
||||
Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
Łukasz Langa <lukasz@langa.pl>
|
||||
Семён Марьясин <simeon@maryasin.name>
|
@ -0,0 +1 @@
|
||||
pip
|
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,71 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: CacheControl
|
||||
Version: 0.12.6
|
||||
Summary: httplib2 caching for requests
|
||||
Home-page: https://github.com/ionrock/cachecontrol
|
||||
Author: Eric Larson
|
||||
Author-email: eric@ionrock.org
|
||||
License: UNKNOWN
|
||||
Keywords: requests http caching web
|
||||
Platform: UNKNOWN
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Environment :: Web Environment
|
||||
Classifier: License :: OSI Approved :: Apache Software License
|
||||
Classifier: Operating System :: OS Independent
|
||||
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
|
||||
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
|
||||
Provides-Extra: filecache
|
||||
Requires-Dist: lockfile (>=0.9) ; extra == 'filecache'
|
||||
Provides-Extra: redis
|
||||
Requires-Dist: redis (>=2.10.5) ; extra == 'redis'
|
||||
|
||||
==============
|
||||
CacheControl
|
||||
==============
|
||||
|
||||
.. image:: https://img.shields.io/pypi/v/cachecontrol.svg
|
||||
:target: https://pypi.python.org/pypi/cachecontrol
|
||||
:alt: Latest Version
|
||||
|
||||
.. image:: https://travis-ci.org/ionrock/cachecontrol.png?branch=master
|
||||
:target: https://travis-ci.org/ionrock/cachecontrol
|
||||
|
||||
CacheControl is a port of the caching algorithms in httplib2_ for use with
|
||||
requests_ session object.
|
||||
|
||||
It was written because httplib2's better support for caching is often
|
||||
mitigated by its lack of thread safety. The same is true of requests in
|
||||
terms of caching.
|
||||
|
||||
|
||||
Quickstart
|
||||
==========
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import requests
|
||||
|
||||
from cachecontrol import CacheControl
|
||||
|
||||
|
||||
sess = requests.session()
|
||||
cached_sess = CacheControl(sess)
|
||||
|
||||
response = cached_sess.get('http://google.com')
|
||||
|
||||
If the URL contains any caching based headers, it will cache the
|
||||
result in a simple dictionary.
|
||||
|
||||
For more info, check out the docs_
|
||||
|
||||
.. _docs: http://cachecontrol.readthedocs.org/en/latest/
|
||||
.. _httplib2: https://github.com/jcgregorio/httplib2
|
||||
.. _requests: http://docs.python-requests.org/
|
||||
|
||||
|
@ -0,0 +1,37 @@
|
||||
cachecontrol/__init__.py,sha256=pJtAaUxOsMPnytI1A3juAJkXYDr8krdSnsg4Yg3OBEg,302
|
||||
cachecontrol/_cmd.py,sha256=88j4P3JlJGqg6xAXR4btN9fYruXUH4CE-M93Sie5IB8,1242
|
||||
cachecontrol/adapter.py,sha256=ctnbSXDOj0V0NaxJP2jFauOYRDHaNYMP9QCE8kB4kfk,4870
|
||||
cachecontrol/cache.py,sha256=1fc4wJP8HYt1ycnJXeEw5pCpeBL2Cqxx6g9Fb0AYDWQ,805
|
||||
cachecontrol/compat.py,sha256=Fn_aYzqNbN0bK9gUn8SQUzMLxQ_ruGnsEMvryYDFh3o,647
|
||||
cachecontrol/controller.py,sha256=fpLmIvxce2mKVFmtDFiiyydqU_pPbCucYLC9qP-LqvY,14137
|
||||
cachecontrol/filewrapper.py,sha256=vACKO8Llzu_ZWyjV1Fxn1MA4TGU60N5N3GSrAFdAY2Q,2533
|
||||
cachecontrol/heuristics.py,sha256=BFGHJ3yQcxvZizfo90LLZ04T_Z5XSCXvFotrp7Us0sc,4070
|
||||
cachecontrol/serialize.py,sha256=Jms7OS4GB2JFUzuMPlmQtuCDzcjjE-2ijrHpUXC2BV0,7062
|
||||
cachecontrol/wrapper.py,sha256=5LX0uJwkNQUtYSEw3aGmGu9WY8wGipd81mJ8lG0d0M4,690
|
||||
cachecontrol/caches/__init__.py,sha256=-gHNKYvaeD0kOk5M74eOrsSgIKUtC6i6GfbmugGweEo,86
|
||||
cachecontrol/caches/file_cache.py,sha256=nYVKsJtXh6gJXvdn1iWyrhxvkwpQrK-eKoMRzuiwkKk,4153
|
||||
cachecontrol/caches/redis_cache.py,sha256=yZP1PoUgAvxEZZrCVwImZ-5pFKU41v5HYJf1rfbXYmM,844
|
||||
CacheControl-0.12.6.dist-info/AUTHORS.txt,sha256=RtqU9KfonVGhI48DAA4-yTOBUhBtQTjFhaDzHoyh7uU,21518
|
||||
CacheControl-0.12.6.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090
|
||||
CacheControl-0.12.6.dist-info/METADATA,sha256=DzDqga-Bw7B7ylVrJanU_-imHV1od8Ok64qr5ugT-5A,2107
|
||||
CacheControl-0.12.6.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
||||
CacheControl-0.12.6.dist-info/top_level.txt,sha256=vGYWzpbe3h6gkakV4f7iCK2x3KyK3oMkV5pe5v25-d4,13
|
||||
CacheControl-0.12.6.dist-info/RECORD,,
|
||||
cachecontrol/__pycache__,,
|
||||
cachecontrol/__init__.cpython-38.pyc,,
|
||||
CacheControl-0.12.6.virtualenv,,
|
||||
cachecontrol/cache.cpython-38.pyc,,
|
||||
CacheControl-0.12.6.dist-info/__pycache__,,
|
||||
cachecontrol/heuristics.cpython-38.pyc,,
|
||||
cachecontrol/filewrapper.cpython-38.pyc,,
|
||||
cachecontrol/wrapper.cpython-38.pyc,,
|
||||
cachecontrol/caches/__pycache__,,
|
||||
cachecontrol/caches/file_cache.cpython-38.pyc,,
|
||||
cachecontrol/caches/redis_cache.cpython-38.pyc,,
|
||||
cachecontrol/adapter.cpython-38.pyc,,
|
||||
CacheControl-0.12.6.dist-info/INSTALLER,,
|
||||
cachecontrol/caches/__init__.cpython-38.pyc,,
|
||||
cachecontrol/controller.cpython-38.pyc,,
|
||||
cachecontrol/serialize.cpython-38.pyc,,
|
||||
cachecontrol/compat.cpython-38.pyc,,
|
||||
cachecontrol/_cmd.cpython-38.pyc,,
|
@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py2-none-any
|
||||
Tag: py3-none-any
|
||||
|
@ -0,0 +1 @@
|
||||
cachecontrol
|
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
.tox/pep8/lib/python3.8/site-packages/_virtualenv.pth
Normal file
1
.tox/pep8/lib/python3.8/site-packages/_virtualenv.pth
Normal file
@ -0,0 +1 @@
|
||||
import _virtualenv
|
115
.tox/pep8/lib/python3.8/site-packages/_virtualenv.py
Normal file
115
.tox/pep8/lib/python3.8/site-packages/_virtualenv.py
Normal file
@ -0,0 +1,115 @@
|
||||
"""Patches that are applied at runtime to the virtual environment"""
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
VIRTUALENV_PATCH_FILE = os.path.join(__file__)
|
||||
|
||||
|
||||
def patch_dist(dist):
|
||||
"""
|
||||
Distutils allows user to configure some arguments via a configuration file:
|
||||
https://docs.python.org/3/install/index.html#distutils-configuration-files
|
||||
|
||||
Some of this arguments though don't make sense in context of the virtual environment files, let's fix them up.
|
||||
"""
|
||||
# we cannot allow some install config as that would get packages installed outside of the virtual environment
|
||||
old_parse_config_files = dist.Distribution.parse_config_files
|
||||
|
||||
def parse_config_files(self, *args, **kwargs):
|
||||
result = old_parse_config_files(self, *args, **kwargs)
|
||||
install = self.get_option_dict("install")
|
||||
|
||||
if "prefix" in install: # the prefix governs where to install the libraries
|
||||
install["prefix"] = VIRTUALENV_PATCH_FILE, os.path.abspath(sys.prefix)
|
||||
for base in ("purelib", "platlib", "headers", "scripts", "data"):
|
||||
key = "install_{}".format(base)
|
||||
if key in install: # do not allow global configs to hijack venv paths
|
||||
install.pop(key, None)
|
||||
return result
|
||||
|
||||
dist.Distribution.parse_config_files = parse_config_files
|
||||
|
||||
|
||||
# Import hook that patches some modules to ignore configuration values that break package installation in case
|
||||
# of virtual environments.
|
||||
_DISTUTILS_PATCH = "distutils.dist", "setuptools.dist"
|
||||
if sys.version_info > (3, 4):
|
||||
# https://docs.python.org/3/library/importlib.html#setting-up-an-importer
|
||||
from importlib.abc import MetaPathFinder
|
||||
from importlib.util import find_spec
|
||||
from threading import Lock
|
||||
from functools import partial
|
||||
|
||||
class _Finder(MetaPathFinder):
|
||||
"""A meta path finder that allows patching the imported distutils modules"""
|
||||
|
||||
fullname = None
|
||||
lock = Lock()
|
||||
|
||||
def find_spec(self, fullname, path, target=None):
|
||||
if fullname in _DISTUTILS_PATCH and self.fullname is None:
|
||||
with self.lock:
|
||||
self.fullname = fullname
|
||||
try:
|
||||
spec = find_spec(fullname, path)
|
||||
if spec is not None:
|
||||
# https://www.python.org/dev/peps/pep-0451/#how-loading-will-work
|
||||
is_new_api = hasattr(spec.loader, "exec_module")
|
||||
func_name = "exec_module" if is_new_api else "load_module"
|
||||
old = getattr(spec.loader, func_name)
|
||||
func = self.exec_module if is_new_api else self.load_module
|
||||
if old is not func:
|
||||
try:
|
||||
setattr(spec.loader, func_name, partial(func, old))
|
||||
except AttributeError:
|
||||
pass # C-Extension loaders are r/o such as zipimporter with <python 3.7
|
||||
return spec
|
||||
finally:
|
||||
self.fullname = None
|
||||
|
||||
@staticmethod
|
||||
def exec_module(old, module):
|
||||
old(module)
|
||||
if module.__name__ in _DISTUTILS_PATCH:
|
||||
patch_dist(module)
|
||||
|
||||
@staticmethod
|
||||
def load_module(old, name):
|
||||
module = old(name)
|
||||
if module.__name__ in _DISTUTILS_PATCH:
|
||||
patch_dist(module)
|
||||
return module
|
||||
|
||||
sys.meta_path.insert(0, _Finder())
|
||||
else:
|
||||
# https://www.python.org/dev/peps/pep-0302/
|
||||
from imp import find_module
|
||||
from pkgutil import ImpImporter, ImpLoader
|
||||
|
||||
class _VirtualenvImporter(object, ImpImporter):
|
||||
def __init__(self, path=None):
|
||||
object.__init__(self)
|
||||
ImpImporter.__init__(self, path)
|
||||
|
||||
def find_module(self, fullname, path=None):
|
||||
if fullname in _DISTUTILS_PATCH:
|
||||
try:
|
||||
return _VirtualenvLoader(fullname, *find_module(fullname.split(".")[-1], path))
|
||||
except ImportError:
|
||||
pass
|
||||
return None
|
||||
|
||||
class _VirtualenvLoader(object, ImpLoader):
|
||||
def __init__(self, fullname, file, filename, etc):
|
||||
object.__init__(self)
|
||||
ImpLoader.__init__(self, fullname, file, filename, etc)
|
||||
|
||||
def load_module(self, fullname):
|
||||
module = super(_VirtualenvLoader, self).load_module(fullname)
|
||||
patch_dist(module)
|
||||
module.__loader__ = None # distlib fallback
|
||||
return module
|
||||
|
||||
sys.meta_path.append(_VirtualenvImporter())
|
@ -0,0 +1,562 @@
|
||||
A_Rog <adam.thomas.rogerson@gmail.com>
|
||||
Aakanksha Agrawal <11389424+rasponic@users.noreply.github.com>
|
||||
Abhinav Sagar <40603139+abhinavsagar@users.noreply.github.com>
|
||||
ABHYUDAY PRATAP SINGH <abhyudaypratap@outlook.com>
|
||||
abs51295 <aagams68@gmail.com>
|
||||
AceGentile <ventogrigio83@gmail.com>
|
||||
Adam Chainz <adam@adamj.eu>
|
||||
Adam Tse <adam.tse@me.com>
|
||||
Adam Tse <atse@users.noreply.github.com>
|
||||
Adam Wentz <awentz@theonion.com>
|
||||
admin <admin@admins-MacBook-Pro.local>
|
||||
Adrien Morison <adrien.morison@gmail.com>
|
||||
ahayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Ahilya <ahilya16009@iiitd.ac.in>
|
||||
AinsworthK <yat626@yahoo.com.hk>
|
||||
Akash Srivastava <akashsrivastava4927@gmail.com>
|
||||
Alan Yee <alyee@ucsd.edu>
|
||||
Albert Tugushev <albert@tugushev.ru>
|
||||
Albert-Guan <albert.guan94@gmail.com>
|
||||
albertg <albert.guan94@gmail.com>
|
||||
Aleks Bunin <github@compuix.com>
|
||||
Alethea Flowers <magicalgirl@google.com>
|
||||
Alex Gaynor <alex.gaynor@gmail.com>
|
||||
Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
Alex Loosley <a.loosley@reply.de>
|
||||
Alex Morega <alex@grep.ro>
|
||||
Alex Stachowiak <alexander@computer.org>
|
||||
Alexander Shtyrov <rawzausho@gmail.com>
|
||||
Alexandre Conrad <alexandre.conrad@gmail.com>
|
||||
Alexey Popravka <a.popravka@smartweb.com.ua>
|
||||
Alexey Popravka <alexey.popravka@horsedevel.com>
|
||||
Alli <alzeih@users.noreply.github.com>
|
||||
Ami Fischman <ami@fischman.org>
|
||||
Ananya Maiti <ananyoevo@gmail.com>
|
||||
Anatoly Techtonik <techtonik@gmail.com>
|
||||
Anders Kaseorg <andersk@mit.edu>
|
||||
Andreas Lutro <anlutro@gmail.com>
|
||||
Andrei Geacar <andrei.geacar@gmail.com>
|
||||
Andrew Gaul <andrew@gaul.org>
|
||||
Andrey Bulgakov <mail@andreiko.ru>
|
||||
Andrés Delfino <34587441+andresdelfino@users.noreply.github.com>
|
||||
Andrés Delfino <adelfino@gmail.com>
|
||||
Andy Freeland <andy.freeland@redjack.com>
|
||||
Andy Freeland <andy@andyfreeland.net>
|
||||
Andy Kluger <AndydeCleyre@users.noreply.github.com>
|
||||
Ani Hayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Aniruddha Basak <codewithaniruddha@gmail.com>
|
||||
Anish Tambe <anish.tambe@yahoo.in>
|
||||
Anrs Hu <anrs@douban.com>
|
||||
Anthony Sottile <asottile@umich.edu>
|
||||
Antoine Musso <hashar@free.fr>
|
||||
Anton Ovchinnikov <revolver112@gmail.com>
|
||||
Anton Patrushev <apatrushev@gmail.com>
|
||||
Antonio Alvarado Hernandez <tnotstar@gmail.com>
|
||||
Antony Lee <anntzer.lee@gmail.com>
|
||||
Antti Kaihola <akaihol+github@ambitone.com>
|
||||
Anubhav Patel <anubhavp28@gmail.com>
|
||||
Anuj Godase <godaseanuj@gmail.com>
|
||||
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
|
||||
AraHaan <seandhunt_7@yahoo.com>
|
||||
Arindam Choudhury <arindam@live.com>
|
||||
Armin Ronacher <armin.ronacher@active-4.com>
|
||||
Artem <duketemon@users.noreply.github.com>
|
||||
Ashley Manton <ajd.manton@googlemail.com>
|
||||
Ashwin Ramaswami <aramaswamis@gmail.com>
|
||||
atse <atse@users.noreply.github.com>
|
||||
Atsushi Odagiri <aodagx@gmail.com>
|
||||
Avner Cohen <israbirding@gmail.com>
|
||||
Baptiste Mispelon <bmispelon@gmail.com>
|
||||
Barney Gale <barney.gale@gmail.com>
|
||||
barneygale <barney.gale@gmail.com>
|
||||
Bartek Ogryczak <b.ogryczak@gmail.com>
|
||||
Bastian Venthur <mail@venthur.de>
|
||||
Ben Darnell <ben@bendarnell.com>
|
||||
Ben Hoyt <benhoyt@gmail.com>
|
||||
Ben Rosser <rosser.bjr@gmail.com>
|
||||
Bence Nagy <bence@underyx.me>
|
||||
Benjamin Peterson <benjamin@python.org>
|
||||
Benjamin VanEvery <ben@simondata.com>
|
||||
Benoit Pierre <benoit.pierre@gmail.com>
|
||||
Berker Peksag <berker.peksag@gmail.com>
|
||||
Bernardo B. Marques <bernardo.fire@gmail.com>
|
||||
Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||||
Bertil Hatt <bertil.hatt@farfetch.com>
|
||||
Bogdan Opanchuk <bogdan@opanchuk.net>
|
||||
BorisZZZ <BorisZZZ@users.noreply.github.com>
|
||||
Brad Erickson <eosrei@gmail.com>
|
||||
Bradley Ayers <bradley.ayers@gmail.com>
|
||||
Brandon L. Reiss <brandon@damyata.co>
|
||||
Brandt Bucher <brandtbucher@gmail.com>
|
||||
Brett Randall <javabrett@gmail.com>
|
||||
Brian Cristante <33549821+brcrista@users.noreply.github.com>
|
||||
Brian Cristante <brcrista@microsoft.com>
|
||||
Brian Rosner <brosner@gmail.com>
|
||||
BrownTruck <BrownTruck@users.noreply.github.com>
|
||||
Bruno Oliveira <nicoddemus@gmail.com>
|
||||
Bruno Renié <brutasse@gmail.com>
|
||||
Bstrdsmkr <bstrdsmkr@gmail.com>
|
||||
Buck Golemon <buck@yelp.com>
|
||||
burrows <burrows@preveil.com>
|
||||
Bussonnier Matthias <bussonniermatthias@gmail.com>
|
||||
c22 <c22@users.noreply.github.com>
|
||||
Caleb Martinez <accounts@calebmartinez.com>
|
||||
Calvin Smith <eukaryote@users.noreply.github.com>
|
||||
Carl Meyer <carl@oddbird.net>
|
||||
Carlos Liam <carlos@aarzee.me>
|
||||
Carol Willing <carolcode@willingconsulting.com>
|
||||
Carter Thayer <carterwthayer@gmail.com>
|
||||
Cass <cass.petrus@gmail.com>
|
||||
Chandrasekhar Atina <chandu.atina@gmail.com>
|
||||
Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
Chih-Hsuan Yen <yen@chyen.cc>
|
||||
Chris Brinker <chris.brinker@gmail.com>
|
||||
Chris Hunt <chrahunt@gmail.com>
|
||||
Chris Jerdonek <chris.jerdonek@gmail.com>
|
||||
Chris McDonough <chrism@plope.com>
|
||||
Chris Wolfe <chriswwolfe@gmail.com>
|
||||
Christian Heimes <christian@python.org>
|
||||
Christian Oudard <christian.oudard@gmail.com>
|
||||
Christopher Hunt <chrahunt@gmail.com>
|
||||
Christopher Snyder <cnsnyder@users.noreply.github.com>
|
||||
Clark Boylan <clark.boylan@gmail.com>
|
||||
Clay McClure <clay@daemons.net>
|
||||
Cody <Purring@users.noreply.github.com>
|
||||
Cody Soyland <codysoyland@gmail.com>
|
||||
Colin Watson <cjwatson@debian.org>
|
||||
Connor Osborn <cdosborn@email.arizona.edu>
|
||||
Cooper Lees <me@cooperlees.com>
|
||||
Cooper Ry Lees <me@cooperlees.com>
|
||||
Cory Benfield <lukasaoz@gmail.com>
|
||||
Cory Wright <corywright@gmail.com>
|
||||
Craig Kerstiens <craig.kerstiens@gmail.com>
|
||||
Cristian Sorinel <cristian.sorinel@gmail.com>
|
||||
Curtis Doty <Curtis@GreenKey.net>
|
||||
cytolentino <ctolentino8@bloomberg.net>
|
||||
Damian Quiroga <qdamian@gmail.com>
|
||||
Dan Black <dyspop@gmail.com>
|
||||
Dan Savilonis <djs@n-cube.org>
|
||||
Dan Sully <daniel-github@electricrain.com>
|
||||
daniel <mcdonaldd@unimelb.edu.au>
|
||||
Daniel Collins <accounts@dac.io>
|
||||
Daniel Hahler <git@thequod.de>
|
||||
Daniel Holth <dholth@fastmail.fm>
|
||||
Daniel Jost <torpedojost@gmail.com>
|
||||
Daniel Shaulov <daniel.shaulov@gmail.com>
|
||||
Daniele Esposti <expobrain@users.noreply.github.com>
|
||||
Daniele Procida <daniele@vurt.org>
|
||||
Danny Hermes <daniel.j.hermes@gmail.com>
|
||||
Dav Clark <davclark@gmail.com>
|
||||
Dave Abrahams <dave@boostpro.com>
|
||||
Dave Jones <dave@waveform.org.uk>
|
||||
David Aguilar <davvid@gmail.com>
|
||||
David Black <db@d1b.org>
|
||||
David Bordeynik <david.bordeynik@gmail.com>
|
||||
David Bordeynik <david@zebra-med.com>
|
||||
David Caro <david@dcaro.es>
|
||||
David Evans <d@drhevans.com>
|
||||
David Linke <dr.david.linke@gmail.com>
|
||||
David Pursehouse <david.pursehouse@gmail.com>
|
||||
David Tucker <david@tucker.name>
|
||||
David Wales <daviewales@gmail.com>
|
||||
Davidovich <david.genest@gmail.com>
|
||||
derwolfe <chriswwolfe@gmail.com>
|
||||
Desetude <harry@desetude.com>
|
||||
Diego Caraballo <diegocaraballo84@gmail.com>
|
||||
DiegoCaraballo <diegocaraballo84@gmail.com>
|
||||
Dmitry Gladkov <dmitry.gladkov@gmail.com>
|
||||
Domen Kožar <domen@dev.si>
|
||||
Donald Stufft <donald@stufft.io>
|
||||
Dongweiming <dongweiming@admaster.com.cn>
|
||||
Douglas Thor <dougthor42@users.noreply.github.com>
|
||||
DrFeathers <WilliamGeorgeBurgess@gmail.com>
|
||||
Dustin Ingram <di@di.codes>
|
||||
Dwayne Bailey <dwayne@translate.org.za>
|
||||
Ed Morley <501702+edmorley@users.noreply.github.com>
|
||||
Ed Morley <emorley@mozilla.com>
|
||||
Eitan Adler <lists@eitanadler.com>
|
||||
ekristina <panacejja@gmail.com>
|
||||
elainechan <elaine.chan@outlook.com>
|
||||
Eli Schwartz <eschwartz93@gmail.com>
|
||||
Eli Schwartz <eschwartz@archlinux.org>
|
||||
Emil Burzo <contact@emilburzo.com>
|
||||
Emil Styrke <emil.styrke@gmail.com>
|
||||
Endoh Takanao <djmchl@gmail.com>
|
||||
enoch <lanxenet@gmail.com>
|
||||
Erdinc Mutlu <erdinc_mutlu@yahoo.com>
|
||||
Eric Gillingham <Gillingham@bikezen.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com>
|
||||
Eric Hopper <hopper@omnifarious.org>
|
||||
Erik M. Bray <embray@stsci.edu>
|
||||
Erik Rose <erik@mozilla.com>
|
||||
Ernest W Durbin III <ewdurbin@gmail.com>
|
||||
Ernest W. Durbin III <ewdurbin@gmail.com>
|
||||
Erwin Janssen <erwinjanssen@outlook.com>
|
||||
Eugene Vereshchagin <evvers@gmail.com>
|
||||
everdimension <everdimension@gmail.com>
|
||||
Felix Yan <felixonmars@archlinux.org>
|
||||
fiber-space <fiber-space@users.noreply.github.com>
|
||||
Filip Kokosiński <filip.kokosinski@gmail.com>
|
||||
Florian Briand <ownerfrance+github@hotmail.com>
|
||||
Florian Rathgeber <florian.rathgeber@gmail.com>
|
||||
Francesco <f.guerrieri@gmail.com>
|
||||
Francesco Montesano <franz.bergesund@gmail.com>
|
||||
Frost Ming <mianghong@gmail.com>
|
||||
Gabriel Curio <g.curio@gmail.com>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Garry Polley <garrympolley@gmail.com>
|
||||
gdanielson <graeme.danielson@gmail.com>
|
||||
Geoffrey Lehée <geoffrey@lehee.name>
|
||||
Geoffrey Sneddon <me@gsnedders.com>
|
||||
George Song <george@55minutes.com>
|
||||
Georgi Valkov <georgi.t.valkov@gmail.com>
|
||||
Giftlin Rajaiah <giftlin.rgn@gmail.com>
|
||||
gizmoguy1 <gizmoguy1@gmail.com>
|
||||
gkdoc <40815324+gkdoc@users.noreply.github.com>
|
||||
Gopinath M <31352222+mgopi1990@users.noreply.github.com>
|
||||
GOTO Hayato <3532528+gh640@users.noreply.github.com>
|
||||
gpiks <gaurav.pikale@gmail.com>
|
||||
Guilherme Espada <porcariadagata@gmail.com>
|
||||
Guy Rozendorn <guy@rzn.co.il>
|
||||
gzpan123 <gzpan123@gmail.com>
|
||||
Hanjun Kim <hallazzang@gmail.com>
|
||||
Hari Charan <hcharan997@gmail.com>
|
||||
Harsh Vardhan <harsh59v@gmail.com>
|
||||
Herbert Pfennig <herbert@albinen.com>
|
||||
Hsiaoming Yang <lepture@me.com>
|
||||
Hugo <hugovk@users.noreply.github.com>
|
||||
Hugo Lopes Tavares <hltbra@gmail.com>
|
||||
Hugo van Kemenade <hugovk@users.noreply.github.com>
|
||||
hugovk <hugovk@users.noreply.github.com>
|
||||
Hynek Schlawack <hs@ox.cx>
|
||||
Ian Bicking <ianb@colorstudy.com>
|
||||
Ian Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Lee <IanLee1521@gmail.com>
|
||||
Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Wienand <ian@wienand.org>
|
||||
Ian Wienand <iwienand@redhat.com>
|
||||
Igor Kuzmitshov <kuzmiigo@gmail.com>
|
||||
Igor Sobreira <igor@igorsobreira.com>
|
||||
Ilya Baryshev <baryshev@gmail.com>
|
||||
INADA Naoki <songofacandy@gmail.com>
|
||||
Ionel Cristian Mărieș <contact@ionelmc.ro>
|
||||
Ionel Maries Cristian <ionel.mc@gmail.com>
|
||||
Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Jacob Kim <me@thejacobkim.com>
|
||||
jakirkham <jakirkham@gmail.com>
|
||||
Jakub Stasiak <kuba.stasiak@gmail.com>
|
||||
Jakub Vysoky <jakub@borka.cz>
|
||||
Jakub Wilk <jwilk@jwilk.net>
|
||||
James Cleveland <jamescleveland@gmail.com>
|
||||
James Cleveland <radiosilence@users.noreply.github.com>
|
||||
James Firth <hello@james-firth.com>
|
||||
James Polley <jp@jamezpolley.com>
|
||||
Jan Pokorný <jpokorny@redhat.com>
|
||||
Jannis Leidel <jannis@leidel.info>
|
||||
jarondl <me@jarondl.net>
|
||||
Jason R. Coombs <jaraco@jaraco.com>
|
||||
Jay Graves <jay@skabber.com>
|
||||
Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
|
||||
Jeff Barber <jbarber@computer.org>
|
||||
Jeff Dairiki <dairiki@dairiki.org>
|
||||
Jelmer Vernooij <jelmer@jelmer.uk>
|
||||
jenix21 <devfrog@gmail.com>
|
||||
Jeremy Stanley <fungi@yuggoth.org>
|
||||
Jeremy Zafran <jzafran@users.noreply.github.com>
|
||||
Jiashuo Li <jiasli@microsoft.com>
|
||||
Jim Garrison <jim@garrison.cc>
|
||||
Jivan Amara <Development@JivanAmara.net>
|
||||
John Paton <j.paton@catawiki.nl>
|
||||
John-Scott Atlakson <john.scott.atlakson@gmail.com>
|
||||
johnthagen <johnthagen@gmail.com>
|
||||
johnthagen <johnthagen@users.noreply.github.com>
|
||||
Jon Banafato <jon@jonafato.com>
|
||||
Jon Dufresne <jon.dufresne@gmail.com>
|
||||
Jon Parise <jon@indelible.org>
|
||||
Jonas Nockert <jonasnockert@gmail.com>
|
||||
Jonathan Herbert <foohyfooh@gmail.com>
|
||||
Joost Molenaar <j.j.molenaar@gmail.com>
|
||||
Jorge Niedbalski <niedbalski@gmail.com>
|
||||
Joseph Long <jdl@fastmail.fm>
|
||||
Josh Bronson <jabronson@gmail.com>
|
||||
Josh Hansen <josh@skwash.net>
|
||||
Josh Schneier <josh.schneier@gmail.com>
|
||||
Juanjo Bazán <jjbazan@gmail.com>
|
||||
Julian Berman <Julian@GrayVines.com>
|
||||
Julian Gethmann <julian.gethmann@kit.edu>
|
||||
Julien Demoor <julien@jdemoor.com>
|
||||
jwg4 <jack.grahl@yahoo.co.uk>
|
||||
Jyrki Pulliainen <jyrki@spotify.com>
|
||||
Kai Chen <kaichen120@gmail.com>
|
||||
Kamal Bin Mustafa <kamal@smach.net>
|
||||
kaustav haldar <hi@kaustav.me>
|
||||
keanemind <keanemind@gmail.com>
|
||||
Keith Maxwell <keith.maxwell@gmail.com>
|
||||
Kelsey Hightower <kelsey.hightower@gmail.com>
|
||||
Kenneth Belitzky <kenny@belitzky.com>
|
||||
Kenneth Reitz <me@kennethreitz.com>
|
||||
Kenneth Reitz <me@kennethreitz.org>
|
||||
Kevin Burke <kev@inburke.com>
|
||||
Kevin Carter <kevin.carter@rackspace.com>
|
||||
Kevin Frommelt <kevin.frommelt@webfilings.com>
|
||||
Kevin R Patterson <kevin.r.patterson@intel.com>
|
||||
Kexuan Sun <me@kianasun.com>
|
||||
Kit Randel <kit@nocturne.net.nz>
|
||||
kpinc <kop@meme.com>
|
||||
Krishna Oza <krishoza15sep@gmail.com>
|
||||
Kumar McMillan <kumar.mcmillan@gmail.com>
|
||||
Kyle Persohn <kyle.persohn@gmail.com>
|
||||
lakshmanaram <lakshmanaram.n@gmail.com>
|
||||
Laszlo Kiss-Kollar <kiss.kollar.laszlo@gmail.com>
|
||||
Laurent Bristiel <laurent@bristiel.com>
|
||||
Laurie Opperman <laurie@sitesee.com.au>
|
||||
Leon Sasson <leonsassonha@gmail.com>
|
||||
Lev Givon <lev@columbia.edu>
|
||||
Lincoln de Sousa <lincoln@comum.org>
|
||||
Lipis <lipiridis@gmail.com>
|
||||
Loren Carvalho <lcarvalho@linkedin.com>
|
||||
Lucas Cimon <lucas.cimon@gmail.com>
|
||||
Ludovic Gasc <gmludo@gmail.com>
|
||||
Luke Macken <lmacken@redhat.com>
|
||||
Luo Jiebin <luo.jiebin@qq.com>
|
||||
luojiebin <luojiebin@users.noreply.github.com>
|
||||
luz.paz <luzpaz@users.noreply.github.com>
|
||||
László Kiss Kollár <lkisskollar@bloomberg.net>
|
||||
László Kiss Kollár <lkollar@users.noreply.github.com>
|
||||
Marc Abramowitz <marc@marc-abramowitz.com>
|
||||
Marc Tamlyn <marc.tamlyn@gmail.com>
|
||||
Marcus Smith <qwcode@gmail.com>
|
||||
Mariatta <Mariatta@users.noreply.github.com>
|
||||
Mark Kohler <mark.kohler@proteinsimple.com>
|
||||
Mark Williams <markrwilliams@gmail.com>
|
||||
Mark Williams <mrw@enotuniq.org>
|
||||
Markus Hametner <fin+github@xbhd.org>
|
||||
Masaki <mk5986@nyu.edu>
|
||||
Masklinn <bitbucket.org@masklinn.net>
|
||||
Matej Stuchlik <mstuchli@redhat.com>
|
||||
Mathew Jennings <mjennings@foursquare.com>
|
||||
Mathieu Bridon <bochecha@daitauha.fr>
|
||||
Matt Good <matt@matt-good.net>
|
||||
Matt Maker <trip@monstro.us>
|
||||
Matt Robenolt <matt@ydekproductions.com>
|
||||
matthew <matthew@trumbell.net>
|
||||
Matthew Einhorn <moiein2000@gmail.com>
|
||||
Matthew Gilliard <matthew.gilliard@gmail.com>
|
||||
Matthew Iversen <teh.ivo@gmail.com>
|
||||
Matthew Trumbell <matthew@thirdstonepartners.com>
|
||||
Matthew Willson <matthew@swiftkey.com>
|
||||
Matthias Bussonnier <bussonniermatthias@gmail.com>
|
||||
mattip <matti.picus@gmail.com>
|
||||
Maxim Kurnikov <maxim.kurnikov@gmail.com>
|
||||
Maxime Rouyrre <rouyrre+git@gmail.com>
|
||||
mayeut <mayeut@users.noreply.github.com>
|
||||
mbaluna <44498973+mbaluna@users.noreply.github.com>
|
||||
mdebi <17590103+mdebi@users.noreply.github.com>
|
||||
memoselyk <memoselyk@gmail.com>
|
||||
Michael <michael-k@users.noreply.github.com>
|
||||
Michael Aquilina <michaelaquilina@gmail.com>
|
||||
Michael E. Karpeles <michael.karpeles@gmail.com>
|
||||
Michael Klich <michal@michalklich.com>
|
||||
Michael Williamson <mike@zwobble.org>
|
||||
michaelpacer <michaelpacer@gmail.com>
|
||||
Mickaël Schoentgen <mschoentgen@nuxeo.com>
|
||||
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
|
||||
Mihir Singh <git.service@mihirsingh.com>
|
||||
Mike <mikeh@blur.com>
|
||||
Mike Hendricks <mikeh@blur.com>
|
||||
Min RK <benjaminrk@gmail.com>
|
||||
MinRK <benjaminrk@gmail.com>
|
||||
Miro Hrončok <miro@hroncok.cz>
|
||||
Monica Baluna <mbaluna@bloomberg.net>
|
||||
montefra <franz.bergesund@gmail.com>
|
||||
Monty Taylor <mordred@inaugust.com>
|
||||
Nate Coraor <nate@bx.psu.edu>
|
||||
Nathaniel J. Smith <njs@pobox.com>
|
||||
Nehal J Wani <nehaljw.kkd1@gmail.com>
|
||||
Neil Botelho <neil.botelho321@gmail.com>
|
||||
Nick Coghlan <ncoghlan@gmail.com>
|
||||
Nick Stenning <nick@whiteink.com>
|
||||
Nick Timkovich <prometheus235@gmail.com>
|
||||
Nicolas Bock <nicolasbock@gmail.com>
|
||||
Nikhil Benesch <nikhil.benesch@gmail.com>
|
||||
Nitesh Sharma <nbsharma@outlook.com>
|
||||
Nowell Strite <nowell@strite.org>
|
||||
NtaleGrey <Shadikntale@gmail.com>
|
||||
nvdv <modestdev@gmail.com>
|
||||
Ofekmeister <ofekmeister@gmail.com>
|
||||
ofrinevo <ofrine@gmail.com>
|
||||
Oliver Jeeves <oliver.jeeves@ocado.com>
|
||||
Oliver Tonnhofer <olt@bogosoft.com>
|
||||
Olivier Girardot <ssaboum@gmail.com>
|
||||
Olivier Grisel <olivier.grisel@ensta.org>
|
||||
Ollie Rutherfurd <orutherfurd@gmail.com>
|
||||
OMOTO Kenji <k-omoto@m3.com>
|
||||
Omry Yadan <omry@fb.com>
|
||||
Oren Held <orenhe@il.ibm.com>
|
||||
Oscar Benjamin <oscar.j.benjamin@gmail.com>
|
||||
Oz N Tiram <oz.tiram@gmail.com>
|
||||
Pachwenko <32424503+Pachwenko@users.noreply.github.com>
|
||||
Patrick Dubroy <pdubroy@gmail.com>
|
||||
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
|
||||
Patrick Lawson <pl@foursquare.com>
|
||||
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
|
||||
Patrik Kopkan <pkopkan@redhat.com>
|
||||
Paul Kehrer <paul.l.kehrer@gmail.com>
|
||||
Paul Moore <p.f.moore@gmail.com>
|
||||
Paul Nasrat <pnasrat@gmail.com>
|
||||
Paul Oswald <pauloswald@gmail.com>
|
||||
Paul van der Linden <mail@paultjuh.org>
|
||||
Paulus Schoutsen <paulus@paulusschoutsen.nl>
|
||||
Pavithra Eswaramoorthy <33131404+QueenCoffee@users.noreply.github.com>
|
||||
Pawel Jasinski <pawel.jasinski@gmail.com>
|
||||
Pekka Klärck <peke@iki.fi>
|
||||
Peter Lisák <peter.lisak@showmax.com>
|
||||
Peter Waller <peter.waller@gmail.com>
|
||||
petr-tik <petr-tik@users.noreply.github.com>
|
||||
Phaneendra Chiruvella <hi@pcx.io>
|
||||
Phil Freo <phil@philfreo.com>
|
||||
Phil Pennock <phil@pennock-tech.com>
|
||||
Phil Whelan <phil123@gmail.com>
|
||||
Philip Jägenstedt <philip@foolip.org>
|
||||
Philip Molloy <pamolloy@users.noreply.github.com>
|
||||
Philippe Ombredanne <pombredanne@gmail.com>
|
||||
Pi Delport <pjdelport@gmail.com>
|
||||
Pierre-Yves Rofes <github@rofes.fr>
|
||||
pip <pypa-dev@googlegroups.com>
|
||||
Prabakaran Kumaresshan <k_prabakaran+github@hotmail.com>
|
||||
Prabhjyotsing Surjit Singh Sodhi <psinghsodhi@bloomberg.net>
|
||||
Prabhu Marappan <prabhum.794@gmail.com>
|
||||
Pradyun Gedam <pradyunsg@gmail.com>
|
||||
Pratik Mallya <mallya@us.ibm.com>
|
||||
Preet Thakkar <preet.thakkar@students.iiit.ac.in>
|
||||
Preston Holmes <preston@ptone.com>
|
||||
Przemek Wrzos <hetmankp@none>
|
||||
Pulkit Goyal <7895pulkit@gmail.com>
|
||||
Qiangning Hong <hongqn@gmail.com>
|
||||
Quentin Pradet <quentin.pradet@gmail.com>
|
||||
R. David Murray <rdmurray@bitdance.com>
|
||||
Rafael Caricio <rafael.jacinto@gmail.com>
|
||||
Ralf Schmitt <ralf@systemexit.de>
|
||||
Razzi Abuissa <razzi53@gmail.com>
|
||||
rdb <rdb@users.noreply.github.com>
|
||||
Remi Rampin <r@remirampin.com>
|
||||
Remi Rampin <remirampin@gmail.com>
|
||||
Rene Dudfield <renesd@gmail.com>
|
||||
Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
|
||||
Richard Jones <r1chardj0n3s@gmail.com>
|
||||
RobberPhex <robberphex@gmail.com>
|
||||
Robert Collins <rbtcollins@hp.com>
|
||||
Robert McGibbon <rmcgibbo@gmail.com>
|
||||
Robert T. McGibbon <rmcgibbo@gmail.com>
|
||||
robin elisha robinson <elisha.rob@gmail.com>
|
||||
Roey Berman <roey.berman@gmail.com>
|
||||
Rohan Jain <crodjer@gmail.com>
|
||||
Rohan Jain <crodjer@users.noreply.github.com>
|
||||
Rohan Jain <mail@rohanjain.in>
|
||||
Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
|
||||
Romuald Brunet <romuald@chivil.com>
|
||||
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
|
||||
Rory McCann <rory@technomancy.org>
|
||||
Ross Brattain <ross.b.brattain@intel.com>
|
||||
Roy Wellington Ⅳ <cactus_hugged@yahoo.com>
|
||||
Roy Wellington Ⅳ <roy@mybasis.com>
|
||||
Ryan Wooden <rygwdn@gmail.com>
|
||||
ryneeverett <ryneeverett@gmail.com>
|
||||
Sachi King <nakato@nakato.io>
|
||||
Salvatore Rinchiera <salvatore@rinchiera.com>
|
||||
Savio Jomton <sajo240519@gmail.com>
|
||||
schlamar <marc.schlaich@gmail.com>
|
||||
Scott Kitterman <sklist@kitterman.com>
|
||||
Sean <me@sean.taipei>
|
||||
seanj <seanj@xyke.com>
|
||||
Sebastian Jordan <sebastian.jordan.mail@googlemail.com>
|
||||
Sebastian Schaetz <sschaetz@butterflynetinc.com>
|
||||
Segev Finer <segev208@gmail.com>
|
||||
SeongSoo Cho <ppiyakk2@printf.kr>
|
||||
Sergey Vasilyev <nolar@nolar.info>
|
||||
Seth Woodworth <seth@sethish.com>
|
||||
Shlomi Fish <shlomif@shlomifish.org>
|
||||
Shovan Maity <shovan.maity@mayadata.io>
|
||||
Simeon Visser <svisser@users.noreply.github.com>
|
||||
Simon Cross <hodgestar@gmail.com>
|
||||
Simon Pichugin <simon.pichugin@gmail.com>
|
||||
sinoroc <sinoroc.code+git@gmail.com>
|
||||
Sorin Sbarnea <sorin.sbarnea@gmail.com>
|
||||
Stavros Korokithakis <stavros@korokithakis.net>
|
||||
Stefan Scherfke <stefan@sofa-rockers.org>
|
||||
Stephan Erb <github@stephanerb.eu>
|
||||
stepshal <nessento@openmailbox.org>
|
||||
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Dower <steve.dower@microsoft.com>
|
||||
Steve Kowalik <steven@wedontsleep.org>
|
||||
Steven Myint <git@stevenmyint.com>
|
||||
stonebig <stonebig34@gmail.com>
|
||||
Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
|
||||
Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
Stéphane Klein <contact@stephane-klein.info>
|
||||
Sumana Harihareswara <sh@changeset.nyc>
|
||||
Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
|
||||
Sviatoslav Sydorenko <wk@sydorenko.org.ua>
|
||||
Swat009 <swatantra.kumar8@gmail.com>
|
||||
Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>
|
||||
tbeswick <tbeswick@enphaseenergy.com>
|
||||
Thijs Triemstra <info@collab.nl>
|
||||
Thomas Fenzl <thomas.fenzl@gmail.com>
|
||||
Thomas Grainger <tagrain@gmail.com>
|
||||
Thomas Guettler <tguettler@tbz-pariv.de>
|
||||
Thomas Johansson <devnull@localhost>
|
||||
Thomas Kluyver <thomas@kluyver.me.uk>
|
||||
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
|
||||
Tim D. Smith <github@tim-smith.us>
|
||||
Tim Gates <tim.gates@iress.com>
|
||||
Tim Harder <radhermit@gmail.com>
|
||||
Tim Heap <tim@timheap.me>
|
||||
tim smith <github@tim-smith.us>
|
||||
tinruufu <tinruufu@gmail.com>
|
||||
Tom Forbes <tom@tomforb.es>
|
||||
Tom Freudenheim <tom.freudenheim@onepeloton.com>
|
||||
Tom V <tom@viner.tv>
|
||||
Tomas Orsava <torsava@redhat.com>
|
||||
Tomer Chachamu <tomer.chachamu@gmail.com>
|
||||
Tony Beswick <tonybeswick@orcon.net.nz>
|
||||
Tony Zhaocheng Tan <tony@tonytan.io>
|
||||
TonyBeswick <TonyBeswick@users.noreply.github.com>
|
||||
toonarmycaptain <toonarmycaptain@hotmail.com>
|
||||
Toshio Kuratomi <toshio@fedoraproject.org>
|
||||
Travis Swicegood <development@domain51.com>
|
||||
Tzu-ping Chung <uranusjr@gmail.com>
|
||||
Valentin Haenel <valentin.haenel@gmx.de>
|
||||
Victor Stinner <victor.stinner@gmail.com>
|
||||
victorvpaulo <victorvpaulo@gmail.com>
|
||||
Viktor Szépe <viktor@szepe.net>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Vinay Sajip <vinay_sajip@yahoo.co.uk>
|
||||
Vincent Philippon <sindaewoh@gmail.com>
|
||||
Vinicyus Macedo <7549205+vinicyusmacedo@users.noreply.github.com>
|
||||
Vitaly Babiy <vbabiy86@gmail.com>
|
||||
Vladimir Rutsky <rutsky@users.noreply.github.com>
|
||||
W. Trevor King <wking@drexel.edu>
|
||||
Wil Tan <wil@dready.org>
|
||||
Wilfred Hughes <me@wilfred.me.uk>
|
||||
William ML Leslie <william.leslie.ttg@gmail.com>
|
||||
William T Olson <trevor@heytrevor.com>
|
||||
Wilson Mo <wilsonfv@126.com>
|
||||
wim glenn <wim.glenn@gmail.com>
|
||||
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
|
||||
Xavier Fernandez <xav.fernandez@gmail.com>
|
||||
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
|
||||
xoviat <xoviat@users.noreply.github.com>
|
||||
xtreak <tir.karthi@gmail.com>
|
||||
YAMAMOTO Takashi <yamamoto@midokura.com>
|
||||
Yen Chi Hsuan <yan12125@gmail.com>
|
||||
Yeray Diaz Diaz <yeraydiazdiaz@gmail.com>
|
||||
Yoval P <yoval@gmx.com>
|
||||
Yu Jian <askingyj@gmail.com>
|
||||
Yuan Jing Vincent Yan <yyan82@bloomberg.net>
|
||||
Zearin <zearin@gonk.net>
|
||||
Zearin <Zearin@users.noreply.github.com>
|
||||
Zhiping Deng <kofreestyler@gmail.com>
|
||||
Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
Łukasz Langa <lukasz@langa.pl>
|
||||
Семён Марьясин <simeon@maryasin.name>
|
@ -0,0 +1 @@
|
||||
pip
|
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,256 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: appdirs
|
||||
Version: 1.4.3
|
||||
Summary: A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".
|
||||
Home-page: http://github.com/ActiveState/appdirs
|
||||
Author: Trent Mick
|
||||
Author-email: trentm@gmail.com
|
||||
Maintainer: Trent Mick; Sridhar Ratnakumar; Jeff Rouse
|
||||
Maintainer-email: trentm@gmail.com; github@srid.name; jr@its.to
|
||||
License: MIT
|
||||
Keywords: application directory log cache user
|
||||
Platform: UNKNOWN
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: MIT License
|
||||
Classifier: Operating System :: OS Independent
|
||||
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.2
|
||||
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 :: PyPy
|
||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||||
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
||||
|
||||
|
||||
.. image:: https://secure.travis-ci.org/ActiveState/appdirs.png
|
||||
:target: http://travis-ci.org/ActiveState/appdirs
|
||||
|
||||
the problem
|
||||
===========
|
||||
|
||||
What directory should your app use for storing user data? If running on Mac OS X, you
|
||||
should use::
|
||||
|
||||
~/Library/Application Support/<AppName>
|
||||
|
||||
If on Windows (at least English Win XP) that should be::
|
||||
|
||||
C:\Documents and Settings\<User>\Application Data\Local Settings\<AppAuthor>\<AppName>
|
||||
|
||||
or possibly::
|
||||
|
||||
C:\Documents and Settings\<User>\Application Data\<AppAuthor>\<AppName>
|
||||
|
||||
for `roaming profiles <http://bit.ly/9yl3b6>`_ but that is another story.
|
||||
|
||||
On Linux (and other Unices) the dir, according to the `XDG
|
||||
spec <http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>`_, is::
|
||||
|
||||
~/.local/share/<AppName>
|
||||
|
||||
|
||||
``appdirs`` to the rescue
|
||||
=========================
|
||||
|
||||
This kind of thing is what the ``appdirs`` module is for. ``appdirs`` will
|
||||
help you choose an appropriate:
|
||||
|
||||
- user data dir (``user_data_dir``)
|
||||
- user config dir (``user_config_dir``)
|
||||
- user cache dir (``user_cache_dir``)
|
||||
- site data dir (``site_data_dir``)
|
||||
- site config dir (``site_config_dir``)
|
||||
- user log dir (``user_log_dir``)
|
||||
|
||||
and also:
|
||||
|
||||
- is a single module so other Python packages can include their own private copy
|
||||
- is slightly opinionated on the directory names used. Look for "OPINION" in
|
||||
documentation and code for when an opinion is being applied.
|
||||
|
||||
|
||||
some example output
|
||||
===================
|
||||
|
||||
On Mac OS X::
|
||||
|
||||
>>> from appdirs import *
|
||||
>>> appname = "SuperApp"
|
||||
>>> appauthor = "Acme"
|
||||
>>> user_data_dir(appname, appauthor)
|
||||
'/Users/trentm/Library/Application Support/SuperApp'
|
||||
>>> site_data_dir(appname, appauthor)
|
||||
'/Library/Application Support/SuperApp'
|
||||
>>> user_cache_dir(appname, appauthor)
|
||||
'/Users/trentm/Library/Caches/SuperApp'
|
||||
>>> user_log_dir(appname, appauthor)
|
||||
'/Users/trentm/Library/Logs/SuperApp'
|
||||
|
||||
On Windows 7::
|
||||
|
||||
>>> from appdirs import *
|
||||
>>> appname = "SuperApp"
|
||||
>>> appauthor = "Acme"
|
||||
>>> user_data_dir(appname, appauthor)
|
||||
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp'
|
||||
>>> user_data_dir(appname, appauthor, roaming=True)
|
||||
'C:\\Users\\trentm\\AppData\\Roaming\\Acme\\SuperApp'
|
||||
>>> user_cache_dir(appname, appauthor)
|
||||
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Cache'
|
||||
>>> user_log_dir(appname, appauthor)
|
||||
'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Logs'
|
||||
|
||||
On Linux::
|
||||
|
||||
>>> from appdirs import *
|
||||
>>> appname = "SuperApp"
|
||||
>>> appauthor = "Acme"
|
||||
>>> user_data_dir(appname, appauthor)
|
||||
'/home/trentm/.local/share/SuperApp
|
||||
>>> site_data_dir(appname, appauthor)
|
||||
'/usr/local/share/SuperApp'
|
||||
>>> site_data_dir(appname, appauthor, multipath=True)
|
||||
'/usr/local/share/SuperApp:/usr/share/SuperApp'
|
||||
>>> user_cache_dir(appname, appauthor)
|
||||
'/home/trentm/.cache/SuperApp'
|
||||
>>> user_log_dir(appname, appauthor)
|
||||
'/home/trentm/.cache/SuperApp/log'
|
||||
>>> user_config_dir(appname)
|
||||
'/home/trentm/.config/SuperApp'
|
||||
>>> site_config_dir(appname)
|
||||
'/etc/xdg/SuperApp'
|
||||
>>> os.environ['XDG_CONFIG_DIRS'] = '/etc:/usr/local/etc'
|
||||
>>> site_config_dir(appname, multipath=True)
|
||||
'/etc/SuperApp:/usr/local/etc/SuperApp'
|
||||
|
||||
|
||||
``AppDirs`` for convenience
|
||||
===========================
|
||||
|
||||
::
|
||||
|
||||
>>> from appdirs import AppDirs
|
||||
>>> dirs = AppDirs("SuperApp", "Acme")
|
||||
>>> dirs.user_data_dir
|
||||
'/Users/trentm/Library/Application Support/SuperApp'
|
||||
>>> dirs.site_data_dir
|
||||
'/Library/Application Support/SuperApp'
|
||||
>>> dirs.user_cache_dir
|
||||
'/Users/trentm/Library/Caches/SuperApp'
|
||||
>>> dirs.user_log_dir
|
||||
'/Users/trentm/Library/Logs/SuperApp'
|
||||
|
||||
|
||||
|
||||
Per-version isolation
|
||||
=====================
|
||||
|
||||
If you have multiple versions of your app in use that you want to be
|
||||
able to run side-by-side, then you may want version-isolation for these
|
||||
dirs::
|
||||
|
||||
>>> from appdirs import AppDirs
|
||||
>>> dirs = AppDirs("SuperApp", "Acme", version="1.0")
|
||||
>>> dirs.user_data_dir
|
||||
'/Users/trentm/Library/Application Support/SuperApp/1.0'
|
||||
>>> dirs.site_data_dir
|
||||
'/Library/Application Support/SuperApp/1.0'
|
||||
>>> dirs.user_cache_dir
|
||||
'/Users/trentm/Library/Caches/SuperApp/1.0'
|
||||
>>> dirs.user_log_dir
|
||||
'/Users/trentm/Library/Logs/SuperApp/1.0'
|
||||
|
||||
|
||||
|
||||
appdirs Changelog
|
||||
=================
|
||||
|
||||
appdirs 1.4.3
|
||||
-------------
|
||||
- [PR #76] Python 3.6 invalid escape sequence deprecation fixes
|
||||
- Fix for Python 3.6 support
|
||||
|
||||
appdirs 1.4.2
|
||||
-------------
|
||||
- [PR #84] Allow installing without setuptools
|
||||
- [PR #86] Fix string delimiters in setup.py description
|
||||
- Add Python 3.6 support
|
||||
|
||||
appdirs 1.4.1
|
||||
-------------
|
||||
- [issue #38] Fix _winreg import on Windows Py3
|
||||
- [issue #55] Make appname optional
|
||||
|
||||
appdirs 1.4.0
|
||||
-------------
|
||||
- [PR #42] AppAuthor is now optional on Windows
|
||||
- [issue 41] Support Jython on Windows, Mac, and Unix-like platforms. Windows
|
||||
support requires `JNA <https://github.com/twall/jna>`_.
|
||||
- [PR #44] Fix incorrect behaviour of the site_config_dir method
|
||||
|
||||
appdirs 1.3.0
|
||||
-------------
|
||||
- [Unix, issue 16] Conform to XDG standard, instead of breaking it for
|
||||
everybody
|
||||
- [Unix] Removes gratuitous case mangling of the case, since \*nix-es are
|
||||
usually case sensitive, so mangling is not wise
|
||||
- [Unix] Fixes the utterly wrong behaviour in ``site_data_dir``, return result
|
||||
based on XDG_DATA_DIRS and make room for respecting the standard which
|
||||
specifies XDG_DATA_DIRS is a multiple-value variable
|
||||
- [Issue 6] Add ``*_config_dir`` which are distinct on nix-es, according to
|
||||
XDG specs; on Windows and Mac return the corresponding ``*_data_dir``
|
||||
|
||||
appdirs 1.2.0
|
||||
-------------
|
||||
|
||||
- [Unix] Put ``user_log_dir`` under the *cache* dir on Unix. Seems to be more
|
||||
typical.
|
||||
- [issue 9] Make ``unicode`` work on py3k.
|
||||
|
||||
appdirs 1.1.0
|
||||
-------------
|
||||
|
||||
- [issue 4] Add ``AppDirs.user_log_dir``.
|
||||
- [Unix, issue 2, issue 7] appdirs now conforms to `XDG base directory spec
|
||||
<http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>`_.
|
||||
- [Mac, issue 5] Fix ``site_data_dir()`` on Mac.
|
||||
- [Mac] Drop use of 'Carbon' module in favour of hardcoded paths; supports
|
||||
Python3 now.
|
||||
- [Windows] Append "Cache" to ``user_cache_dir`` on Windows by default. Use
|
||||
``opinion=False`` option to disable this.
|
||||
- Add ``appdirs.AppDirs`` convenience class. Usage:
|
||||
|
||||
>>> dirs = AppDirs("SuperApp", "Acme", version="1.0")
|
||||
>>> dirs.user_data_dir
|
||||
'/Users/trentm/Library/Application Support/SuperApp/1.0'
|
||||
|
||||
- [Windows] Cherry-pick Komodo's change to downgrade paths to the Windows short
|
||||
paths if there are high bit chars.
|
||||
- [Linux] Change default ``user_cache_dir()`` on Linux to be singular, e.g.
|
||||
"~/.superapp/cache".
|
||||
- [Windows] Add ``roaming`` option to ``user_data_dir()`` (for use on Windows only)
|
||||
and change the default ``user_data_dir`` behaviour to use a *non*-roaming
|
||||
profile dir (``CSIDL_LOCAL_APPDATA`` instead of ``CSIDL_APPDATA``). Why? Because
|
||||
a large roaming profile can cause login speed issues. The "only syncs on
|
||||
logout" behaviour can cause surprises in appdata info.
|
||||
|
||||
|
||||
appdirs 1.0.1 (never released)
|
||||
------------------------------
|
||||
|
||||
Started this changelog 27 July 2010. Before that this module originated in the
|
||||
`Komodo <http://www.activestate.com/komodo>`_ product as ``applib.py`` and then
|
||||
as `applib/location.py
|
||||
<http://github.com/ActiveState/applib/blob/master/applib/location.py>`_ (used by
|
||||
`PyPM <http://code.activestate.com/pypm/>`_ in `ActivePython
|
||||
<http://www.activestate.com/activepython>`_). This is basically a fork of
|
||||
applib.py 1.0.1 and applib/location.py 1.0.1.
|
||||
|
||||
|
||||
|
@ -0,0 +1,11 @@
|
||||
appdirs.py,sha256=MievUEuv3l_mQISH5SF0shDk_BNhHHzYiAPrT3ITN4I,24701
|
||||
appdirs-1.4.3.dist-info/AUTHORS.txt,sha256=RtqU9KfonVGhI48DAA4-yTOBUhBtQTjFhaDzHoyh7uU,21518
|
||||
appdirs-1.4.3.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090
|
||||
appdirs-1.4.3.dist-info/METADATA,sha256=CYv_MUT9ndNhXtkeyXnWjTM6jW_z6fsu8wqD6Yxfn0k,8831
|
||||
appdirs-1.4.3.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
||||
appdirs-1.4.3.dist-info/top_level.txt,sha256=nKncE8CUqZERJ6VuQWL4_bkunSPDNfn7KZqb4Tr5YEM,8
|
||||
appdirs-1.4.3.dist-info/RECORD,,
|
||||
appdirs-1.4.3.virtualenv,,
|
||||
appdirs-1.4.3.dist-info/__pycache__,,
|
||||
appdirs-1.4.3.dist-info/INSTALLER,,
|
||||
appdirs.cpython-38.pyc,,
|
@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py2-none-any
|
||||
Tag: py3-none-any
|
||||
|
@ -0,0 +1 @@
|
||||
appdirs
|
608
.tox/pep8/lib/python3.8/site-packages/appdirs.py
Normal file
608
.tox/pep8/lib/python3.8/site-packages/appdirs.py
Normal file
@ -0,0 +1,608 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2005-2010 ActiveState Software Inc.
|
||||
# Copyright (c) 2013 Eddy Petrișor
|
||||
|
||||
"""Utilities for determining application-specific dirs.
|
||||
|
||||
See <http://github.com/ActiveState/appdirs> for details and usage.
|
||||
"""
|
||||
# Dev Notes:
|
||||
# - MSDN on where to store app data files:
|
||||
# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120
|
||||
# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html
|
||||
# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||
|
||||
__version_info__ = (1, 4, 3)
|
||||
__version__ = '.'.join(map(str, __version_info__))
|
||||
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
PY3 = sys.version_info[0] == 3
|
||||
|
||||
if PY3:
|
||||
unicode = str
|
||||
|
||||
if sys.platform.startswith('java'):
|
||||
import platform
|
||||
os_name = platform.java_ver()[3][0]
|
||||
if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc.
|
||||
system = 'win32'
|
||||
elif os_name.startswith('Mac'): # "Mac OS X", etc.
|
||||
system = 'darwin'
|
||||
else: # "Linux", "SunOS", "FreeBSD", etc.
|
||||
# Setting this to "linux2" is not ideal, but only Windows or Mac
|
||||
# are actually checked for and the rest of the module expects
|
||||
# *sys.platform* style strings.
|
||||
system = 'linux2'
|
||||
else:
|
||||
system = sys.platform
|
||||
|
||||
|
||||
|
||||
def user_data_dir(appname=None, appauthor=None, version=None, roaming=False):
|
||||
r"""Return full path to the user-specific data dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"roaming" (boolean, default False) can be set True to use the Windows
|
||||
roaming appdata directory. That means that for users on a Windows
|
||||
network setup for roaming profiles, this user data will be
|
||||
sync'd on login. See
|
||||
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
|
||||
for a discussion of issues.
|
||||
|
||||
Typical user data directories are:
|
||||
Mac OS X: ~/Library/Application Support/<AppName>
|
||||
Unix: ~/.local/share/<AppName> # or in $XDG_DATA_HOME, if defined
|
||||
Win XP (not roaming): C:\Documents and Settings\<username>\Application Data\<AppAuthor>\<AppName>
|
||||
Win XP (roaming): C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>
|
||||
Win 7 (not roaming): C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>
|
||||
Win 7 (roaming): C:\Users\<username>\AppData\Roaming\<AppAuthor>\<AppName>
|
||||
|
||||
For Unix, we follow the XDG spec and support $XDG_DATA_HOME.
|
||||
That means, by default "~/.local/share/<AppName>".
|
||||
"""
|
||||
if system == "win32":
|
||||
if appauthor is None:
|
||||
appauthor = appname
|
||||
const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA"
|
||||
path = os.path.normpath(_get_win_folder(const))
|
||||
if appname:
|
||||
if appauthor is not False:
|
||||
path = os.path.join(path, appauthor, appname)
|
||||
else:
|
||||
path = os.path.join(path, appname)
|
||||
elif system == 'darwin':
|
||||
path = os.path.expanduser('~/Library/Application Support/')
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
else:
|
||||
path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share"))
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
def site_data_dir(appname=None, appauthor=None, version=None, multipath=False):
|
||||
r"""Return full path to the user-shared data dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"multipath" is an optional parameter only applicable to *nix
|
||||
which indicates that the entire list of data dirs should be
|
||||
returned. By default, the first item from XDG_DATA_DIRS is
|
||||
returned, or '/usr/local/share/<AppName>',
|
||||
if XDG_DATA_DIRS is not set
|
||||
|
||||
Typical site data directories are:
|
||||
Mac OS X: /Library/Application Support/<AppName>
|
||||
Unix: /usr/local/share/<AppName> or /usr/share/<AppName>
|
||||
Win XP: C:\Documents and Settings\All Users\Application Data\<AppAuthor>\<AppName>
|
||||
Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)
|
||||
Win 7: C:\ProgramData\<AppAuthor>\<AppName> # Hidden, but writeable on Win 7.
|
||||
|
||||
For Unix, this is using the $XDG_DATA_DIRS[0] default.
|
||||
|
||||
WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
|
||||
"""
|
||||
if system == "win32":
|
||||
if appauthor is None:
|
||||
appauthor = appname
|
||||
path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA"))
|
||||
if appname:
|
||||
if appauthor is not False:
|
||||
path = os.path.join(path, appauthor, appname)
|
||||
else:
|
||||
path = os.path.join(path, appname)
|
||||
elif system == 'darwin':
|
||||
path = os.path.expanduser('/Library/Application Support')
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
else:
|
||||
# XDG default for $XDG_DATA_DIRS
|
||||
# only first, if multipath is False
|
||||
path = os.getenv('XDG_DATA_DIRS',
|
||||
os.pathsep.join(['/usr/local/share', '/usr/share']))
|
||||
pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]
|
||||
if appname:
|
||||
if version:
|
||||
appname = os.path.join(appname, version)
|
||||
pathlist = [os.sep.join([x, appname]) for x in pathlist]
|
||||
|
||||
if multipath:
|
||||
path = os.pathsep.join(pathlist)
|
||||
else:
|
||||
path = pathlist[0]
|
||||
return path
|
||||
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
def user_config_dir(appname=None, appauthor=None, version=None, roaming=False):
|
||||
r"""Return full path to the user-specific config dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"roaming" (boolean, default False) can be set True to use the Windows
|
||||
roaming appdata directory. That means that for users on a Windows
|
||||
network setup for roaming profiles, this user data will be
|
||||
sync'd on login. See
|
||||
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
|
||||
for a discussion of issues.
|
||||
|
||||
Typical user config directories are:
|
||||
Mac OS X: same as user_data_dir
|
||||
Unix: ~/.config/<AppName> # or in $XDG_CONFIG_HOME, if defined
|
||||
Win *: same as user_data_dir
|
||||
|
||||
For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME.
|
||||
That means, by default "~/.config/<AppName>".
|
||||
"""
|
||||
if system in ["win32", "darwin"]:
|
||||
path = user_data_dir(appname, appauthor, None, roaming)
|
||||
else:
|
||||
path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config"))
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
def site_config_dir(appname=None, appauthor=None, version=None, multipath=False):
|
||||
r"""Return full path to the user-shared data dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"multipath" is an optional parameter only applicable to *nix
|
||||
which indicates that the entire list of config dirs should be
|
||||
returned. By default, the first item from XDG_CONFIG_DIRS is
|
||||
returned, or '/etc/xdg/<AppName>', if XDG_CONFIG_DIRS is not set
|
||||
|
||||
Typical site config directories are:
|
||||
Mac OS X: same as site_data_dir
|
||||
Unix: /etc/xdg/<AppName> or $XDG_CONFIG_DIRS[i]/<AppName> for each value in
|
||||
$XDG_CONFIG_DIRS
|
||||
Win *: same as site_data_dir
|
||||
Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.)
|
||||
|
||||
For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False
|
||||
|
||||
WARNING: Do not use this on Windows. See the Vista-Fail note above for why.
|
||||
"""
|
||||
if system in ["win32", "darwin"]:
|
||||
path = site_data_dir(appname, appauthor)
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
else:
|
||||
# XDG default for $XDG_CONFIG_DIRS
|
||||
# only first, if multipath is False
|
||||
path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg')
|
||||
pathlist = [os.path.expanduser(x.rstrip(os.sep)) for x in path.split(os.pathsep)]
|
||||
if appname:
|
||||
if version:
|
||||
appname = os.path.join(appname, version)
|
||||
pathlist = [os.sep.join([x, appname]) for x in pathlist]
|
||||
|
||||
if multipath:
|
||||
path = os.pathsep.join(pathlist)
|
||||
else:
|
||||
path = pathlist[0]
|
||||
return path
|
||||
|
||||
|
||||
def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True):
|
||||
r"""Return full path to the user-specific cache dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"opinion" (boolean) can be False to disable the appending of
|
||||
"Cache" to the base app data dir for Windows. See
|
||||
discussion below.
|
||||
|
||||
Typical user cache directories are:
|
||||
Mac OS X: ~/Library/Caches/<AppName>
|
||||
Unix: ~/.cache/<AppName> (XDG default)
|
||||
Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Cache
|
||||
Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Cache
|
||||
|
||||
On Windows the only suggestion in the MSDN docs is that local settings go in
|
||||
the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming
|
||||
app data dir (the default returned by `user_data_dir` above). Apps typically
|
||||
put cache data somewhere *under* the given dir here. Some examples:
|
||||
...\Mozilla\Firefox\Profiles\<ProfileName>\Cache
|
||||
...\Acme\SuperApp\Cache\1.0
|
||||
OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value.
|
||||
This can be disabled with the `opinion=False` option.
|
||||
"""
|
||||
if system == "win32":
|
||||
if appauthor is None:
|
||||
appauthor = appname
|
||||
path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA"))
|
||||
if appname:
|
||||
if appauthor is not False:
|
||||
path = os.path.join(path, appauthor, appname)
|
||||
else:
|
||||
path = os.path.join(path, appname)
|
||||
if opinion:
|
||||
path = os.path.join(path, "Cache")
|
||||
elif system == 'darwin':
|
||||
path = os.path.expanduser('~/Library/Caches')
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
else:
|
||||
path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache'))
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
def user_state_dir(appname=None, appauthor=None, version=None, roaming=False):
|
||||
r"""Return full path to the user-specific state dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"roaming" (boolean, default False) can be set True to use the Windows
|
||||
roaming appdata directory. That means that for users on a Windows
|
||||
network setup for roaming profiles, this user data will be
|
||||
sync'd on login. See
|
||||
<http://technet.microsoft.com/en-us/library/cc766489(WS.10).aspx>
|
||||
for a discussion of issues.
|
||||
|
||||
Typical user state directories are:
|
||||
Mac OS X: same as user_data_dir
|
||||
Unix: ~/.local/state/<AppName> # or in $XDG_STATE_HOME, if defined
|
||||
Win *: same as user_data_dir
|
||||
|
||||
For Unix, we follow this Debian proposal <https://wiki.debian.org/XDGBaseDirectorySpecification#state>
|
||||
to extend the XDG spec and support $XDG_STATE_HOME.
|
||||
|
||||
That means, by default "~/.local/state/<AppName>".
|
||||
"""
|
||||
if system in ["win32", "darwin"]:
|
||||
path = user_data_dir(appname, appauthor, None, roaming)
|
||||
else:
|
||||
path = os.getenv('XDG_STATE_HOME', os.path.expanduser("~/.local/state"))
|
||||
if appname:
|
||||
path = os.path.join(path, appname)
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
def user_log_dir(appname=None, appauthor=None, version=None, opinion=True):
|
||||
r"""Return full path to the user-specific log dir for this application.
|
||||
|
||||
"appname" is the name of application.
|
||||
If None, just the system directory is returned.
|
||||
"appauthor" (only used on Windows) is the name of the
|
||||
appauthor or distributing body for this application. Typically
|
||||
it is the owning company name. This falls back to appname. You may
|
||||
pass False to disable it.
|
||||
"version" is an optional version path element to append to the
|
||||
path. You might want to use this if you want multiple versions
|
||||
of your app to be able to run independently. If used, this
|
||||
would typically be "<major>.<minor>".
|
||||
Only applied when appname is present.
|
||||
"opinion" (boolean) can be False to disable the appending of
|
||||
"Logs" to the base app data dir for Windows, and "log" to the
|
||||
base cache dir for Unix. See discussion below.
|
||||
|
||||
Typical user log directories are:
|
||||
Mac OS X: ~/Library/Logs/<AppName>
|
||||
Unix: ~/.cache/<AppName>/log # or under $XDG_CACHE_HOME if defined
|
||||
Win XP: C:\Documents and Settings\<username>\Local Settings\Application Data\<AppAuthor>\<AppName>\Logs
|
||||
Vista: C:\Users\<username>\AppData\Local\<AppAuthor>\<AppName>\Logs
|
||||
|
||||
On Windows the only suggestion in the MSDN docs is that local settings
|
||||
go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in
|
||||
examples of what some windows apps use for a logs dir.)
|
||||
|
||||
OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA`
|
||||
value for Windows and appends "log" to the user cache dir for Unix.
|
||||
This can be disabled with the `opinion=False` option.
|
||||
"""
|
||||
if system == "darwin":
|
||||
path = os.path.join(
|
||||
os.path.expanduser('~/Library/Logs'),
|
||||
appname)
|
||||
elif system == "win32":
|
||||
path = user_data_dir(appname, appauthor, version)
|
||||
version = False
|
||||
if opinion:
|
||||
path = os.path.join(path, "Logs")
|
||||
else:
|
||||
path = user_cache_dir(appname, appauthor, version)
|
||||
version = False
|
||||
if opinion:
|
||||
path = os.path.join(path, "log")
|
||||
if appname and version:
|
||||
path = os.path.join(path, version)
|
||||
return path
|
||||
|
||||
|
||||
class AppDirs(object):
|
||||
"""Convenience wrapper for getting application dirs."""
|
||||
def __init__(self, appname=None, appauthor=None, version=None,
|
||||
roaming=False, multipath=False):
|
||||
self.appname = appname
|
||||
self.appauthor = appauthor
|
||||
self.version = version
|
||||
self.roaming = roaming
|
||||
self.multipath = multipath
|
||||
|
||||
@property
|
||||
def user_data_dir(self):
|
||||
return user_data_dir(self.appname, self.appauthor,
|
||||
version=self.version, roaming=self.roaming)
|
||||
|
||||
@property
|
||||
def site_data_dir(self):
|
||||
return site_data_dir(self.appname, self.appauthor,
|
||||
version=self.version, multipath=self.multipath)
|
||||
|
||||
@property
|
||||
def user_config_dir(self):
|
||||
return user_config_dir(self.appname, self.appauthor,
|
||||
version=self.version, roaming=self.roaming)
|
||||
|
||||
@property
|
||||
def site_config_dir(self):
|
||||
return site_config_dir(self.appname, self.appauthor,
|
||||
version=self.version, multipath=self.multipath)
|
||||
|
||||
@property
|
||||
def user_cache_dir(self):
|
||||
return user_cache_dir(self.appname, self.appauthor,
|
||||
version=self.version)
|
||||
|
||||
@property
|
||||
def user_state_dir(self):
|
||||
return user_state_dir(self.appname, self.appauthor,
|
||||
version=self.version)
|
||||
|
||||
@property
|
||||
def user_log_dir(self):
|
||||
return user_log_dir(self.appname, self.appauthor,
|
||||
version=self.version)
|
||||
|
||||
|
||||
#---- internal support stuff
|
||||
|
||||
def _get_win_folder_from_registry(csidl_name):
|
||||
"""This is a fallback technique at best. I'm not sure if using the
|
||||
registry for this guarantees us the correct answer for all CSIDL_*
|
||||
names.
|
||||
"""
|
||||
if PY3:
|
||||
import winreg as _winreg
|
||||
else:
|
||||
import _winreg
|
||||
|
||||
shell_folder_name = {
|
||||
"CSIDL_APPDATA": "AppData",
|
||||
"CSIDL_COMMON_APPDATA": "Common AppData",
|
||||
"CSIDL_LOCAL_APPDATA": "Local AppData",
|
||||
}[csidl_name]
|
||||
|
||||
key = _winreg.OpenKey(
|
||||
_winreg.HKEY_CURRENT_USER,
|
||||
r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
|
||||
)
|
||||
dir, type = _winreg.QueryValueEx(key, shell_folder_name)
|
||||
return dir
|
||||
|
||||
|
||||
def _get_win_folder_with_pywin32(csidl_name):
|
||||
from win32com.shell import shellcon, shell
|
||||
dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0)
|
||||
# Try to make this a unicode path because SHGetFolderPath does
|
||||
# not return unicode strings when there is unicode data in the
|
||||
# path.
|
||||
try:
|
||||
dir = unicode(dir)
|
||||
|
||||
# Downgrade to short path name if have highbit chars. See
|
||||
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
|
||||
has_high_char = False
|
||||
for c in dir:
|
||||
if ord(c) > 255:
|
||||
has_high_char = True
|
||||
break
|
||||
if has_high_char:
|
||||
try:
|
||||
import win32api
|
||||
dir = win32api.GetShortPathName(dir)
|
||||
except ImportError:
|
||||
pass
|
||||
except UnicodeError:
|
||||
pass
|
||||
return dir
|
||||
|
||||
|
||||
def _get_win_folder_with_ctypes(csidl_name):
|
||||
import ctypes
|
||||
|
||||
csidl_const = {
|
||||
"CSIDL_APPDATA": 26,
|
||||
"CSIDL_COMMON_APPDATA": 35,
|
||||
"CSIDL_LOCAL_APPDATA": 28,
|
||||
}[csidl_name]
|
||||
|
||||
buf = ctypes.create_unicode_buffer(1024)
|
||||
ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)
|
||||
|
||||
# Downgrade to short path name if have highbit chars. See
|
||||
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
|
||||
has_high_char = False
|
||||
for c in buf:
|
||||
if ord(c) > 255:
|
||||
has_high_char = True
|
||||
break
|
||||
if has_high_char:
|
||||
buf2 = ctypes.create_unicode_buffer(1024)
|
||||
if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024):
|
||||
buf = buf2
|
||||
|
||||
return buf.value
|
||||
|
||||
def _get_win_folder_with_jna(csidl_name):
|
||||
import array
|
||||
from com.sun import jna
|
||||
from com.sun.jna.platform import win32
|
||||
|
||||
buf_size = win32.WinDef.MAX_PATH * 2
|
||||
buf = array.zeros('c', buf_size)
|
||||
shell = win32.Shell32.INSTANCE
|
||||
shell.SHGetFolderPath(None, getattr(win32.ShlObj, csidl_name), None, win32.ShlObj.SHGFP_TYPE_CURRENT, buf)
|
||||
dir = jna.Native.toString(buf.tostring()).rstrip("\0")
|
||||
|
||||
# Downgrade to short path name if have highbit chars. See
|
||||
# <http://bugs.activestate.com/show_bug.cgi?id=85099>.
|
||||
has_high_char = False
|
||||
for c in dir:
|
||||
if ord(c) > 255:
|
||||
has_high_char = True
|
||||
break
|
||||
if has_high_char:
|
||||
buf = array.zeros('c', buf_size)
|
||||
kernel = win32.Kernel32.INSTANCE
|
||||
if kernel.GetShortPathName(dir, buf, buf_size):
|
||||
dir = jna.Native.toString(buf.tostring()).rstrip("\0")
|
||||
|
||||
return dir
|
||||
|
||||
if system == "win32":
|
||||
try:
|
||||
import win32com.shell
|
||||
_get_win_folder = _get_win_folder_with_pywin32
|
||||
except ImportError:
|
||||
try:
|
||||
from ctypes import windll
|
||||
_get_win_folder = _get_win_folder_with_ctypes
|
||||
except ImportError:
|
||||
try:
|
||||
import com.sun.jna
|
||||
_get_win_folder = _get_win_folder_with_jna
|
||||
except ImportError:
|
||||
_get_win_folder = _get_win_folder_from_registry
|
||||
|
||||
|
||||
#---- self test code
|
||||
|
||||
if __name__ == "__main__":
|
||||
appname = "MyApp"
|
||||
appauthor = "MyCompany"
|
||||
|
||||
props = ("user_data_dir",
|
||||
"user_config_dir",
|
||||
"user_cache_dir",
|
||||
"user_state_dir",
|
||||
"user_log_dir",
|
||||
"site_data_dir",
|
||||
"site_config_dir")
|
||||
|
||||
print("-- app dirs %s --" % __version__)
|
||||
|
||||
print("-- app dirs (with optional 'version')")
|
||||
dirs = AppDirs(appname, appauthor, version="1.0")
|
||||
for prop in props:
|
||||
print("%s: %s" % (prop, getattr(dirs, prop)))
|
||||
|
||||
print("\n-- app dirs (without optional 'version')")
|
||||
dirs = AppDirs(appname, appauthor)
|
||||
for prop in props:
|
||||
print("%s: %s" % (prop, getattr(dirs, prop)))
|
||||
|
||||
print("\n-- app dirs (without optional 'appauthor')")
|
||||
dirs = AppDirs(appname)
|
||||
for prop in props:
|
||||
print("%s: %s" % (prop, getattr(dirs, prop)))
|
||||
|
||||
print("\n-- app dirs (with disabled 'appauthor')")
|
||||
dirs = AppDirs(appname, appauthor=False)
|
||||
for prop in props:
|
||||
print("%s: %s" % (prop, getattr(dirs, prop)))
|
@ -0,0 +1,11 @@
|
||||
"""CacheControl import Interface.
|
||||
|
||||
Make it easy to import from cachecontrol without long namespaces.
|
||||
"""
|
||||
__author__ = "Eric Larson"
|
||||
__email__ = "eric@ionrock.org"
|
||||
__version__ = "0.12.6"
|
||||
|
||||
from .wrapper import CacheControl
|
||||
from .adapter import CacheControlAdapter
|
||||
from .controller import CacheController
|
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.
57
.tox/pep8/lib/python3.8/site-packages/cachecontrol/_cmd.py
Normal file
57
.tox/pep8/lib/python3.8/site-packages/cachecontrol/_cmd.py
Normal file
@ -0,0 +1,57 @@
|
||||
import logging
|
||||
|
||||
import requests
|
||||
|
||||
from cachecontrol.adapter import CacheControlAdapter
|
||||
from cachecontrol.cache import DictCache
|
||||
from cachecontrol.controller import logger
|
||||
|
||||
from argparse import ArgumentParser
|
||||
|
||||
|
||||
def setup_logging():
|
||||
logger.setLevel(logging.DEBUG)
|
||||
handler = logging.StreamHandler()
|
||||
logger.addHandler(handler)
|
||||
|
||||
|
||||
def get_session():
|
||||
adapter = CacheControlAdapter(
|
||||
DictCache(), cache_etags=True, serializer=None, heuristic=None
|
||||
)
|
||||
sess = requests.Session()
|
||||
sess.mount("http://", adapter)
|
||||
sess.mount("https://", adapter)
|
||||
|
||||
sess.cache_controller = adapter.controller
|
||||
return sess
|
||||
|
||||
|
||||
def get_args():
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument("url", help="The URL to try and cache")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main(args=None):
|
||||
args = get_args()
|
||||
sess = get_session()
|
||||
|
||||
# Make a request to get a response
|
||||
resp = sess.get(args.url)
|
||||
|
||||
# Turn on logging
|
||||
setup_logging()
|
||||
|
||||
# try setting the cache
|
||||
sess.cache_controller.cache_response(resp.request, resp.raw)
|
||||
|
||||
# Now try to get it
|
||||
if sess.cache_controller.cached_request(resp.request):
|
||||
print("Cached!")
|
||||
else:
|
||||
print("Not cached :(")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
133
.tox/pep8/lib/python3.8/site-packages/cachecontrol/adapter.py
Normal file
133
.tox/pep8/lib/python3.8/site-packages/cachecontrol/adapter.py
Normal file
@ -0,0 +1,133 @@
|
||||
import types
|
||||
import functools
|
||||
import zlib
|
||||
|
||||
from requests.adapters import HTTPAdapter
|
||||
|
||||
from .controller import CacheController
|
||||
from .cache import DictCache
|
||||
from .filewrapper import CallbackFileWrapper
|
||||
|
||||
|
||||
class CacheControlAdapter(HTTPAdapter):
|
||||
invalidating_methods = {"PUT", "DELETE"}
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
cache=None,
|
||||
cache_etags=True,
|
||||
controller_class=None,
|
||||
serializer=None,
|
||||
heuristic=None,
|
||||
cacheable_methods=None,
|
||||
*args,
|
||||
**kw
|
||||
):
|
||||
super(CacheControlAdapter, self).__init__(*args, **kw)
|
||||
self.cache = DictCache() if cache is None else cache
|
||||
self.heuristic = heuristic
|
||||
self.cacheable_methods = cacheable_methods or ("GET",)
|
||||
|
||||
controller_factory = controller_class or CacheController
|
||||
self.controller = controller_factory(
|
||||
self.cache, cache_etags=cache_etags, serializer=serializer
|
||||
)
|
||||
|
||||
def send(self, request, cacheable_methods=None, **kw):
|
||||
"""
|
||||
Send a request. Use the request information to see if it
|
||||
exists in the cache and cache the response if we need to and can.
|
||||
"""
|
||||
cacheable = cacheable_methods or self.cacheable_methods
|
||||
if request.method in cacheable:
|
||||
try:
|
||||
cached_response = self.controller.cached_request(request)
|
||||
except zlib.error:
|
||||
cached_response = None
|
||||
if cached_response:
|
||||
return self.build_response(request, cached_response, from_cache=True)
|
||||
|
||||
# check for etags and add headers if appropriate
|
||||
request.headers.update(self.controller.conditional_headers(request))
|
||||
|
||||
resp = super(CacheControlAdapter, self).send(request, **kw)
|
||||
|
||||
return resp
|
||||
|
||||
def build_response(
|
||||
self, request, response, from_cache=False, cacheable_methods=None
|
||||
):
|
||||
"""
|
||||
Build a response by making a request or using the cache.
|
||||
|
||||
This will end up calling send and returning a potentially
|
||||
cached response
|
||||
"""
|
||||
cacheable = cacheable_methods or self.cacheable_methods
|
||||
if not from_cache and request.method in cacheable:
|
||||
# Check for any heuristics that might update headers
|
||||
# before trying to cache.
|
||||
if self.heuristic:
|
||||
response = self.heuristic.apply(response)
|
||||
|
||||
# apply any expiration heuristics
|
||||
if response.status == 304:
|
||||
# We must have sent an ETag request. This could mean
|
||||
# that we've been expired already or that we simply
|
||||
# have an etag. In either case, we want to try and
|
||||
# update the cache if that is the case.
|
||||
cached_response = self.controller.update_cached_response(
|
||||
request, response
|
||||
)
|
||||
|
||||
if cached_response is not response:
|
||||
from_cache = True
|
||||
|
||||
# We are done with the server response, read a
|
||||
# possible response body (compliant servers will
|
||||
# not return one, but we cannot be 100% sure) and
|
||||
# release the connection back to the pool.
|
||||
response.read(decode_content=False)
|
||||
response.release_conn()
|
||||
|
||||
response = cached_response
|
||||
|
||||
# We always cache the 301 responses
|
||||
elif response.status == 301:
|
||||
self.controller.cache_response(request, response)
|
||||
else:
|
||||
# Wrap the response file with a wrapper that will cache the
|
||||
# response when the stream has been consumed.
|
||||
response._fp = CallbackFileWrapper(
|
||||
response._fp,
|
||||
functools.partial(
|
||||
self.controller.cache_response, request, response
|
||||
),
|
||||
)
|
||||
if response.chunked:
|
||||
super_update_chunk_length = response._update_chunk_length
|
||||
|
||||
def _update_chunk_length(self):
|
||||
super_update_chunk_length()
|
||||
if self.chunk_left == 0:
|
||||
self._fp._close()
|
||||
|
||||
response._update_chunk_length = types.MethodType(
|
||||
_update_chunk_length, response
|
||||
)
|
||||
|
||||
resp = super(CacheControlAdapter, self).build_response(request, response)
|
||||
|
||||
# See if we should invalidate the cache.
|
||||
if request.method in self.invalidating_methods and resp.ok:
|
||||
cache_url = self.controller.cache_url(request.url)
|
||||
self.cache.delete(cache_url)
|
||||
|
||||
# Give the request a from_cache attr to let people use it
|
||||
resp.from_cache = from_cache
|
||||
|
||||
return resp
|
||||
|
||||
def close(self):
|
||||
self.cache.close()
|
||||
super(CacheControlAdapter, self).close()
|
39
.tox/pep8/lib/python3.8/site-packages/cachecontrol/cache.py
Normal file
39
.tox/pep8/lib/python3.8/site-packages/cachecontrol/cache.py
Normal file
@ -0,0 +1,39 @@
|
||||
"""
|
||||
The cache object API for implementing caches. The default is a thread
|
||||
safe in-memory dictionary.
|
||||
"""
|
||||
from threading import Lock
|
||||
|
||||
|
||||
class BaseCache(object):
|
||||
|
||||
def get(self, key):
|
||||
raise NotImplementedError()
|
||||
|
||||
def set(self, key, value):
|
||||
raise NotImplementedError()
|
||||
|
||||
def delete(self, key):
|
||||
raise NotImplementedError()
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
|
||||
class DictCache(BaseCache):
|
||||
|
||||
def __init__(self, init_dict=None):
|
||||
self.lock = Lock()
|
||||
self.data = init_dict or {}
|
||||
|
||||
def get(self, key):
|
||||
return self.data.get(key, None)
|
||||
|
||||
def set(self, key, value):
|
||||
with self.lock:
|
||||
self.data.update({key: value})
|
||||
|
||||
def delete(self, key):
|
||||
with self.lock:
|
||||
if key in self.data:
|
||||
self.data.pop(key)
|
@ -0,0 +1,2 @@
|
||||
from .file_cache import FileCache # noqa
|
||||
from .redis_cache import RedisCache # noqa
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,146 @@
|
||||
import hashlib
|
||||
import os
|
||||
from textwrap import dedent
|
||||
|
||||
from ..cache import BaseCache
|
||||
from ..controller import CacheController
|
||||
|
||||
try:
|
||||
FileNotFoundError
|
||||
except NameError:
|
||||
# py2.X
|
||||
FileNotFoundError = (IOError, OSError)
|
||||
|
||||
|
||||
def _secure_open_write(filename, fmode):
|
||||
# We only want to write to this file, so open it in write only mode
|
||||
flags = os.O_WRONLY
|
||||
|
||||
# os.O_CREAT | os.O_EXCL will fail if the file already exists, so we only
|
||||
# will open *new* files.
|
||||
# We specify this because we want to ensure that the mode we pass is the
|
||||
# mode of the file.
|
||||
flags |= os.O_CREAT | os.O_EXCL
|
||||
|
||||
# Do not follow symlinks to prevent someone from making a symlink that
|
||||
# we follow and insecurely open a cache file.
|
||||
if hasattr(os, "O_NOFOLLOW"):
|
||||
flags |= os.O_NOFOLLOW
|
||||
|
||||
# On Windows we'll mark this file as binary
|
||||
if hasattr(os, "O_BINARY"):
|
||||
flags |= os.O_BINARY
|
||||
|
||||
# Before we open our file, we want to delete any existing file that is
|
||||
# there
|
||||
try:
|
||||
os.remove(filename)
|
||||
except (IOError, OSError):
|
||||
# The file must not exist already, so we can just skip ahead to opening
|
||||
pass
|
||||
|
||||
# Open our file, the use of os.O_CREAT | os.O_EXCL will ensure that if a
|
||||
# race condition happens between the os.remove and this line, that an
|
||||
# error will be raised. Because we utilize a lockfile this should only
|
||||
# happen if someone is attempting to attack us.
|
||||
fd = os.open(filename, flags, fmode)
|
||||
try:
|
||||
return os.fdopen(fd, "wb")
|
||||
|
||||
except:
|
||||
# An error occurred wrapping our FD in a file object
|
||||
os.close(fd)
|
||||
raise
|
||||
|
||||
|
||||
class FileCache(BaseCache):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
directory,
|
||||
forever=False,
|
||||
filemode=0o0600,
|
||||
dirmode=0o0700,
|
||||
use_dir_lock=None,
|
||||
lock_class=None,
|
||||
):
|
||||
|
||||
if use_dir_lock is not None and lock_class is not None:
|
||||
raise ValueError("Cannot use use_dir_lock and lock_class together")
|
||||
|
||||
try:
|
||||
from lockfile import LockFile
|
||||
from lockfile.mkdirlockfile import MkdirLockFile
|
||||
except ImportError:
|
||||
notice = dedent(
|
||||
"""
|
||||
NOTE: In order to use the FileCache you must have
|
||||
lockfile installed. You can install it via pip:
|
||||
pip install lockfile
|
||||
"""
|
||||
)
|
||||
raise ImportError(notice)
|
||||
|
||||
else:
|
||||
if use_dir_lock:
|
||||
lock_class = MkdirLockFile
|
||||
|
||||
elif lock_class is None:
|
||||
lock_class = LockFile
|
||||
|
||||
self.directory = directory
|
||||
self.forever = forever
|
||||
self.filemode = filemode
|
||||
self.dirmode = dirmode
|
||||
self.lock_class = lock_class
|
||||
|
||||
@staticmethod
|
||||
def encode(x):
|
||||
return hashlib.sha224(x.encode()).hexdigest()
|
||||
|
||||
def _fn(self, name):
|
||||
# NOTE: This method should not change as some may depend on it.
|
||||
# See: https://github.com/ionrock/cachecontrol/issues/63
|
||||
hashed = self.encode(name)
|
||||
parts = list(hashed[:5]) + [hashed]
|
||||
return os.path.join(self.directory, *parts)
|
||||
|
||||
def get(self, key):
|
||||
name = self._fn(key)
|
||||
try:
|
||||
with open(name, "rb") as fh:
|
||||
return fh.read()
|
||||
|
||||
except FileNotFoundError:
|
||||
return None
|
||||
|
||||
def set(self, key, value):
|
||||
name = self._fn(key)
|
||||
|
||||
# Make sure the directory exists
|
||||
try:
|
||||
os.makedirs(os.path.dirname(name), self.dirmode)
|
||||
except (IOError, OSError):
|
||||
pass
|
||||
|
||||
with self.lock_class(name) as lock:
|
||||
# Write our actual file
|
||||
with _secure_open_write(lock.path, self.filemode) as fh:
|
||||
fh.write(value)
|
||||
|
||||
def delete(self, key):
|
||||
name = self._fn(key)
|
||||
if not self.forever:
|
||||
try:
|
||||
os.remove(name)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def url_to_file_path(url, filecache):
|
||||
"""Return the file cache path based on the URL.
|
||||
|
||||
This does not ensure the file exists!
|
||||
"""
|
||||
key = CacheController.cache_url(url)
|
||||
return filecache._fn(key)
|
@ -0,0 +1,33 @@
|
||||
from __future__ import division
|
||||
|
||||
from datetime import datetime
|
||||
from cachecontrol.cache import BaseCache
|
||||
|
||||
|
||||
class RedisCache(BaseCache):
|
||||
|
||||
def __init__(self, conn):
|
||||
self.conn = conn
|
||||
|
||||
def get(self, key):
|
||||
return self.conn.get(key)
|
||||
|
||||
def set(self, key, value, expires=None):
|
||||
if not expires:
|
||||
self.conn.set(key, value)
|
||||
else:
|
||||
expires = expires - datetime.utcnow()
|
||||
self.conn.setex(key, int(expires.total_seconds()), value)
|
||||
|
||||
def delete(self, key):
|
||||
self.conn.delete(key)
|
||||
|
||||
def clear(self):
|
||||
"""Helper for clearing all the keys in a database. Use with
|
||||
caution!"""
|
||||
for key in self.conn.keys():
|
||||
self.conn.delete(key)
|
||||
|
||||
def close(self):
|
||||
"""Redis uses connection pooling, no need to close the connection."""
|
||||
pass
|
29
.tox/pep8/lib/python3.8/site-packages/cachecontrol/compat.py
Normal file
29
.tox/pep8/lib/python3.8/site-packages/cachecontrol/compat.py
Normal file
@ -0,0 +1,29 @@
|
||||
try:
|
||||
from urllib.parse import urljoin
|
||||
except ImportError:
|
||||
from urlparse import urljoin
|
||||
|
||||
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except ImportError:
|
||||
import pickle
|
||||
|
||||
|
||||
# Handle the case where the requests module has been patched to not have
|
||||
# urllib3 bundled as part of its source.
|
||||
try:
|
||||
from requests.packages.urllib3.response import HTTPResponse
|
||||
except ImportError:
|
||||
from urllib3.response import HTTPResponse
|
||||
|
||||
try:
|
||||
from requests.packages.urllib3.util import is_fp_closed
|
||||
except ImportError:
|
||||
from urllib3.util import is_fp_closed
|
||||
|
||||
# Replicate some six behaviour
|
||||
try:
|
||||
text_type = unicode
|
||||
except NameError:
|
||||
text_type = str
|
376
.tox/pep8/lib/python3.8/site-packages/cachecontrol/controller.py
Normal file
376
.tox/pep8/lib/python3.8/site-packages/cachecontrol/controller.py
Normal file
@ -0,0 +1,376 @@
|
||||
"""
|
||||
The httplib2 algorithms ported for use with requests.
|
||||
"""
|
||||
import logging
|
||||
import re
|
||||
import calendar
|
||||
import time
|
||||
from email.utils import parsedate_tz
|
||||
|
||||
from requests.structures import CaseInsensitiveDict
|
||||
|
||||
from .cache import DictCache
|
||||
from .serialize import Serializer
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?")
|
||||
|
||||
|
||||
def parse_uri(uri):
|
||||
"""Parses a URI using the regex given in Appendix B of RFC 3986.
|
||||
|
||||
(scheme, authority, path, query, fragment) = parse_uri(uri)
|
||||
"""
|
||||
groups = URI.match(uri).groups()
|
||||
return (groups[1], groups[3], groups[4], groups[6], groups[8])
|
||||
|
||||
|
||||
class CacheController(object):
|
||||
"""An interface to see if request should cached or not.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self, cache=None, cache_etags=True, serializer=None, status_codes=None
|
||||
):
|
||||
self.cache = DictCache() if cache is None else cache
|
||||
self.cache_etags = cache_etags
|
||||
self.serializer = serializer or Serializer()
|
||||
self.cacheable_status_codes = status_codes or (200, 203, 300, 301)
|
||||
|
||||
@classmethod
|
||||
def _urlnorm(cls, uri):
|
||||
"""Normalize the URL to create a safe key for the cache"""
|
||||
(scheme, authority, path, query, fragment) = parse_uri(uri)
|
||||
if not scheme or not authority:
|
||||
raise Exception("Only absolute URIs are allowed. uri = %s" % uri)
|
||||
|
||||
scheme = scheme.lower()
|
||||
authority = authority.lower()
|
||||
|
||||
if not path:
|
||||
path = "/"
|
||||
|
||||
# Could do syntax based normalization of the URI before
|
||||
# computing the digest. See Section 6.2.2 of Std 66.
|
||||
request_uri = query and "?".join([path, query]) or path
|
||||
defrag_uri = scheme + "://" + authority + request_uri
|
||||
|
||||
return defrag_uri
|
||||
|
||||
@classmethod
|
||||
def cache_url(cls, uri):
|
||||
return cls._urlnorm(uri)
|
||||
|
||||
def parse_cache_control(self, headers):
|
||||
known_directives = {
|
||||
# https://tools.ietf.org/html/rfc7234#section-5.2
|
||||
"max-age": (int, True),
|
||||
"max-stale": (int, False),
|
||||
"min-fresh": (int, True),
|
||||
"no-cache": (None, False),
|
||||
"no-store": (None, False),
|
||||
"no-transform": (None, False),
|
||||
"only-if-cached": (None, False),
|
||||
"must-revalidate": (None, False),
|
||||
"public": (None, False),
|
||||
"private": (None, False),
|
||||
"proxy-revalidate": (None, False),
|
||||
"s-maxage": (int, True),
|
||||
}
|
||||
|
||||
cc_headers = headers.get("cache-control", headers.get("Cache-Control", ""))
|
||||
|
||||
retval = {}
|
||||
|
||||
for cc_directive in cc_headers.split(","):
|
||||
if not cc_directive.strip():
|
||||
continue
|
||||
|
||||
parts = cc_directive.split("=", 1)
|
||||
directive = parts[0].strip()
|
||||
|
||||
try:
|
||||
typ, required = known_directives[directive]
|
||||
except KeyError:
|
||||
logger.debug("Ignoring unknown cache-control directive: %s", directive)
|
||||
continue
|
||||
|
||||
if not typ or not required:
|
||||
retval[directive] = None
|
||||
if typ:
|
||||
try:
|
||||
retval[directive] = typ(parts[1].strip())
|
||||
except IndexError:
|
||||
if required:
|
||||
logger.debug(
|
||||
"Missing value for cache-control " "directive: %s",
|
||||
directive,
|
||||
)
|
||||
except ValueError:
|
||||
logger.debug(
|
||||
"Invalid value for cache-control directive " "%s, must be %s",
|
||||
directive,
|
||||
typ.__name__,
|
||||
)
|
||||
|
||||
return retval
|
||||
|
||||
def cached_request(self, request):
|
||||
"""
|
||||
Return a cached response if it exists in the cache, otherwise
|
||||
return False.
|
||||
"""
|
||||
cache_url = self.cache_url(request.url)
|
||||
logger.debug('Looking up "%s" in the cache', cache_url)
|
||||
cc = self.parse_cache_control(request.headers)
|
||||
|
||||
# Bail out if the request insists on fresh data
|
||||
if "no-cache" in cc:
|
||||
logger.debug('Request header has "no-cache", cache bypassed')
|
||||
return False
|
||||
|
||||
if "max-age" in cc and cc["max-age"] == 0:
|
||||
logger.debug('Request header has "max_age" as 0, cache bypassed')
|
||||
return False
|
||||
|
||||
# Request allows serving from the cache, let's see if we find something
|
||||
cache_data = self.cache.get(cache_url)
|
||||
if cache_data is None:
|
||||
logger.debug("No cache entry available")
|
||||
return False
|
||||
|
||||
# Check whether it can be deserialized
|
||||
resp = self.serializer.loads(request, cache_data)
|
||||
if not resp:
|
||||
logger.warning("Cache entry deserialization failed, entry ignored")
|
||||
return False
|
||||
|
||||
# If we have a cached 301, return it immediately. We don't
|
||||
# need to test our response for other headers b/c it is
|
||||
# intrinsically "cacheable" as it is Permanent.
|
||||
# See:
|
||||
# https://tools.ietf.org/html/rfc7231#section-6.4.2
|
||||
#
|
||||
# Client can try to refresh the value by repeating the request
|
||||
# with cache busting headers as usual (ie no-cache).
|
||||
if resp.status == 301:
|
||||
msg = (
|
||||
'Returning cached "301 Moved Permanently" response '
|
||||
"(ignoring date and etag information)"
|
||||
)
|
||||
logger.debug(msg)
|
||||
return resp
|
||||
|
||||
headers = CaseInsensitiveDict(resp.headers)
|
||||
if not headers or "date" not in headers:
|
||||
if "etag" not in headers:
|
||||
# Without date or etag, the cached response can never be used
|
||||
# and should be deleted.
|
||||
logger.debug("Purging cached response: no date or etag")
|
||||
self.cache.delete(cache_url)
|
||||
logger.debug("Ignoring cached response: no date")
|
||||
return False
|
||||
|
||||
now = time.time()
|
||||
date = calendar.timegm(parsedate_tz(headers["date"]))
|
||||
current_age = max(0, now - date)
|
||||
logger.debug("Current age based on date: %i", current_age)
|
||||
|
||||
# TODO: There is an assumption that the result will be a
|
||||
# urllib3 response object. This may not be best since we
|
||||
# could probably avoid instantiating or constructing the
|
||||
# response until we know we need it.
|
||||
resp_cc = self.parse_cache_control(headers)
|
||||
|
||||
# determine freshness
|
||||
freshness_lifetime = 0
|
||||
|
||||
# Check the max-age pragma in the cache control header
|
||||
if "max-age" in resp_cc:
|
||||
freshness_lifetime = resp_cc["max-age"]
|
||||
logger.debug("Freshness lifetime from max-age: %i", freshness_lifetime)
|
||||
|
||||
# If there isn't a max-age, check for an expires header
|
||||
elif "expires" in headers:
|
||||
expires = parsedate_tz(headers["expires"])
|
||||
if expires is not None:
|
||||
expire_time = calendar.timegm(expires) - date
|
||||
freshness_lifetime = max(0, expire_time)
|
||||
logger.debug("Freshness lifetime from expires: %i", freshness_lifetime)
|
||||
|
||||
# Determine if we are setting freshness limit in the
|
||||
# request. Note, this overrides what was in the response.
|
||||
if "max-age" in cc:
|
||||
freshness_lifetime = cc["max-age"]
|
||||
logger.debug(
|
||||
"Freshness lifetime from request max-age: %i", freshness_lifetime
|
||||
)
|
||||
|
||||
if "min-fresh" in cc:
|
||||
min_fresh = cc["min-fresh"]
|
||||
# adjust our current age by our min fresh
|
||||
current_age += min_fresh
|
||||
logger.debug("Adjusted current age from min-fresh: %i", current_age)
|
||||
|
||||
# Return entry if it is fresh enough
|
||||
if freshness_lifetime > current_age:
|
||||
logger.debug('The response is "fresh", returning cached response')
|
||||
logger.debug("%i > %i", freshness_lifetime, current_age)
|
||||
return resp
|
||||
|
||||
# we're not fresh. If we don't have an Etag, clear it out
|
||||
if "etag" not in headers:
|
||||
logger.debug('The cached response is "stale" with no etag, purging')
|
||||
self.cache.delete(cache_url)
|
||||
|
||||
# return the original handler
|
||||
return False
|
||||
|
||||
def conditional_headers(self, request):
|
||||
cache_url = self.cache_url(request.url)
|
||||
resp = self.serializer.loads(request, self.cache.get(cache_url))
|
||||
new_headers = {}
|
||||
|
||||
if resp:
|
||||
headers = CaseInsensitiveDict(resp.headers)
|
||||
|
||||
if "etag" in headers:
|
||||
new_headers["If-None-Match"] = headers["ETag"]
|
||||
|
||||
if "last-modified" in headers:
|
||||
new_headers["If-Modified-Since"] = headers["Last-Modified"]
|
||||
|
||||
return new_headers
|
||||
|
||||
def cache_response(self, request, response, body=None, status_codes=None):
|
||||
"""
|
||||
Algorithm for caching requests.
|
||||
|
||||
This assumes a requests Response object.
|
||||
"""
|
||||
# From httplib2: Don't cache 206's since we aren't going to
|
||||
# handle byte range requests
|
||||
cacheable_status_codes = status_codes or self.cacheable_status_codes
|
||||
if response.status not in cacheable_status_codes:
|
||||
logger.debug(
|
||||
"Status code %s not in %s", response.status, cacheable_status_codes
|
||||
)
|
||||
return
|
||||
|
||||
response_headers = CaseInsensitiveDict(response.headers)
|
||||
|
||||
# If we've been given a body, our response has a Content-Length, that
|
||||
# Content-Length is valid then we can check to see if the body we've
|
||||
# been given matches the expected size, and if it doesn't we'll just
|
||||
# skip trying to cache it.
|
||||
if (
|
||||
body is not None
|
||||
and "content-length" in response_headers
|
||||
and response_headers["content-length"].isdigit()
|
||||
and int(response_headers["content-length"]) != len(body)
|
||||
):
|
||||
return
|
||||
|
||||
cc_req = self.parse_cache_control(request.headers)
|
||||
cc = self.parse_cache_control(response_headers)
|
||||
|
||||
cache_url = self.cache_url(request.url)
|
||||
logger.debug('Updating cache with response from "%s"', cache_url)
|
||||
|
||||
# Delete it from the cache if we happen to have it stored there
|
||||
no_store = False
|
||||
if "no-store" in cc:
|
||||
no_store = True
|
||||
logger.debug('Response header has "no-store"')
|
||||
if "no-store" in cc_req:
|
||||
no_store = True
|
||||
logger.debug('Request header has "no-store"')
|
||||
if no_store and self.cache.get(cache_url):
|
||||
logger.debug('Purging existing cache entry to honor "no-store"')
|
||||
self.cache.delete(cache_url)
|
||||
if no_store:
|
||||
return
|
||||
|
||||
# https://tools.ietf.org/html/rfc7234#section-4.1:
|
||||
# A Vary header field-value of "*" always fails to match.
|
||||
# Storing such a response leads to a deserialization warning
|
||||
# during cache lookup and is not allowed to ever be served,
|
||||
# so storing it can be avoided.
|
||||
if "*" in response_headers.get("vary", ""):
|
||||
logger.debug('Response header has "Vary: *"')
|
||||
return
|
||||
|
||||
# If we've been given an etag, then keep the response
|
||||
if self.cache_etags and "etag" in response_headers:
|
||||
logger.debug("Caching due to etag")
|
||||
self.cache.set(
|
||||
cache_url, self.serializer.dumps(request, response, body=body)
|
||||
)
|
||||
|
||||
# Add to the cache any 301s. We do this before looking that
|
||||
# the Date headers.
|
||||
elif response.status == 301:
|
||||
logger.debug("Caching permanant redirect")
|
||||
self.cache.set(cache_url, self.serializer.dumps(request, response))
|
||||
|
||||
# Add to the cache if the response headers demand it. If there
|
||||
# is no date header then we can't do anything about expiring
|
||||
# the cache.
|
||||
elif "date" in response_headers:
|
||||
# cache when there is a max-age > 0
|
||||
if "max-age" in cc and cc["max-age"] > 0:
|
||||
logger.debug("Caching b/c date exists and max-age > 0")
|
||||
self.cache.set(
|
||||
cache_url, self.serializer.dumps(request, response, body=body)
|
||||
)
|
||||
|
||||
# If the request can expire, it means we should cache it
|
||||
# in the meantime.
|
||||
elif "expires" in response_headers:
|
||||
if response_headers["expires"]:
|
||||
logger.debug("Caching b/c of expires header")
|
||||
self.cache.set(
|
||||
cache_url, self.serializer.dumps(request, response, body=body)
|
||||
)
|
||||
|
||||
def update_cached_response(self, request, response):
|
||||
"""On a 304 we will get a new set of headers that we want to
|
||||
update our cached value with, assuming we have one.
|
||||
|
||||
This should only ever be called when we've sent an ETag and
|
||||
gotten a 304 as the response.
|
||||
"""
|
||||
cache_url = self.cache_url(request.url)
|
||||
|
||||
cached_response = self.serializer.loads(request, self.cache.get(cache_url))
|
||||
|
||||
if not cached_response:
|
||||
# we didn't have a cached response
|
||||
return response
|
||||
|
||||
# Lets update our headers with the headers from the new request:
|
||||
# http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-26#section-4.1
|
||||
#
|
||||
# The server isn't supposed to send headers that would make
|
||||
# the cached body invalid. But... just in case, we'll be sure
|
||||
# to strip out ones we know that might be problmatic due to
|
||||
# typical assumptions.
|
||||
excluded_headers = ["content-length"]
|
||||
|
||||
cached_response.headers.update(
|
||||
dict(
|
||||
(k, v)
|
||||
for k, v in response.headers.items()
|
||||
if k.lower() not in excluded_headers
|
||||
)
|
||||
)
|
||||
|
||||
# we want a 200 b/c we have content via the cache
|
||||
cached_response.status = 200
|
||||
|
||||
# update our cache
|
||||
self.cache.set(cache_url, self.serializer.dumps(request, cached_response))
|
||||
|
||||
return cached_response
|
@ -0,0 +1,80 @@
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
class CallbackFileWrapper(object):
|
||||
"""
|
||||
Small wrapper around a fp object which will tee everything read into a
|
||||
buffer, and when that file is closed it will execute a callback with the
|
||||
contents of that buffer.
|
||||
|
||||
All attributes are proxied to the underlying file object.
|
||||
|
||||
This class uses members with a double underscore (__) leading prefix so as
|
||||
not to accidentally shadow an attribute.
|
||||
"""
|
||||
|
||||
def __init__(self, fp, callback):
|
||||
self.__buf = BytesIO()
|
||||
self.__fp = fp
|
||||
self.__callback = callback
|
||||
|
||||
def __getattr__(self, name):
|
||||
# The vaguaries of garbage collection means that self.__fp is
|
||||
# not always set. By using __getattribute__ and the private
|
||||
# name[0] allows looking up the attribute value and raising an
|
||||
# AttributeError when it doesn't exist. This stop thigns from
|
||||
# infinitely recursing calls to getattr in the case where
|
||||
# self.__fp hasn't been set.
|
||||
#
|
||||
# [0] https://docs.python.org/2/reference/expressions.html#atom-identifiers
|
||||
fp = self.__getattribute__("_CallbackFileWrapper__fp")
|
||||
return getattr(fp, name)
|
||||
|
||||
def __is_fp_closed(self):
|
||||
try:
|
||||
return self.__fp.fp is None
|
||||
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
try:
|
||||
return self.__fp.closed
|
||||
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
# We just don't cache it then.
|
||||
# TODO: Add some logging here...
|
||||
return False
|
||||
|
||||
def _close(self):
|
||||
if self.__callback:
|
||||
self.__callback(self.__buf.getvalue())
|
||||
|
||||
# We assign this to None here, because otherwise we can get into
|
||||
# really tricky problems where the CPython interpreter dead locks
|
||||
# because the callback is holding a reference to something which
|
||||
# has a __del__ method. Setting this to None breaks the cycle
|
||||
# and allows the garbage collector to do it's thing normally.
|
||||
self.__callback = None
|
||||
|
||||
def read(self, amt=None):
|
||||
data = self.__fp.read(amt)
|
||||
self.__buf.write(data)
|
||||
if self.__is_fp_closed():
|
||||
self._close()
|
||||
|
||||
return data
|
||||
|
||||
def _safe_read(self, amt):
|
||||
data = self.__fp._safe_read(amt)
|
||||
if amt == 2 and data == b"\r\n":
|
||||
# urllib executes this read to toss the CRLF at the end
|
||||
# of the chunk.
|
||||
return data
|
||||
|
||||
self.__buf.write(data)
|
||||
if self.__is_fp_closed():
|
||||
self._close()
|
||||
|
||||
return data
|
135
.tox/pep8/lib/python3.8/site-packages/cachecontrol/heuristics.py
Normal file
135
.tox/pep8/lib/python3.8/site-packages/cachecontrol/heuristics.py
Normal file
@ -0,0 +1,135 @@
|
||||
import calendar
|
||||
import time
|
||||
|
||||
from email.utils import formatdate, parsedate, parsedate_tz
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT"
|
||||
|
||||
|
||||
def expire_after(delta, date=None):
|
||||
date = date or datetime.utcnow()
|
||||
return date + delta
|
||||
|
||||
|
||||
def datetime_to_header(dt):
|
||||
return formatdate(calendar.timegm(dt.timetuple()))
|
||||
|
||||
|
||||
class BaseHeuristic(object):
|
||||
|
||||
def warning(self, response):
|
||||
"""
|
||||
Return a valid 1xx warning header value describing the cache
|
||||
adjustments.
|
||||
|
||||
The response is provided too allow warnings like 113
|
||||
http://tools.ietf.org/html/rfc7234#section-5.5.4 where we need
|
||||
to explicitly say response is over 24 hours old.
|
||||
"""
|
||||
return '110 - "Response is Stale"'
|
||||
|
||||
def update_headers(self, response):
|
||||
"""Update the response headers with any new headers.
|
||||
|
||||
NOTE: This SHOULD always include some Warning header to
|
||||
signify that the response was cached by the client, not
|
||||
by way of the provided headers.
|
||||
"""
|
||||
return {}
|
||||
|
||||
def apply(self, response):
|
||||
updated_headers = self.update_headers(response)
|
||||
|
||||
if updated_headers:
|
||||
response.headers.update(updated_headers)
|
||||
warning_header_value = self.warning(response)
|
||||
if warning_header_value is not None:
|
||||
response.headers.update({"Warning": warning_header_value})
|
||||
|
||||
return response
|
||||
|
||||
|
||||
class OneDayCache(BaseHeuristic):
|
||||
"""
|
||||
Cache the response by providing an expires 1 day in the
|
||||
future.
|
||||
"""
|
||||
|
||||
def update_headers(self, response):
|
||||
headers = {}
|
||||
|
||||
if "expires" not in response.headers:
|
||||
date = parsedate(response.headers["date"])
|
||||
expires = expire_after(timedelta(days=1), date=datetime(*date[:6]))
|
||||
headers["expires"] = datetime_to_header(expires)
|
||||
headers["cache-control"] = "public"
|
||||
return headers
|
||||
|
||||
|
||||
class ExpiresAfter(BaseHeuristic):
|
||||
"""
|
||||
Cache **all** requests for a defined time period.
|
||||
"""
|
||||
|
||||
def __init__(self, **kw):
|
||||
self.delta = timedelta(**kw)
|
||||
|
||||
def update_headers(self, response):
|
||||
expires = expire_after(self.delta)
|
||||
return {"expires": datetime_to_header(expires), "cache-control": "public"}
|
||||
|
||||
def warning(self, response):
|
||||
tmpl = "110 - Automatically cached for %s. Response might be stale"
|
||||
return tmpl % self.delta
|
||||
|
||||
|
||||
class LastModified(BaseHeuristic):
|
||||
"""
|
||||
If there is no Expires header already, fall back on Last-Modified
|
||||
using the heuristic from
|
||||
http://tools.ietf.org/html/rfc7234#section-4.2.2
|
||||
to calculate a reasonable value.
|
||||
|
||||
Firefox also does something like this per
|
||||
https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching_FAQ
|
||||
http://lxr.mozilla.org/mozilla-release/source/netwerk/protocol/http/nsHttpResponseHead.cpp#397
|
||||
Unlike mozilla we limit this to 24-hr.
|
||||
"""
|
||||
cacheable_by_default_statuses = {
|
||||
200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501
|
||||
}
|
||||
|
||||
def update_headers(self, resp):
|
||||
headers = resp.headers
|
||||
|
||||
if "expires" in headers:
|
||||
return {}
|
||||
|
||||
if "cache-control" in headers and headers["cache-control"] != "public":
|
||||
return {}
|
||||
|
||||
if resp.status not in self.cacheable_by_default_statuses:
|
||||
return {}
|
||||
|
||||
if "date" not in headers or "last-modified" not in headers:
|
||||
return {}
|
||||
|
||||
date = calendar.timegm(parsedate_tz(headers["date"]))
|
||||
last_modified = parsedate(headers["last-modified"])
|
||||
if date is None or last_modified is None:
|
||||
return {}
|
||||
|
||||
now = time.time()
|
||||
current_age = max(0, now - date)
|
||||
delta = date - calendar.timegm(last_modified)
|
||||
freshness_lifetime = max(0, min(delta / 10, 24 * 3600))
|
||||
if freshness_lifetime <= current_age:
|
||||
return {}
|
||||
|
||||
expires = date + freshness_lifetime
|
||||
return {"expires": time.strftime(TIME_FMT, time.gmtime(expires))}
|
||||
|
||||
def warning(self, resp):
|
||||
return None
|
188
.tox/pep8/lib/python3.8/site-packages/cachecontrol/serialize.py
Normal file
188
.tox/pep8/lib/python3.8/site-packages/cachecontrol/serialize.py
Normal file
@ -0,0 +1,188 @@
|
||||
import base64
|
||||
import io
|
||||
import json
|
||||
import zlib
|
||||
|
||||
import msgpack
|
||||
from requests.structures import CaseInsensitiveDict
|
||||
|
||||
from .compat import HTTPResponse, pickle, text_type
|
||||
|
||||
|
||||
def _b64_decode_bytes(b):
|
||||
return base64.b64decode(b.encode("ascii"))
|
||||
|
||||
|
||||
def _b64_decode_str(s):
|
||||
return _b64_decode_bytes(s).decode("utf8")
|
||||
|
||||
|
||||
class Serializer(object):
|
||||
|
||||
def dumps(self, request, response, body=None):
|
||||
response_headers = CaseInsensitiveDict(response.headers)
|
||||
|
||||
if body is None:
|
||||
body = response.read(decode_content=False)
|
||||
|
||||
# NOTE: 99% sure this is dead code. I'm only leaving it
|
||||
# here b/c I don't have a test yet to prove
|
||||
# it. Basically, before using
|
||||
# `cachecontrol.filewrapper.CallbackFileWrapper`,
|
||||
# this made an effort to reset the file handle. The
|
||||
# `CallbackFileWrapper` short circuits this code by
|
||||
# setting the body as the content is consumed, the
|
||||
# result being a `body` argument is *always* passed
|
||||
# into cache_response, and in turn,
|
||||
# `Serializer.dump`.
|
||||
response._fp = io.BytesIO(body)
|
||||
|
||||
# NOTE: This is all a bit weird, but it's really important that on
|
||||
# Python 2.x these objects are unicode and not str, even when
|
||||
# they contain only ascii. The problem here is that msgpack
|
||||
# understands the difference between unicode and bytes and we
|
||||
# have it set to differentiate between them, however Python 2
|
||||
# doesn't know the difference. Forcing these to unicode will be
|
||||
# enough to have msgpack know the difference.
|
||||
data = {
|
||||
u"response": {
|
||||
u"body": body,
|
||||
u"headers": dict(
|
||||
(text_type(k), text_type(v)) for k, v in response.headers.items()
|
||||
),
|
||||
u"status": response.status,
|
||||
u"version": response.version,
|
||||
u"reason": text_type(response.reason),
|
||||
u"strict": response.strict,
|
||||
u"decode_content": response.decode_content,
|
||||
}
|
||||
}
|
||||
|
||||
# Construct our vary headers
|
||||
data[u"vary"] = {}
|
||||
if u"vary" in response_headers:
|
||||
varied_headers = response_headers[u"vary"].split(",")
|
||||
for header in varied_headers:
|
||||
header = text_type(header).strip()
|
||||
header_value = request.headers.get(header, None)
|
||||
if header_value is not None:
|
||||
header_value = text_type(header_value)
|
||||
data[u"vary"][header] = header_value
|
||||
|
||||
return b",".join([b"cc=4", msgpack.dumps(data, use_bin_type=True)])
|
||||
|
||||
def loads(self, request, data):
|
||||
# Short circuit if we've been given an empty set of data
|
||||
if not data:
|
||||
return
|
||||
|
||||
# Determine what version of the serializer the data was serialized
|
||||
# with
|
||||
try:
|
||||
ver, data = data.split(b",", 1)
|
||||
except ValueError:
|
||||
ver = b"cc=0"
|
||||
|
||||
# Make sure that our "ver" is actually a version and isn't a false
|
||||
# positive from a , being in the data stream.
|
||||
if ver[:3] != b"cc=":
|
||||
data = ver + data
|
||||
ver = b"cc=0"
|
||||
|
||||
# Get the version number out of the cc=N
|
||||
ver = ver.split(b"=", 1)[-1].decode("ascii")
|
||||
|
||||
# Dispatch to the actual load method for the given version
|
||||
try:
|
||||
return getattr(self, "_loads_v{}".format(ver))(request, data)
|
||||
|
||||
except AttributeError:
|
||||
# This is a version we don't have a loads function for, so we'll
|
||||
# just treat it as a miss and return None
|
||||
return
|
||||
|
||||
def prepare_response(self, request, cached):
|
||||
"""Verify our vary headers match and construct a real urllib3
|
||||
HTTPResponse object.
|
||||
"""
|
||||
# Special case the '*' Vary value as it means we cannot actually
|
||||
# determine if the cached response is suitable for this request.
|
||||
# This case is also handled in the controller code when creating
|
||||
# a cache entry, but is left here for backwards compatibility.
|
||||
if "*" in cached.get("vary", {}):
|
||||
return
|
||||
|
||||
# Ensure that the Vary headers for the cached response match our
|
||||
# request
|
||||
for header, value in cached.get("vary", {}).items():
|
||||
if request.headers.get(header, None) != value:
|
||||
return
|
||||
|
||||
body_raw = cached["response"].pop("body")
|
||||
|
||||
headers = CaseInsensitiveDict(data=cached["response"]["headers"])
|
||||
if headers.get("transfer-encoding", "") == "chunked":
|
||||
headers.pop("transfer-encoding")
|
||||
|
||||
cached["response"]["headers"] = headers
|
||||
|
||||
try:
|
||||
body = io.BytesIO(body_raw)
|
||||
except TypeError:
|
||||
# This can happen if cachecontrol serialized to v1 format (pickle)
|
||||
# using Python 2. A Python 2 str(byte string) will be unpickled as
|
||||
# a Python 3 str (unicode string), which will cause the above to
|
||||
# fail with:
|
||||
#
|
||||
# TypeError: 'str' does not support the buffer interface
|
||||
body = io.BytesIO(body_raw.encode("utf8"))
|
||||
|
||||
return HTTPResponse(body=body, preload_content=False, **cached["response"])
|
||||
|
||||
def _loads_v0(self, request, data):
|
||||
# The original legacy cache data. This doesn't contain enough
|
||||
# information to construct everything we need, so we'll treat this as
|
||||
# a miss.
|
||||
return
|
||||
|
||||
def _loads_v1(self, request, data):
|
||||
try:
|
||||
cached = pickle.loads(data)
|
||||
except ValueError:
|
||||
return
|
||||
|
||||
return self.prepare_response(request, cached)
|
||||
|
||||
def _loads_v2(self, request, data):
|
||||
try:
|
||||
cached = json.loads(zlib.decompress(data).decode("utf8"))
|
||||
except (ValueError, zlib.error):
|
||||
return
|
||||
|
||||
# We need to decode the items that we've base64 encoded
|
||||
cached["response"]["body"] = _b64_decode_bytes(cached["response"]["body"])
|
||||
cached["response"]["headers"] = dict(
|
||||
(_b64_decode_str(k), _b64_decode_str(v))
|
||||
for k, v in cached["response"]["headers"].items()
|
||||
)
|
||||
cached["response"]["reason"] = _b64_decode_str(cached["response"]["reason"])
|
||||
cached["vary"] = dict(
|
||||
(_b64_decode_str(k), _b64_decode_str(v) if v is not None else v)
|
||||
for k, v in cached["vary"].items()
|
||||
)
|
||||
|
||||
return self.prepare_response(request, cached)
|
||||
|
||||
def _loads_v3(self, request, data):
|
||||
# Due to Python 2 encoding issues, it's impossible to know for sure
|
||||
# exactly how to load v3 entries, thus we'll treat these as a miss so
|
||||
# that they get rewritten out as v4 entries.
|
||||
return
|
||||
|
||||
def _loads_v4(self, request, data):
|
||||
try:
|
||||
cached = msgpack.loads(data, raw=False)
|
||||
except ValueError:
|
||||
return
|
||||
|
||||
return self.prepare_response(request, cached)
|
@ -0,0 +1,29 @@
|
||||
from .adapter import CacheControlAdapter
|
||||
from .cache import DictCache
|
||||
|
||||
|
||||
def CacheControl(
|
||||
sess,
|
||||
cache=None,
|
||||
cache_etags=True,
|
||||
serializer=None,
|
||||
heuristic=None,
|
||||
controller_class=None,
|
||||
adapter_class=None,
|
||||
cacheable_methods=None,
|
||||
):
|
||||
|
||||
cache = DictCache() if cache is None else cache
|
||||
adapter_class = adapter_class or CacheControlAdapter
|
||||
adapter = adapter_class(
|
||||
cache,
|
||||
cache_etags=cache_etags,
|
||||
serializer=serializer,
|
||||
heuristic=heuristic,
|
||||
controller_class=controller_class,
|
||||
cacheable_methods=cacheable_methods,
|
||||
)
|
||||
sess.mount("http://", adapter)
|
||||
sess.mount("https://", adapter)
|
||||
|
||||
return sess
|
@ -0,0 +1,562 @@
|
||||
A_Rog <adam.thomas.rogerson@gmail.com>
|
||||
Aakanksha Agrawal <11389424+rasponic@users.noreply.github.com>
|
||||
Abhinav Sagar <40603139+abhinavsagar@users.noreply.github.com>
|
||||
ABHYUDAY PRATAP SINGH <abhyudaypratap@outlook.com>
|
||||
abs51295 <aagams68@gmail.com>
|
||||
AceGentile <ventogrigio83@gmail.com>
|
||||
Adam Chainz <adam@adamj.eu>
|
||||
Adam Tse <adam.tse@me.com>
|
||||
Adam Tse <atse@users.noreply.github.com>
|
||||
Adam Wentz <awentz@theonion.com>
|
||||
admin <admin@admins-MacBook-Pro.local>
|
||||
Adrien Morison <adrien.morison@gmail.com>
|
||||
ahayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Ahilya <ahilya16009@iiitd.ac.in>
|
||||
AinsworthK <yat626@yahoo.com.hk>
|
||||
Akash Srivastava <akashsrivastava4927@gmail.com>
|
||||
Alan Yee <alyee@ucsd.edu>
|
||||
Albert Tugushev <albert@tugushev.ru>
|
||||
Albert-Guan <albert.guan94@gmail.com>
|
||||
albertg <albert.guan94@gmail.com>
|
||||
Aleks Bunin <github@compuix.com>
|
||||
Alethea Flowers <magicalgirl@google.com>
|
||||
Alex Gaynor <alex.gaynor@gmail.com>
|
||||
Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
Alex Loosley <a.loosley@reply.de>
|
||||
Alex Morega <alex@grep.ro>
|
||||
Alex Stachowiak <alexander@computer.org>
|
||||
Alexander Shtyrov <rawzausho@gmail.com>
|
||||
Alexandre Conrad <alexandre.conrad@gmail.com>
|
||||
Alexey Popravka <a.popravka@smartweb.com.ua>
|
||||
Alexey Popravka <alexey.popravka@horsedevel.com>
|
||||
Alli <alzeih@users.noreply.github.com>
|
||||
Ami Fischman <ami@fischman.org>
|
||||
Ananya Maiti <ananyoevo@gmail.com>
|
||||
Anatoly Techtonik <techtonik@gmail.com>
|
||||
Anders Kaseorg <andersk@mit.edu>
|
||||
Andreas Lutro <anlutro@gmail.com>
|
||||
Andrei Geacar <andrei.geacar@gmail.com>
|
||||
Andrew Gaul <andrew@gaul.org>
|
||||
Andrey Bulgakov <mail@andreiko.ru>
|
||||
Andrés Delfino <34587441+andresdelfino@users.noreply.github.com>
|
||||
Andrés Delfino <adelfino@gmail.com>
|
||||
Andy Freeland <andy.freeland@redjack.com>
|
||||
Andy Freeland <andy@andyfreeland.net>
|
||||
Andy Kluger <AndydeCleyre@users.noreply.github.com>
|
||||
Ani Hayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Aniruddha Basak <codewithaniruddha@gmail.com>
|
||||
Anish Tambe <anish.tambe@yahoo.in>
|
||||
Anrs Hu <anrs@douban.com>
|
||||
Anthony Sottile <asottile@umich.edu>
|
||||
Antoine Musso <hashar@free.fr>
|
||||
Anton Ovchinnikov <revolver112@gmail.com>
|
||||
Anton Patrushev <apatrushev@gmail.com>
|
||||
Antonio Alvarado Hernandez <tnotstar@gmail.com>
|
||||
Antony Lee <anntzer.lee@gmail.com>
|
||||
Antti Kaihola <akaihol+github@ambitone.com>
|
||||
Anubhav Patel <anubhavp28@gmail.com>
|
||||
Anuj Godase <godaseanuj@gmail.com>
|
||||
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
|
||||
AraHaan <seandhunt_7@yahoo.com>
|
||||
Arindam Choudhury <arindam@live.com>
|
||||
Armin Ronacher <armin.ronacher@active-4.com>
|
||||
Artem <duketemon@users.noreply.github.com>
|
||||
Ashley Manton <ajd.manton@googlemail.com>
|
||||
Ashwin Ramaswami <aramaswamis@gmail.com>
|
||||
atse <atse@users.noreply.github.com>
|
||||
Atsushi Odagiri <aodagx@gmail.com>
|
||||
Avner Cohen <israbirding@gmail.com>
|
||||
Baptiste Mispelon <bmispelon@gmail.com>
|
||||
Barney Gale <barney.gale@gmail.com>
|
||||
barneygale <barney.gale@gmail.com>
|
||||
Bartek Ogryczak <b.ogryczak@gmail.com>
|
||||
Bastian Venthur <mail@venthur.de>
|
||||
Ben Darnell <ben@bendarnell.com>
|
||||
Ben Hoyt <benhoyt@gmail.com>
|
||||
Ben Rosser <rosser.bjr@gmail.com>
|
||||
Bence Nagy <bence@underyx.me>
|
||||
Benjamin Peterson <benjamin@python.org>
|
||||
Benjamin VanEvery <ben@simondata.com>
|
||||
Benoit Pierre <benoit.pierre@gmail.com>
|
||||
Berker Peksag <berker.peksag@gmail.com>
|
||||
Bernardo B. Marques <bernardo.fire@gmail.com>
|
||||
Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||||
Bertil Hatt <bertil.hatt@farfetch.com>
|
||||
Bogdan Opanchuk <bogdan@opanchuk.net>
|
||||
BorisZZZ <BorisZZZ@users.noreply.github.com>
|
||||
Brad Erickson <eosrei@gmail.com>
|
||||
Bradley Ayers <bradley.ayers@gmail.com>
|
||||
Brandon L. Reiss <brandon@damyata.co>
|
||||
Brandt Bucher <brandtbucher@gmail.com>
|
||||
Brett Randall <javabrett@gmail.com>
|
||||
Brian Cristante <33549821+brcrista@users.noreply.github.com>
|
||||
Brian Cristante <brcrista@microsoft.com>
|
||||
Brian Rosner <brosner@gmail.com>
|
||||
BrownTruck <BrownTruck@users.noreply.github.com>
|
||||
Bruno Oliveira <nicoddemus@gmail.com>
|
||||
Bruno Renié <brutasse@gmail.com>
|
||||
Bstrdsmkr <bstrdsmkr@gmail.com>
|
||||
Buck Golemon <buck@yelp.com>
|
||||
burrows <burrows@preveil.com>
|
||||
Bussonnier Matthias <bussonniermatthias@gmail.com>
|
||||
c22 <c22@users.noreply.github.com>
|
||||
Caleb Martinez <accounts@calebmartinez.com>
|
||||
Calvin Smith <eukaryote@users.noreply.github.com>
|
||||
Carl Meyer <carl@oddbird.net>
|
||||
Carlos Liam <carlos@aarzee.me>
|
||||
Carol Willing <carolcode@willingconsulting.com>
|
||||
Carter Thayer <carterwthayer@gmail.com>
|
||||
Cass <cass.petrus@gmail.com>
|
||||
Chandrasekhar Atina <chandu.atina@gmail.com>
|
||||
Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
Chih-Hsuan Yen <yen@chyen.cc>
|
||||
Chris Brinker <chris.brinker@gmail.com>
|
||||
Chris Hunt <chrahunt@gmail.com>
|
||||
Chris Jerdonek <chris.jerdonek@gmail.com>
|
||||
Chris McDonough <chrism@plope.com>
|
||||
Chris Wolfe <chriswwolfe@gmail.com>
|
||||
Christian Heimes <christian@python.org>
|
||||
Christian Oudard <christian.oudard@gmail.com>
|
||||
Christopher Hunt <chrahunt@gmail.com>
|
||||
Christopher Snyder <cnsnyder@users.noreply.github.com>
|
||||
Clark Boylan <clark.boylan@gmail.com>
|
||||
Clay McClure <clay@daemons.net>
|
||||
Cody <Purring@users.noreply.github.com>
|
||||
Cody Soyland <codysoyland@gmail.com>
|
||||
Colin Watson <cjwatson@debian.org>
|
||||
Connor Osborn <cdosborn@email.arizona.edu>
|
||||
Cooper Lees <me@cooperlees.com>
|
||||
Cooper Ry Lees <me@cooperlees.com>
|
||||
Cory Benfield <lukasaoz@gmail.com>
|
||||
Cory Wright <corywright@gmail.com>
|
||||
Craig Kerstiens <craig.kerstiens@gmail.com>
|
||||
Cristian Sorinel <cristian.sorinel@gmail.com>
|
||||
Curtis Doty <Curtis@GreenKey.net>
|
||||
cytolentino <ctolentino8@bloomberg.net>
|
||||
Damian Quiroga <qdamian@gmail.com>
|
||||
Dan Black <dyspop@gmail.com>
|
||||
Dan Savilonis <djs@n-cube.org>
|
||||
Dan Sully <daniel-github@electricrain.com>
|
||||
daniel <mcdonaldd@unimelb.edu.au>
|
||||
Daniel Collins <accounts@dac.io>
|
||||
Daniel Hahler <git@thequod.de>
|
||||
Daniel Holth <dholth@fastmail.fm>
|
||||
Daniel Jost <torpedojost@gmail.com>
|
||||
Daniel Shaulov <daniel.shaulov@gmail.com>
|
||||
Daniele Esposti <expobrain@users.noreply.github.com>
|
||||
Daniele Procida <daniele@vurt.org>
|
||||
Danny Hermes <daniel.j.hermes@gmail.com>
|
||||
Dav Clark <davclark@gmail.com>
|
||||
Dave Abrahams <dave@boostpro.com>
|
||||
Dave Jones <dave@waveform.org.uk>
|
||||
David Aguilar <davvid@gmail.com>
|
||||
David Black <db@d1b.org>
|
||||
David Bordeynik <david.bordeynik@gmail.com>
|
||||
David Bordeynik <david@zebra-med.com>
|
||||
David Caro <david@dcaro.es>
|
||||
David Evans <d@drhevans.com>
|
||||
David Linke <dr.david.linke@gmail.com>
|
||||
David Pursehouse <david.pursehouse@gmail.com>
|
||||
David Tucker <david@tucker.name>
|
||||
David Wales <daviewales@gmail.com>
|
||||
Davidovich <david.genest@gmail.com>
|
||||
derwolfe <chriswwolfe@gmail.com>
|
||||
Desetude <harry@desetude.com>
|
||||
Diego Caraballo <diegocaraballo84@gmail.com>
|
||||
DiegoCaraballo <diegocaraballo84@gmail.com>
|
||||
Dmitry Gladkov <dmitry.gladkov@gmail.com>
|
||||
Domen Kožar <domen@dev.si>
|
||||
Donald Stufft <donald@stufft.io>
|
||||
Dongweiming <dongweiming@admaster.com.cn>
|
||||
Douglas Thor <dougthor42@users.noreply.github.com>
|
||||
DrFeathers <WilliamGeorgeBurgess@gmail.com>
|
||||
Dustin Ingram <di@di.codes>
|
||||
Dwayne Bailey <dwayne@translate.org.za>
|
||||
Ed Morley <501702+edmorley@users.noreply.github.com>
|
||||
Ed Morley <emorley@mozilla.com>
|
||||
Eitan Adler <lists@eitanadler.com>
|
||||
ekristina <panacejja@gmail.com>
|
||||
elainechan <elaine.chan@outlook.com>
|
||||
Eli Schwartz <eschwartz93@gmail.com>
|
||||
Eli Schwartz <eschwartz@archlinux.org>
|
||||
Emil Burzo <contact@emilburzo.com>
|
||||
Emil Styrke <emil.styrke@gmail.com>
|
||||
Endoh Takanao <djmchl@gmail.com>
|
||||
enoch <lanxenet@gmail.com>
|
||||
Erdinc Mutlu <erdinc_mutlu@yahoo.com>
|
||||
Eric Gillingham <Gillingham@bikezen.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com>
|
||||
Eric Hopper <hopper@omnifarious.org>
|
||||
Erik M. Bray <embray@stsci.edu>
|
||||
Erik Rose <erik@mozilla.com>
|
||||
Ernest W Durbin III <ewdurbin@gmail.com>
|
||||
Ernest W. Durbin III <ewdurbin@gmail.com>
|
||||
Erwin Janssen <erwinjanssen@outlook.com>
|
||||
Eugene Vereshchagin <evvers@gmail.com>
|
||||
everdimension <everdimension@gmail.com>
|
||||
Felix Yan <felixonmars@archlinux.org>
|
||||
fiber-space <fiber-space@users.noreply.github.com>
|
||||
Filip Kokosiński <filip.kokosinski@gmail.com>
|
||||
Florian Briand <ownerfrance+github@hotmail.com>
|
||||
Florian Rathgeber <florian.rathgeber@gmail.com>
|
||||
Francesco <f.guerrieri@gmail.com>
|
||||
Francesco Montesano <franz.bergesund@gmail.com>
|
||||
Frost Ming <mianghong@gmail.com>
|
||||
Gabriel Curio <g.curio@gmail.com>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Garry Polley <garrympolley@gmail.com>
|
||||
gdanielson <graeme.danielson@gmail.com>
|
||||
Geoffrey Lehée <geoffrey@lehee.name>
|
||||
Geoffrey Sneddon <me@gsnedders.com>
|
||||
George Song <george@55minutes.com>
|
||||
Georgi Valkov <georgi.t.valkov@gmail.com>
|
||||
Giftlin Rajaiah <giftlin.rgn@gmail.com>
|
||||
gizmoguy1 <gizmoguy1@gmail.com>
|
||||
gkdoc <40815324+gkdoc@users.noreply.github.com>
|
||||
Gopinath M <31352222+mgopi1990@users.noreply.github.com>
|
||||
GOTO Hayato <3532528+gh640@users.noreply.github.com>
|
||||
gpiks <gaurav.pikale@gmail.com>
|
||||
Guilherme Espada <porcariadagata@gmail.com>
|
||||
Guy Rozendorn <guy@rzn.co.il>
|
||||
gzpan123 <gzpan123@gmail.com>
|
||||
Hanjun Kim <hallazzang@gmail.com>
|
||||
Hari Charan <hcharan997@gmail.com>
|
||||
Harsh Vardhan <harsh59v@gmail.com>
|
||||
Herbert Pfennig <herbert@albinen.com>
|
||||
Hsiaoming Yang <lepture@me.com>
|
||||
Hugo <hugovk@users.noreply.github.com>
|
||||
Hugo Lopes Tavares <hltbra@gmail.com>
|
||||
Hugo van Kemenade <hugovk@users.noreply.github.com>
|
||||
hugovk <hugovk@users.noreply.github.com>
|
||||
Hynek Schlawack <hs@ox.cx>
|
||||
Ian Bicking <ianb@colorstudy.com>
|
||||
Ian Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Lee <IanLee1521@gmail.com>
|
||||
Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Wienand <ian@wienand.org>
|
||||
Ian Wienand <iwienand@redhat.com>
|
||||
Igor Kuzmitshov <kuzmiigo@gmail.com>
|
||||
Igor Sobreira <igor@igorsobreira.com>
|
||||
Ilya Baryshev <baryshev@gmail.com>
|
||||
INADA Naoki <songofacandy@gmail.com>
|
||||
Ionel Cristian Mărieș <contact@ionelmc.ro>
|
||||
Ionel Maries Cristian <ionel.mc@gmail.com>
|
||||
Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Jacob Kim <me@thejacobkim.com>
|
||||
jakirkham <jakirkham@gmail.com>
|
||||
Jakub Stasiak <kuba.stasiak@gmail.com>
|
||||
Jakub Vysoky <jakub@borka.cz>
|
||||
Jakub Wilk <jwilk@jwilk.net>
|
||||
James Cleveland <jamescleveland@gmail.com>
|
||||
James Cleveland <radiosilence@users.noreply.github.com>
|
||||
James Firth <hello@james-firth.com>
|
||||
James Polley <jp@jamezpolley.com>
|
||||
Jan Pokorný <jpokorny@redhat.com>
|
||||
Jannis Leidel <jannis@leidel.info>
|
||||
jarondl <me@jarondl.net>
|
||||
Jason R. Coombs <jaraco@jaraco.com>
|
||||
Jay Graves <jay@skabber.com>
|
||||
Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
|
||||
Jeff Barber <jbarber@computer.org>
|
||||
Jeff Dairiki <dairiki@dairiki.org>
|
||||
Jelmer Vernooij <jelmer@jelmer.uk>
|
||||
jenix21 <devfrog@gmail.com>
|
||||
Jeremy Stanley <fungi@yuggoth.org>
|
||||
Jeremy Zafran <jzafran@users.noreply.github.com>
|
||||
Jiashuo Li <jiasli@microsoft.com>
|
||||
Jim Garrison <jim@garrison.cc>
|
||||
Jivan Amara <Development@JivanAmara.net>
|
||||
John Paton <j.paton@catawiki.nl>
|
||||
John-Scott Atlakson <john.scott.atlakson@gmail.com>
|
||||
johnthagen <johnthagen@gmail.com>
|
||||
johnthagen <johnthagen@users.noreply.github.com>
|
||||
Jon Banafato <jon@jonafato.com>
|
||||
Jon Dufresne <jon.dufresne@gmail.com>
|
||||
Jon Parise <jon@indelible.org>
|
||||
Jonas Nockert <jonasnockert@gmail.com>
|
||||
Jonathan Herbert <foohyfooh@gmail.com>
|
||||
Joost Molenaar <j.j.molenaar@gmail.com>
|
||||
Jorge Niedbalski <niedbalski@gmail.com>
|
||||
Joseph Long <jdl@fastmail.fm>
|
||||
Josh Bronson <jabronson@gmail.com>
|
||||
Josh Hansen <josh@skwash.net>
|
||||
Josh Schneier <josh.schneier@gmail.com>
|
||||
Juanjo Bazán <jjbazan@gmail.com>
|
||||
Julian Berman <Julian@GrayVines.com>
|
||||
Julian Gethmann <julian.gethmann@kit.edu>
|
||||
Julien Demoor <julien@jdemoor.com>
|
||||
jwg4 <jack.grahl@yahoo.co.uk>
|
||||
Jyrki Pulliainen <jyrki@spotify.com>
|
||||
Kai Chen <kaichen120@gmail.com>
|
||||
Kamal Bin Mustafa <kamal@smach.net>
|
||||
kaustav haldar <hi@kaustav.me>
|
||||
keanemind <keanemind@gmail.com>
|
||||
Keith Maxwell <keith.maxwell@gmail.com>
|
||||
Kelsey Hightower <kelsey.hightower@gmail.com>
|
||||
Kenneth Belitzky <kenny@belitzky.com>
|
||||
Kenneth Reitz <me@kennethreitz.com>
|
||||
Kenneth Reitz <me@kennethreitz.org>
|
||||
Kevin Burke <kev@inburke.com>
|
||||
Kevin Carter <kevin.carter@rackspace.com>
|
||||
Kevin Frommelt <kevin.frommelt@webfilings.com>
|
||||
Kevin R Patterson <kevin.r.patterson@intel.com>
|
||||
Kexuan Sun <me@kianasun.com>
|
||||
Kit Randel <kit@nocturne.net.nz>
|
||||
kpinc <kop@meme.com>
|
||||
Krishna Oza <krishoza15sep@gmail.com>
|
||||
Kumar McMillan <kumar.mcmillan@gmail.com>
|
||||
Kyle Persohn <kyle.persohn@gmail.com>
|
||||
lakshmanaram <lakshmanaram.n@gmail.com>
|
||||
Laszlo Kiss-Kollar <kiss.kollar.laszlo@gmail.com>
|
||||
Laurent Bristiel <laurent@bristiel.com>
|
||||
Laurie Opperman <laurie@sitesee.com.au>
|
||||
Leon Sasson <leonsassonha@gmail.com>
|
||||
Lev Givon <lev@columbia.edu>
|
||||
Lincoln de Sousa <lincoln@comum.org>
|
||||
Lipis <lipiridis@gmail.com>
|
||||
Loren Carvalho <lcarvalho@linkedin.com>
|
||||
Lucas Cimon <lucas.cimon@gmail.com>
|
||||
Ludovic Gasc <gmludo@gmail.com>
|
||||
Luke Macken <lmacken@redhat.com>
|
||||
Luo Jiebin <luo.jiebin@qq.com>
|
||||
luojiebin <luojiebin@users.noreply.github.com>
|
||||
luz.paz <luzpaz@users.noreply.github.com>
|
||||
László Kiss Kollár <lkisskollar@bloomberg.net>
|
||||
László Kiss Kollár <lkollar@users.noreply.github.com>
|
||||
Marc Abramowitz <marc@marc-abramowitz.com>
|
||||
Marc Tamlyn <marc.tamlyn@gmail.com>
|
||||
Marcus Smith <qwcode@gmail.com>
|
||||
Mariatta <Mariatta@users.noreply.github.com>
|
||||
Mark Kohler <mark.kohler@proteinsimple.com>
|
||||
Mark Williams <markrwilliams@gmail.com>
|
||||
Mark Williams <mrw@enotuniq.org>
|
||||
Markus Hametner <fin+github@xbhd.org>
|
||||
Masaki <mk5986@nyu.edu>
|
||||
Masklinn <bitbucket.org@masklinn.net>
|
||||
Matej Stuchlik <mstuchli@redhat.com>
|
||||
Mathew Jennings <mjennings@foursquare.com>
|
||||
Mathieu Bridon <bochecha@daitauha.fr>
|
||||
Matt Good <matt@matt-good.net>
|
||||
Matt Maker <trip@monstro.us>
|
||||
Matt Robenolt <matt@ydekproductions.com>
|
||||
matthew <matthew@trumbell.net>
|
||||
Matthew Einhorn <moiein2000@gmail.com>
|
||||
Matthew Gilliard <matthew.gilliard@gmail.com>
|
||||
Matthew Iversen <teh.ivo@gmail.com>
|
||||
Matthew Trumbell <matthew@thirdstonepartners.com>
|
||||
Matthew Willson <matthew@swiftkey.com>
|
||||
Matthias Bussonnier <bussonniermatthias@gmail.com>
|
||||
mattip <matti.picus@gmail.com>
|
||||
Maxim Kurnikov <maxim.kurnikov@gmail.com>
|
||||
Maxime Rouyrre <rouyrre+git@gmail.com>
|
||||
mayeut <mayeut@users.noreply.github.com>
|
||||
mbaluna <44498973+mbaluna@users.noreply.github.com>
|
||||
mdebi <17590103+mdebi@users.noreply.github.com>
|
||||
memoselyk <memoselyk@gmail.com>
|
||||
Michael <michael-k@users.noreply.github.com>
|
||||
Michael Aquilina <michaelaquilina@gmail.com>
|
||||
Michael E. Karpeles <michael.karpeles@gmail.com>
|
||||
Michael Klich <michal@michalklich.com>
|
||||
Michael Williamson <mike@zwobble.org>
|
||||
michaelpacer <michaelpacer@gmail.com>
|
||||
Mickaël Schoentgen <mschoentgen@nuxeo.com>
|
||||
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
|
||||
Mihir Singh <git.service@mihirsingh.com>
|
||||
Mike <mikeh@blur.com>
|
||||
Mike Hendricks <mikeh@blur.com>
|
||||
Min RK <benjaminrk@gmail.com>
|
||||
MinRK <benjaminrk@gmail.com>
|
||||
Miro Hrončok <miro@hroncok.cz>
|
||||
Monica Baluna <mbaluna@bloomberg.net>
|
||||
montefra <franz.bergesund@gmail.com>
|
||||
Monty Taylor <mordred@inaugust.com>
|
||||
Nate Coraor <nate@bx.psu.edu>
|
||||
Nathaniel J. Smith <njs@pobox.com>
|
||||
Nehal J Wani <nehaljw.kkd1@gmail.com>
|
||||
Neil Botelho <neil.botelho321@gmail.com>
|
||||
Nick Coghlan <ncoghlan@gmail.com>
|
||||
Nick Stenning <nick@whiteink.com>
|
||||
Nick Timkovich <prometheus235@gmail.com>
|
||||
Nicolas Bock <nicolasbock@gmail.com>
|
||||
Nikhil Benesch <nikhil.benesch@gmail.com>
|
||||
Nitesh Sharma <nbsharma@outlook.com>
|
||||
Nowell Strite <nowell@strite.org>
|
||||
NtaleGrey <Shadikntale@gmail.com>
|
||||
nvdv <modestdev@gmail.com>
|
||||
Ofekmeister <ofekmeister@gmail.com>
|
||||
ofrinevo <ofrine@gmail.com>
|
||||
Oliver Jeeves <oliver.jeeves@ocado.com>
|
||||
Oliver Tonnhofer <olt@bogosoft.com>
|
||||
Olivier Girardot <ssaboum@gmail.com>
|
||||
Olivier Grisel <olivier.grisel@ensta.org>
|
||||
Ollie Rutherfurd <orutherfurd@gmail.com>
|
||||
OMOTO Kenji <k-omoto@m3.com>
|
||||
Omry Yadan <omry@fb.com>
|
||||
Oren Held <orenhe@il.ibm.com>
|
||||
Oscar Benjamin <oscar.j.benjamin@gmail.com>
|
||||
Oz N Tiram <oz.tiram@gmail.com>
|
||||
Pachwenko <32424503+Pachwenko@users.noreply.github.com>
|
||||
Patrick Dubroy <pdubroy@gmail.com>
|
||||
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
|
||||
Patrick Lawson <pl@foursquare.com>
|
||||
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
|
||||
Patrik Kopkan <pkopkan@redhat.com>
|
||||
Paul Kehrer <paul.l.kehrer@gmail.com>
|
||||
Paul Moore <p.f.moore@gmail.com>
|
||||
Paul Nasrat <pnasrat@gmail.com>
|
||||
Paul Oswald <pauloswald@gmail.com>
|
||||
Paul van der Linden <mail@paultjuh.org>
|
||||
Paulus Schoutsen <paulus@paulusschoutsen.nl>
|
||||
Pavithra Eswaramoorthy <33131404+QueenCoffee@users.noreply.github.com>
|
||||
Pawel Jasinski <pawel.jasinski@gmail.com>
|
||||
Pekka Klärck <peke@iki.fi>
|
||||
Peter Lisák <peter.lisak@showmax.com>
|
||||
Peter Waller <peter.waller@gmail.com>
|
||||
petr-tik <petr-tik@users.noreply.github.com>
|
||||
Phaneendra Chiruvella <hi@pcx.io>
|
||||
Phil Freo <phil@philfreo.com>
|
||||
Phil Pennock <phil@pennock-tech.com>
|
||||
Phil Whelan <phil123@gmail.com>
|
||||
Philip Jägenstedt <philip@foolip.org>
|
||||
Philip Molloy <pamolloy@users.noreply.github.com>
|
||||
Philippe Ombredanne <pombredanne@gmail.com>
|
||||
Pi Delport <pjdelport@gmail.com>
|
||||
Pierre-Yves Rofes <github@rofes.fr>
|
||||
pip <pypa-dev@googlegroups.com>
|
||||
Prabakaran Kumaresshan <k_prabakaran+github@hotmail.com>
|
||||
Prabhjyotsing Surjit Singh Sodhi <psinghsodhi@bloomberg.net>
|
||||
Prabhu Marappan <prabhum.794@gmail.com>
|
||||
Pradyun Gedam <pradyunsg@gmail.com>
|
||||
Pratik Mallya <mallya@us.ibm.com>
|
||||
Preet Thakkar <preet.thakkar@students.iiit.ac.in>
|
||||
Preston Holmes <preston@ptone.com>
|
||||
Przemek Wrzos <hetmankp@none>
|
||||
Pulkit Goyal <7895pulkit@gmail.com>
|
||||
Qiangning Hong <hongqn@gmail.com>
|
||||
Quentin Pradet <quentin.pradet@gmail.com>
|
||||
R. David Murray <rdmurray@bitdance.com>
|
||||
Rafael Caricio <rafael.jacinto@gmail.com>
|
||||
Ralf Schmitt <ralf@systemexit.de>
|
||||
Razzi Abuissa <razzi53@gmail.com>
|
||||
rdb <rdb@users.noreply.github.com>
|
||||
Remi Rampin <r@remirampin.com>
|
||||
Remi Rampin <remirampin@gmail.com>
|
||||
Rene Dudfield <renesd@gmail.com>
|
||||
Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
|
||||
Richard Jones <r1chardj0n3s@gmail.com>
|
||||
RobberPhex <robberphex@gmail.com>
|
||||
Robert Collins <rbtcollins@hp.com>
|
||||
Robert McGibbon <rmcgibbo@gmail.com>
|
||||
Robert T. McGibbon <rmcgibbo@gmail.com>
|
||||
robin elisha robinson <elisha.rob@gmail.com>
|
||||
Roey Berman <roey.berman@gmail.com>
|
||||
Rohan Jain <crodjer@gmail.com>
|
||||
Rohan Jain <crodjer@users.noreply.github.com>
|
||||
Rohan Jain <mail@rohanjain.in>
|
||||
Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
|
||||
Romuald Brunet <romuald@chivil.com>
|
||||
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
|
||||
Rory McCann <rory@technomancy.org>
|
||||
Ross Brattain <ross.b.brattain@intel.com>
|
||||
Roy Wellington Ⅳ <cactus_hugged@yahoo.com>
|
||||
Roy Wellington Ⅳ <roy@mybasis.com>
|
||||
Ryan Wooden <rygwdn@gmail.com>
|
||||
ryneeverett <ryneeverett@gmail.com>
|
||||
Sachi King <nakato@nakato.io>
|
||||
Salvatore Rinchiera <salvatore@rinchiera.com>
|
||||
Savio Jomton <sajo240519@gmail.com>
|
||||
schlamar <marc.schlaich@gmail.com>
|
||||
Scott Kitterman <sklist@kitterman.com>
|
||||
Sean <me@sean.taipei>
|
||||
seanj <seanj@xyke.com>
|
||||
Sebastian Jordan <sebastian.jordan.mail@googlemail.com>
|
||||
Sebastian Schaetz <sschaetz@butterflynetinc.com>
|
||||
Segev Finer <segev208@gmail.com>
|
||||
SeongSoo Cho <ppiyakk2@printf.kr>
|
||||
Sergey Vasilyev <nolar@nolar.info>
|
||||
Seth Woodworth <seth@sethish.com>
|
||||
Shlomi Fish <shlomif@shlomifish.org>
|
||||
Shovan Maity <shovan.maity@mayadata.io>
|
||||
Simeon Visser <svisser@users.noreply.github.com>
|
||||
Simon Cross <hodgestar@gmail.com>
|
||||
Simon Pichugin <simon.pichugin@gmail.com>
|
||||
sinoroc <sinoroc.code+git@gmail.com>
|
||||
Sorin Sbarnea <sorin.sbarnea@gmail.com>
|
||||
Stavros Korokithakis <stavros@korokithakis.net>
|
||||
Stefan Scherfke <stefan@sofa-rockers.org>
|
||||
Stephan Erb <github@stephanerb.eu>
|
||||
stepshal <nessento@openmailbox.org>
|
||||
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Dower <steve.dower@microsoft.com>
|
||||
Steve Kowalik <steven@wedontsleep.org>
|
||||
Steven Myint <git@stevenmyint.com>
|
||||
stonebig <stonebig34@gmail.com>
|
||||
Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
|
||||
Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
Stéphane Klein <contact@stephane-klein.info>
|
||||
Sumana Harihareswara <sh@changeset.nyc>
|
||||
Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
|
||||
Sviatoslav Sydorenko <wk@sydorenko.org.ua>
|
||||
Swat009 <swatantra.kumar8@gmail.com>
|
||||
Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>
|
||||
tbeswick <tbeswick@enphaseenergy.com>
|
||||
Thijs Triemstra <info@collab.nl>
|
||||
Thomas Fenzl <thomas.fenzl@gmail.com>
|
||||
Thomas Grainger <tagrain@gmail.com>
|
||||
Thomas Guettler <tguettler@tbz-pariv.de>
|
||||
Thomas Johansson <devnull@localhost>
|
||||
Thomas Kluyver <thomas@kluyver.me.uk>
|
||||
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
|
||||
Tim D. Smith <github@tim-smith.us>
|
||||
Tim Gates <tim.gates@iress.com>
|
||||
Tim Harder <radhermit@gmail.com>
|
||||
Tim Heap <tim@timheap.me>
|
||||
tim smith <github@tim-smith.us>
|
||||
tinruufu <tinruufu@gmail.com>
|
||||
Tom Forbes <tom@tomforb.es>
|
||||
Tom Freudenheim <tom.freudenheim@onepeloton.com>
|
||||
Tom V <tom@viner.tv>
|
||||
Tomas Orsava <torsava@redhat.com>
|
||||
Tomer Chachamu <tomer.chachamu@gmail.com>
|
||||
Tony Beswick <tonybeswick@orcon.net.nz>
|
||||
Tony Zhaocheng Tan <tony@tonytan.io>
|
||||
TonyBeswick <TonyBeswick@users.noreply.github.com>
|
||||
toonarmycaptain <toonarmycaptain@hotmail.com>
|
||||
Toshio Kuratomi <toshio@fedoraproject.org>
|
||||
Travis Swicegood <development@domain51.com>
|
||||
Tzu-ping Chung <uranusjr@gmail.com>
|
||||
Valentin Haenel <valentin.haenel@gmx.de>
|
||||
Victor Stinner <victor.stinner@gmail.com>
|
||||
victorvpaulo <victorvpaulo@gmail.com>
|
||||
Viktor Szépe <viktor@szepe.net>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Vinay Sajip <vinay_sajip@yahoo.co.uk>
|
||||
Vincent Philippon <sindaewoh@gmail.com>
|
||||
Vinicyus Macedo <7549205+vinicyusmacedo@users.noreply.github.com>
|
||||
Vitaly Babiy <vbabiy86@gmail.com>
|
||||
Vladimir Rutsky <rutsky@users.noreply.github.com>
|
||||
W. Trevor King <wking@drexel.edu>
|
||||
Wil Tan <wil@dready.org>
|
||||
Wilfred Hughes <me@wilfred.me.uk>
|
||||
William ML Leslie <william.leslie.ttg@gmail.com>
|
||||
William T Olson <trevor@heytrevor.com>
|
||||
Wilson Mo <wilsonfv@126.com>
|
||||
wim glenn <wim.glenn@gmail.com>
|
||||
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
|
||||
Xavier Fernandez <xav.fernandez@gmail.com>
|
||||
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
|
||||
xoviat <xoviat@users.noreply.github.com>
|
||||
xtreak <tir.karthi@gmail.com>
|
||||
YAMAMOTO Takashi <yamamoto@midokura.com>
|
||||
Yen Chi Hsuan <yan12125@gmail.com>
|
||||
Yeray Diaz Diaz <yeraydiazdiaz@gmail.com>
|
||||
Yoval P <yoval@gmx.com>
|
||||
Yu Jian <askingyj@gmail.com>
|
||||
Yuan Jing Vincent Yan <yyan82@bloomberg.net>
|
||||
Zearin <zearin@gonk.net>
|
||||
Zearin <Zearin@users.noreply.github.com>
|
||||
Zhiping Deng <kofreestyler@gmail.com>
|
||||
Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
Łukasz Langa <lukasz@langa.pl>
|
||||
Семён Марьясин <simeon@maryasin.name>
|
@ -0,0 +1 @@
|
||||
pip
|
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,74 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: certifi
|
||||
Version: 2019.11.28
|
||||
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'
|
||||
|
||||
Or from the command line::
|
||||
|
||||
$ python -m certifi
|
||||
/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/
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
certifi/__init__.py,sha256=JVwzDhkMttyVVtfNDrU_i0v2a-WmtEBXq0Z8oz4Ghzk,52
|
||||
certifi/__main__.py,sha256=FiOYt1Fltst7wk9DRa6GCoBr8qBUxlNQu_MKJf04E6s,41
|
||||
certifi/cacert.pem,sha256=cyvv5Jx1gHACNEj2GaOrsIj0Tk8FmSvHR42uhzvlatg,281457
|
||||
certifi/core.py,sha256=u_450edAVoiZrgqi6k3Sekcvs-B1zD_hTeE6UJ2OcQ4,225
|
||||
certifi-2019.11.28.dist-info/AUTHORS.txt,sha256=RtqU9KfonVGhI48DAA4-yTOBUhBtQTjFhaDzHoyh7uU,21518
|
||||
certifi-2019.11.28.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090
|
||||
certifi-2019.11.28.dist-info/METADATA,sha256=K6ioZZT9N0bRETHmncjK-UJKAFIVF26h1F31dfDaV5k,2523
|
||||
certifi-2019.11.28.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
||||
certifi-2019.11.28.dist-info/top_level.txt,sha256=KMu4vUCfsjLrkPbSNdgdekS-pVJzBAJFO__nI8NF6-U,8
|
||||
certifi-2019.11.28.dist-info/RECORD,,
|
||||
certifi/__main__.cpython-38.pyc,,
|
||||
certifi/__pycache__,,
|
||||
certifi-2019.11.28.virtualenv,,
|
||||
certifi-2019.11.28.dist-info/__pycache__,,
|
||||
certifi-2019.11.28.dist-info/INSTALLER,,
|
||||
certifi/__init__.cpython-38.pyc,,
|
||||
certifi/core.cpython-38.pyc,,
|
@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py2-none-any
|
||||
Tag: py3-none-any
|
||||
|
@ -0,0 +1 @@
|
||||
certifi
|
@ -0,0 +1,3 @@
|
||||
from .core import where
|
||||
|
||||
__version__ = "2019.11.28"
|
@ -0,0 +1,2 @@
|
||||
from certifi import where
|
||||
print(where())
|
Binary file not shown.
Binary file not shown.
4602
.tox/pep8/lib/python3.8/site-packages/certifi/cacert.pem
Normal file
4602
.tox/pep8/lib/python3.8/site-packages/certifi/cacert.pem
Normal file
File diff suppressed because it is too large
Load Diff
15
.tox/pep8/lib/python3.8/site-packages/certifi/core.py
Normal file
15
.tox/pep8/lib/python3.8/site-packages/certifi/core.py
Normal file
@ -0,0 +1,15 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
certifi.py
|
||||
~~~~~~~~~~
|
||||
|
||||
This module returns the installation location of cacert.pem.
|
||||
"""
|
||||
import os
|
||||
|
||||
|
||||
def where():
|
||||
f = os.path.dirname(__file__)
|
||||
|
||||
return '/etc/ssl/certs/ca-certificates.crt'
|
@ -0,0 +1,562 @@
|
||||
A_Rog <adam.thomas.rogerson@gmail.com>
|
||||
Aakanksha Agrawal <11389424+rasponic@users.noreply.github.com>
|
||||
Abhinav Sagar <40603139+abhinavsagar@users.noreply.github.com>
|
||||
ABHYUDAY PRATAP SINGH <abhyudaypratap@outlook.com>
|
||||
abs51295 <aagams68@gmail.com>
|
||||
AceGentile <ventogrigio83@gmail.com>
|
||||
Adam Chainz <adam@adamj.eu>
|
||||
Adam Tse <adam.tse@me.com>
|
||||
Adam Tse <atse@users.noreply.github.com>
|
||||
Adam Wentz <awentz@theonion.com>
|
||||
admin <admin@admins-MacBook-Pro.local>
|
||||
Adrien Morison <adrien.morison@gmail.com>
|
||||
ahayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Ahilya <ahilya16009@iiitd.ac.in>
|
||||
AinsworthK <yat626@yahoo.com.hk>
|
||||
Akash Srivastava <akashsrivastava4927@gmail.com>
|
||||
Alan Yee <alyee@ucsd.edu>
|
||||
Albert Tugushev <albert@tugushev.ru>
|
||||
Albert-Guan <albert.guan94@gmail.com>
|
||||
albertg <albert.guan94@gmail.com>
|
||||
Aleks Bunin <github@compuix.com>
|
||||
Alethea Flowers <magicalgirl@google.com>
|
||||
Alex Gaynor <alex.gaynor@gmail.com>
|
||||
Alex Grönholm <alex.gronholm@nextday.fi>
|
||||
Alex Loosley <a.loosley@reply.de>
|
||||
Alex Morega <alex@grep.ro>
|
||||
Alex Stachowiak <alexander@computer.org>
|
||||
Alexander Shtyrov <rawzausho@gmail.com>
|
||||
Alexandre Conrad <alexandre.conrad@gmail.com>
|
||||
Alexey Popravka <a.popravka@smartweb.com.ua>
|
||||
Alexey Popravka <alexey.popravka@horsedevel.com>
|
||||
Alli <alzeih@users.noreply.github.com>
|
||||
Ami Fischman <ami@fischman.org>
|
||||
Ananya Maiti <ananyoevo@gmail.com>
|
||||
Anatoly Techtonik <techtonik@gmail.com>
|
||||
Anders Kaseorg <andersk@mit.edu>
|
||||
Andreas Lutro <anlutro@gmail.com>
|
||||
Andrei Geacar <andrei.geacar@gmail.com>
|
||||
Andrew Gaul <andrew@gaul.org>
|
||||
Andrey Bulgakov <mail@andreiko.ru>
|
||||
Andrés Delfino <34587441+andresdelfino@users.noreply.github.com>
|
||||
Andrés Delfino <adelfino@gmail.com>
|
||||
Andy Freeland <andy.freeland@redjack.com>
|
||||
Andy Freeland <andy@andyfreeland.net>
|
||||
Andy Kluger <AndydeCleyre@users.noreply.github.com>
|
||||
Ani Hayrapetyan <ahayrapetya2@bloomberg.net>
|
||||
Aniruddha Basak <codewithaniruddha@gmail.com>
|
||||
Anish Tambe <anish.tambe@yahoo.in>
|
||||
Anrs Hu <anrs@douban.com>
|
||||
Anthony Sottile <asottile@umich.edu>
|
||||
Antoine Musso <hashar@free.fr>
|
||||
Anton Ovchinnikov <revolver112@gmail.com>
|
||||
Anton Patrushev <apatrushev@gmail.com>
|
||||
Antonio Alvarado Hernandez <tnotstar@gmail.com>
|
||||
Antony Lee <anntzer.lee@gmail.com>
|
||||
Antti Kaihola <akaihol+github@ambitone.com>
|
||||
Anubhav Patel <anubhavp28@gmail.com>
|
||||
Anuj Godase <godaseanuj@gmail.com>
|
||||
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
|
||||
AraHaan <seandhunt_7@yahoo.com>
|
||||
Arindam Choudhury <arindam@live.com>
|
||||
Armin Ronacher <armin.ronacher@active-4.com>
|
||||
Artem <duketemon@users.noreply.github.com>
|
||||
Ashley Manton <ajd.manton@googlemail.com>
|
||||
Ashwin Ramaswami <aramaswamis@gmail.com>
|
||||
atse <atse@users.noreply.github.com>
|
||||
Atsushi Odagiri <aodagx@gmail.com>
|
||||
Avner Cohen <israbirding@gmail.com>
|
||||
Baptiste Mispelon <bmispelon@gmail.com>
|
||||
Barney Gale <barney.gale@gmail.com>
|
||||
barneygale <barney.gale@gmail.com>
|
||||
Bartek Ogryczak <b.ogryczak@gmail.com>
|
||||
Bastian Venthur <mail@venthur.de>
|
||||
Ben Darnell <ben@bendarnell.com>
|
||||
Ben Hoyt <benhoyt@gmail.com>
|
||||
Ben Rosser <rosser.bjr@gmail.com>
|
||||
Bence Nagy <bence@underyx.me>
|
||||
Benjamin Peterson <benjamin@python.org>
|
||||
Benjamin VanEvery <ben@simondata.com>
|
||||
Benoit Pierre <benoit.pierre@gmail.com>
|
||||
Berker Peksag <berker.peksag@gmail.com>
|
||||
Bernardo B. Marques <bernardo.fire@gmail.com>
|
||||
Bernhard M. Wiedemann <bwiedemann@suse.de>
|
||||
Bertil Hatt <bertil.hatt@farfetch.com>
|
||||
Bogdan Opanchuk <bogdan@opanchuk.net>
|
||||
BorisZZZ <BorisZZZ@users.noreply.github.com>
|
||||
Brad Erickson <eosrei@gmail.com>
|
||||
Bradley Ayers <bradley.ayers@gmail.com>
|
||||
Brandon L. Reiss <brandon@damyata.co>
|
||||
Brandt Bucher <brandtbucher@gmail.com>
|
||||
Brett Randall <javabrett@gmail.com>
|
||||
Brian Cristante <33549821+brcrista@users.noreply.github.com>
|
||||
Brian Cristante <brcrista@microsoft.com>
|
||||
Brian Rosner <brosner@gmail.com>
|
||||
BrownTruck <BrownTruck@users.noreply.github.com>
|
||||
Bruno Oliveira <nicoddemus@gmail.com>
|
||||
Bruno Renié <brutasse@gmail.com>
|
||||
Bstrdsmkr <bstrdsmkr@gmail.com>
|
||||
Buck Golemon <buck@yelp.com>
|
||||
burrows <burrows@preveil.com>
|
||||
Bussonnier Matthias <bussonniermatthias@gmail.com>
|
||||
c22 <c22@users.noreply.github.com>
|
||||
Caleb Martinez <accounts@calebmartinez.com>
|
||||
Calvin Smith <eukaryote@users.noreply.github.com>
|
||||
Carl Meyer <carl@oddbird.net>
|
||||
Carlos Liam <carlos@aarzee.me>
|
||||
Carol Willing <carolcode@willingconsulting.com>
|
||||
Carter Thayer <carterwthayer@gmail.com>
|
||||
Cass <cass.petrus@gmail.com>
|
||||
Chandrasekhar Atina <chandu.atina@gmail.com>
|
||||
Chih-Hsuan Yen <yan12125@gmail.com>
|
||||
Chih-Hsuan Yen <yen@chyen.cc>
|
||||
Chris Brinker <chris.brinker@gmail.com>
|
||||
Chris Hunt <chrahunt@gmail.com>
|
||||
Chris Jerdonek <chris.jerdonek@gmail.com>
|
||||
Chris McDonough <chrism@plope.com>
|
||||
Chris Wolfe <chriswwolfe@gmail.com>
|
||||
Christian Heimes <christian@python.org>
|
||||
Christian Oudard <christian.oudard@gmail.com>
|
||||
Christopher Hunt <chrahunt@gmail.com>
|
||||
Christopher Snyder <cnsnyder@users.noreply.github.com>
|
||||
Clark Boylan <clark.boylan@gmail.com>
|
||||
Clay McClure <clay@daemons.net>
|
||||
Cody <Purring@users.noreply.github.com>
|
||||
Cody Soyland <codysoyland@gmail.com>
|
||||
Colin Watson <cjwatson@debian.org>
|
||||
Connor Osborn <cdosborn@email.arizona.edu>
|
||||
Cooper Lees <me@cooperlees.com>
|
||||
Cooper Ry Lees <me@cooperlees.com>
|
||||
Cory Benfield <lukasaoz@gmail.com>
|
||||
Cory Wright <corywright@gmail.com>
|
||||
Craig Kerstiens <craig.kerstiens@gmail.com>
|
||||
Cristian Sorinel <cristian.sorinel@gmail.com>
|
||||
Curtis Doty <Curtis@GreenKey.net>
|
||||
cytolentino <ctolentino8@bloomberg.net>
|
||||
Damian Quiroga <qdamian@gmail.com>
|
||||
Dan Black <dyspop@gmail.com>
|
||||
Dan Savilonis <djs@n-cube.org>
|
||||
Dan Sully <daniel-github@electricrain.com>
|
||||
daniel <mcdonaldd@unimelb.edu.au>
|
||||
Daniel Collins <accounts@dac.io>
|
||||
Daniel Hahler <git@thequod.de>
|
||||
Daniel Holth <dholth@fastmail.fm>
|
||||
Daniel Jost <torpedojost@gmail.com>
|
||||
Daniel Shaulov <daniel.shaulov@gmail.com>
|
||||
Daniele Esposti <expobrain@users.noreply.github.com>
|
||||
Daniele Procida <daniele@vurt.org>
|
||||
Danny Hermes <daniel.j.hermes@gmail.com>
|
||||
Dav Clark <davclark@gmail.com>
|
||||
Dave Abrahams <dave@boostpro.com>
|
||||
Dave Jones <dave@waveform.org.uk>
|
||||
David Aguilar <davvid@gmail.com>
|
||||
David Black <db@d1b.org>
|
||||
David Bordeynik <david.bordeynik@gmail.com>
|
||||
David Bordeynik <david@zebra-med.com>
|
||||
David Caro <david@dcaro.es>
|
||||
David Evans <d@drhevans.com>
|
||||
David Linke <dr.david.linke@gmail.com>
|
||||
David Pursehouse <david.pursehouse@gmail.com>
|
||||
David Tucker <david@tucker.name>
|
||||
David Wales <daviewales@gmail.com>
|
||||
Davidovich <david.genest@gmail.com>
|
||||
derwolfe <chriswwolfe@gmail.com>
|
||||
Desetude <harry@desetude.com>
|
||||
Diego Caraballo <diegocaraballo84@gmail.com>
|
||||
DiegoCaraballo <diegocaraballo84@gmail.com>
|
||||
Dmitry Gladkov <dmitry.gladkov@gmail.com>
|
||||
Domen Kožar <domen@dev.si>
|
||||
Donald Stufft <donald@stufft.io>
|
||||
Dongweiming <dongweiming@admaster.com.cn>
|
||||
Douglas Thor <dougthor42@users.noreply.github.com>
|
||||
DrFeathers <WilliamGeorgeBurgess@gmail.com>
|
||||
Dustin Ingram <di@di.codes>
|
||||
Dwayne Bailey <dwayne@translate.org.za>
|
||||
Ed Morley <501702+edmorley@users.noreply.github.com>
|
||||
Ed Morley <emorley@mozilla.com>
|
||||
Eitan Adler <lists@eitanadler.com>
|
||||
ekristina <panacejja@gmail.com>
|
||||
elainechan <elaine.chan@outlook.com>
|
||||
Eli Schwartz <eschwartz93@gmail.com>
|
||||
Eli Schwartz <eschwartz@archlinux.org>
|
||||
Emil Burzo <contact@emilburzo.com>
|
||||
Emil Styrke <emil.styrke@gmail.com>
|
||||
Endoh Takanao <djmchl@gmail.com>
|
||||
enoch <lanxenet@gmail.com>
|
||||
Erdinc Mutlu <erdinc_mutlu@yahoo.com>
|
||||
Eric Gillingham <Gillingham@bikezen.net>
|
||||
Eric Hanchrow <eric.hanchrow@gmail.com>
|
||||
Eric Hopper <hopper@omnifarious.org>
|
||||
Erik M. Bray <embray@stsci.edu>
|
||||
Erik Rose <erik@mozilla.com>
|
||||
Ernest W Durbin III <ewdurbin@gmail.com>
|
||||
Ernest W. Durbin III <ewdurbin@gmail.com>
|
||||
Erwin Janssen <erwinjanssen@outlook.com>
|
||||
Eugene Vereshchagin <evvers@gmail.com>
|
||||
everdimension <everdimension@gmail.com>
|
||||
Felix Yan <felixonmars@archlinux.org>
|
||||
fiber-space <fiber-space@users.noreply.github.com>
|
||||
Filip Kokosiński <filip.kokosinski@gmail.com>
|
||||
Florian Briand <ownerfrance+github@hotmail.com>
|
||||
Florian Rathgeber <florian.rathgeber@gmail.com>
|
||||
Francesco <f.guerrieri@gmail.com>
|
||||
Francesco Montesano <franz.bergesund@gmail.com>
|
||||
Frost Ming <mianghong@gmail.com>
|
||||
Gabriel Curio <g.curio@gmail.com>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Garry Polley <garrympolley@gmail.com>
|
||||
gdanielson <graeme.danielson@gmail.com>
|
||||
Geoffrey Lehée <geoffrey@lehee.name>
|
||||
Geoffrey Sneddon <me@gsnedders.com>
|
||||
George Song <george@55minutes.com>
|
||||
Georgi Valkov <georgi.t.valkov@gmail.com>
|
||||
Giftlin Rajaiah <giftlin.rgn@gmail.com>
|
||||
gizmoguy1 <gizmoguy1@gmail.com>
|
||||
gkdoc <40815324+gkdoc@users.noreply.github.com>
|
||||
Gopinath M <31352222+mgopi1990@users.noreply.github.com>
|
||||
GOTO Hayato <3532528+gh640@users.noreply.github.com>
|
||||
gpiks <gaurav.pikale@gmail.com>
|
||||
Guilherme Espada <porcariadagata@gmail.com>
|
||||
Guy Rozendorn <guy@rzn.co.il>
|
||||
gzpan123 <gzpan123@gmail.com>
|
||||
Hanjun Kim <hallazzang@gmail.com>
|
||||
Hari Charan <hcharan997@gmail.com>
|
||||
Harsh Vardhan <harsh59v@gmail.com>
|
||||
Herbert Pfennig <herbert@albinen.com>
|
||||
Hsiaoming Yang <lepture@me.com>
|
||||
Hugo <hugovk@users.noreply.github.com>
|
||||
Hugo Lopes Tavares <hltbra@gmail.com>
|
||||
Hugo van Kemenade <hugovk@users.noreply.github.com>
|
||||
hugovk <hugovk@users.noreply.github.com>
|
||||
Hynek Schlawack <hs@ox.cx>
|
||||
Ian Bicking <ianb@colorstudy.com>
|
||||
Ian Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Lee <IanLee1521@gmail.com>
|
||||
Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
||||
Ian Wienand <ian@wienand.org>
|
||||
Ian Wienand <iwienand@redhat.com>
|
||||
Igor Kuzmitshov <kuzmiigo@gmail.com>
|
||||
Igor Sobreira <igor@igorsobreira.com>
|
||||
Ilya Baryshev <baryshev@gmail.com>
|
||||
INADA Naoki <songofacandy@gmail.com>
|
||||
Ionel Cristian Mărieș <contact@ionelmc.ro>
|
||||
Ionel Maries Cristian <ionel.mc@gmail.com>
|
||||
Ivan Pozdeev <vano@mail.mipt.ru>
|
||||
Jacob Kim <me@thejacobkim.com>
|
||||
jakirkham <jakirkham@gmail.com>
|
||||
Jakub Stasiak <kuba.stasiak@gmail.com>
|
||||
Jakub Vysoky <jakub@borka.cz>
|
||||
Jakub Wilk <jwilk@jwilk.net>
|
||||
James Cleveland <jamescleveland@gmail.com>
|
||||
James Cleveland <radiosilence@users.noreply.github.com>
|
||||
James Firth <hello@james-firth.com>
|
||||
James Polley <jp@jamezpolley.com>
|
||||
Jan Pokorný <jpokorny@redhat.com>
|
||||
Jannis Leidel <jannis@leidel.info>
|
||||
jarondl <me@jarondl.net>
|
||||
Jason R. Coombs <jaraco@jaraco.com>
|
||||
Jay Graves <jay@skabber.com>
|
||||
Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
|
||||
Jeff Barber <jbarber@computer.org>
|
||||
Jeff Dairiki <dairiki@dairiki.org>
|
||||
Jelmer Vernooij <jelmer@jelmer.uk>
|
||||
jenix21 <devfrog@gmail.com>
|
||||
Jeremy Stanley <fungi@yuggoth.org>
|
||||
Jeremy Zafran <jzafran@users.noreply.github.com>
|
||||
Jiashuo Li <jiasli@microsoft.com>
|
||||
Jim Garrison <jim@garrison.cc>
|
||||
Jivan Amara <Development@JivanAmara.net>
|
||||
John Paton <j.paton@catawiki.nl>
|
||||
John-Scott Atlakson <john.scott.atlakson@gmail.com>
|
||||
johnthagen <johnthagen@gmail.com>
|
||||
johnthagen <johnthagen@users.noreply.github.com>
|
||||
Jon Banafato <jon@jonafato.com>
|
||||
Jon Dufresne <jon.dufresne@gmail.com>
|
||||
Jon Parise <jon@indelible.org>
|
||||
Jonas Nockert <jonasnockert@gmail.com>
|
||||
Jonathan Herbert <foohyfooh@gmail.com>
|
||||
Joost Molenaar <j.j.molenaar@gmail.com>
|
||||
Jorge Niedbalski <niedbalski@gmail.com>
|
||||
Joseph Long <jdl@fastmail.fm>
|
||||
Josh Bronson <jabronson@gmail.com>
|
||||
Josh Hansen <josh@skwash.net>
|
||||
Josh Schneier <josh.schneier@gmail.com>
|
||||
Juanjo Bazán <jjbazan@gmail.com>
|
||||
Julian Berman <Julian@GrayVines.com>
|
||||
Julian Gethmann <julian.gethmann@kit.edu>
|
||||
Julien Demoor <julien@jdemoor.com>
|
||||
jwg4 <jack.grahl@yahoo.co.uk>
|
||||
Jyrki Pulliainen <jyrki@spotify.com>
|
||||
Kai Chen <kaichen120@gmail.com>
|
||||
Kamal Bin Mustafa <kamal@smach.net>
|
||||
kaustav haldar <hi@kaustav.me>
|
||||
keanemind <keanemind@gmail.com>
|
||||
Keith Maxwell <keith.maxwell@gmail.com>
|
||||
Kelsey Hightower <kelsey.hightower@gmail.com>
|
||||
Kenneth Belitzky <kenny@belitzky.com>
|
||||
Kenneth Reitz <me@kennethreitz.com>
|
||||
Kenneth Reitz <me@kennethreitz.org>
|
||||
Kevin Burke <kev@inburke.com>
|
||||
Kevin Carter <kevin.carter@rackspace.com>
|
||||
Kevin Frommelt <kevin.frommelt@webfilings.com>
|
||||
Kevin R Patterson <kevin.r.patterson@intel.com>
|
||||
Kexuan Sun <me@kianasun.com>
|
||||
Kit Randel <kit@nocturne.net.nz>
|
||||
kpinc <kop@meme.com>
|
||||
Krishna Oza <krishoza15sep@gmail.com>
|
||||
Kumar McMillan <kumar.mcmillan@gmail.com>
|
||||
Kyle Persohn <kyle.persohn@gmail.com>
|
||||
lakshmanaram <lakshmanaram.n@gmail.com>
|
||||
Laszlo Kiss-Kollar <kiss.kollar.laszlo@gmail.com>
|
||||
Laurent Bristiel <laurent@bristiel.com>
|
||||
Laurie Opperman <laurie@sitesee.com.au>
|
||||
Leon Sasson <leonsassonha@gmail.com>
|
||||
Lev Givon <lev@columbia.edu>
|
||||
Lincoln de Sousa <lincoln@comum.org>
|
||||
Lipis <lipiridis@gmail.com>
|
||||
Loren Carvalho <lcarvalho@linkedin.com>
|
||||
Lucas Cimon <lucas.cimon@gmail.com>
|
||||
Ludovic Gasc <gmludo@gmail.com>
|
||||
Luke Macken <lmacken@redhat.com>
|
||||
Luo Jiebin <luo.jiebin@qq.com>
|
||||
luojiebin <luojiebin@users.noreply.github.com>
|
||||
luz.paz <luzpaz@users.noreply.github.com>
|
||||
László Kiss Kollár <lkisskollar@bloomberg.net>
|
||||
László Kiss Kollár <lkollar@users.noreply.github.com>
|
||||
Marc Abramowitz <marc@marc-abramowitz.com>
|
||||
Marc Tamlyn <marc.tamlyn@gmail.com>
|
||||
Marcus Smith <qwcode@gmail.com>
|
||||
Mariatta <Mariatta@users.noreply.github.com>
|
||||
Mark Kohler <mark.kohler@proteinsimple.com>
|
||||
Mark Williams <markrwilliams@gmail.com>
|
||||
Mark Williams <mrw@enotuniq.org>
|
||||
Markus Hametner <fin+github@xbhd.org>
|
||||
Masaki <mk5986@nyu.edu>
|
||||
Masklinn <bitbucket.org@masklinn.net>
|
||||
Matej Stuchlik <mstuchli@redhat.com>
|
||||
Mathew Jennings <mjennings@foursquare.com>
|
||||
Mathieu Bridon <bochecha@daitauha.fr>
|
||||
Matt Good <matt@matt-good.net>
|
||||
Matt Maker <trip@monstro.us>
|
||||
Matt Robenolt <matt@ydekproductions.com>
|
||||
matthew <matthew@trumbell.net>
|
||||
Matthew Einhorn <moiein2000@gmail.com>
|
||||
Matthew Gilliard <matthew.gilliard@gmail.com>
|
||||
Matthew Iversen <teh.ivo@gmail.com>
|
||||
Matthew Trumbell <matthew@thirdstonepartners.com>
|
||||
Matthew Willson <matthew@swiftkey.com>
|
||||
Matthias Bussonnier <bussonniermatthias@gmail.com>
|
||||
mattip <matti.picus@gmail.com>
|
||||
Maxim Kurnikov <maxim.kurnikov@gmail.com>
|
||||
Maxime Rouyrre <rouyrre+git@gmail.com>
|
||||
mayeut <mayeut@users.noreply.github.com>
|
||||
mbaluna <44498973+mbaluna@users.noreply.github.com>
|
||||
mdebi <17590103+mdebi@users.noreply.github.com>
|
||||
memoselyk <memoselyk@gmail.com>
|
||||
Michael <michael-k@users.noreply.github.com>
|
||||
Michael Aquilina <michaelaquilina@gmail.com>
|
||||
Michael E. Karpeles <michael.karpeles@gmail.com>
|
||||
Michael Klich <michal@michalklich.com>
|
||||
Michael Williamson <mike@zwobble.org>
|
||||
michaelpacer <michaelpacer@gmail.com>
|
||||
Mickaël Schoentgen <mschoentgen@nuxeo.com>
|
||||
Miguel Araujo Perez <miguel.araujo.perez@gmail.com>
|
||||
Mihir Singh <git.service@mihirsingh.com>
|
||||
Mike <mikeh@blur.com>
|
||||
Mike Hendricks <mikeh@blur.com>
|
||||
Min RK <benjaminrk@gmail.com>
|
||||
MinRK <benjaminrk@gmail.com>
|
||||
Miro Hrončok <miro@hroncok.cz>
|
||||
Monica Baluna <mbaluna@bloomberg.net>
|
||||
montefra <franz.bergesund@gmail.com>
|
||||
Monty Taylor <mordred@inaugust.com>
|
||||
Nate Coraor <nate@bx.psu.edu>
|
||||
Nathaniel J. Smith <njs@pobox.com>
|
||||
Nehal J Wani <nehaljw.kkd1@gmail.com>
|
||||
Neil Botelho <neil.botelho321@gmail.com>
|
||||
Nick Coghlan <ncoghlan@gmail.com>
|
||||
Nick Stenning <nick@whiteink.com>
|
||||
Nick Timkovich <prometheus235@gmail.com>
|
||||
Nicolas Bock <nicolasbock@gmail.com>
|
||||
Nikhil Benesch <nikhil.benesch@gmail.com>
|
||||
Nitesh Sharma <nbsharma@outlook.com>
|
||||
Nowell Strite <nowell@strite.org>
|
||||
NtaleGrey <Shadikntale@gmail.com>
|
||||
nvdv <modestdev@gmail.com>
|
||||
Ofekmeister <ofekmeister@gmail.com>
|
||||
ofrinevo <ofrine@gmail.com>
|
||||
Oliver Jeeves <oliver.jeeves@ocado.com>
|
||||
Oliver Tonnhofer <olt@bogosoft.com>
|
||||
Olivier Girardot <ssaboum@gmail.com>
|
||||
Olivier Grisel <olivier.grisel@ensta.org>
|
||||
Ollie Rutherfurd <orutherfurd@gmail.com>
|
||||
OMOTO Kenji <k-omoto@m3.com>
|
||||
Omry Yadan <omry@fb.com>
|
||||
Oren Held <orenhe@il.ibm.com>
|
||||
Oscar Benjamin <oscar.j.benjamin@gmail.com>
|
||||
Oz N Tiram <oz.tiram@gmail.com>
|
||||
Pachwenko <32424503+Pachwenko@users.noreply.github.com>
|
||||
Patrick Dubroy <pdubroy@gmail.com>
|
||||
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
|
||||
Patrick Lawson <pl@foursquare.com>
|
||||
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
|
||||
Patrik Kopkan <pkopkan@redhat.com>
|
||||
Paul Kehrer <paul.l.kehrer@gmail.com>
|
||||
Paul Moore <p.f.moore@gmail.com>
|
||||
Paul Nasrat <pnasrat@gmail.com>
|
||||
Paul Oswald <pauloswald@gmail.com>
|
||||
Paul van der Linden <mail@paultjuh.org>
|
||||
Paulus Schoutsen <paulus@paulusschoutsen.nl>
|
||||
Pavithra Eswaramoorthy <33131404+QueenCoffee@users.noreply.github.com>
|
||||
Pawel Jasinski <pawel.jasinski@gmail.com>
|
||||
Pekka Klärck <peke@iki.fi>
|
||||
Peter Lisák <peter.lisak@showmax.com>
|
||||
Peter Waller <peter.waller@gmail.com>
|
||||
petr-tik <petr-tik@users.noreply.github.com>
|
||||
Phaneendra Chiruvella <hi@pcx.io>
|
||||
Phil Freo <phil@philfreo.com>
|
||||
Phil Pennock <phil@pennock-tech.com>
|
||||
Phil Whelan <phil123@gmail.com>
|
||||
Philip Jägenstedt <philip@foolip.org>
|
||||
Philip Molloy <pamolloy@users.noreply.github.com>
|
||||
Philippe Ombredanne <pombredanne@gmail.com>
|
||||
Pi Delport <pjdelport@gmail.com>
|
||||
Pierre-Yves Rofes <github@rofes.fr>
|
||||
pip <pypa-dev@googlegroups.com>
|
||||
Prabakaran Kumaresshan <k_prabakaran+github@hotmail.com>
|
||||
Prabhjyotsing Surjit Singh Sodhi <psinghsodhi@bloomberg.net>
|
||||
Prabhu Marappan <prabhum.794@gmail.com>
|
||||
Pradyun Gedam <pradyunsg@gmail.com>
|
||||
Pratik Mallya <mallya@us.ibm.com>
|
||||
Preet Thakkar <preet.thakkar@students.iiit.ac.in>
|
||||
Preston Holmes <preston@ptone.com>
|
||||
Przemek Wrzos <hetmankp@none>
|
||||
Pulkit Goyal <7895pulkit@gmail.com>
|
||||
Qiangning Hong <hongqn@gmail.com>
|
||||
Quentin Pradet <quentin.pradet@gmail.com>
|
||||
R. David Murray <rdmurray@bitdance.com>
|
||||
Rafael Caricio <rafael.jacinto@gmail.com>
|
||||
Ralf Schmitt <ralf@systemexit.de>
|
||||
Razzi Abuissa <razzi53@gmail.com>
|
||||
rdb <rdb@users.noreply.github.com>
|
||||
Remi Rampin <r@remirampin.com>
|
||||
Remi Rampin <remirampin@gmail.com>
|
||||
Rene Dudfield <renesd@gmail.com>
|
||||
Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
|
||||
Richard Jones <r1chardj0n3s@gmail.com>
|
||||
RobberPhex <robberphex@gmail.com>
|
||||
Robert Collins <rbtcollins@hp.com>
|
||||
Robert McGibbon <rmcgibbo@gmail.com>
|
||||
Robert T. McGibbon <rmcgibbo@gmail.com>
|
||||
robin elisha robinson <elisha.rob@gmail.com>
|
||||
Roey Berman <roey.berman@gmail.com>
|
||||
Rohan Jain <crodjer@gmail.com>
|
||||
Rohan Jain <crodjer@users.noreply.github.com>
|
||||
Rohan Jain <mail@rohanjain.in>
|
||||
Roman Bogorodskiy <roman.bogorodskiy@ericsson.com>
|
||||
Romuald Brunet <romuald@chivil.com>
|
||||
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
|
||||
Rory McCann <rory@technomancy.org>
|
||||
Ross Brattain <ross.b.brattain@intel.com>
|
||||
Roy Wellington Ⅳ <cactus_hugged@yahoo.com>
|
||||
Roy Wellington Ⅳ <roy@mybasis.com>
|
||||
Ryan Wooden <rygwdn@gmail.com>
|
||||
ryneeverett <ryneeverett@gmail.com>
|
||||
Sachi King <nakato@nakato.io>
|
||||
Salvatore Rinchiera <salvatore@rinchiera.com>
|
||||
Savio Jomton <sajo240519@gmail.com>
|
||||
schlamar <marc.schlaich@gmail.com>
|
||||
Scott Kitterman <sklist@kitterman.com>
|
||||
Sean <me@sean.taipei>
|
||||
seanj <seanj@xyke.com>
|
||||
Sebastian Jordan <sebastian.jordan.mail@googlemail.com>
|
||||
Sebastian Schaetz <sschaetz@butterflynetinc.com>
|
||||
Segev Finer <segev208@gmail.com>
|
||||
SeongSoo Cho <ppiyakk2@printf.kr>
|
||||
Sergey Vasilyev <nolar@nolar.info>
|
||||
Seth Woodworth <seth@sethish.com>
|
||||
Shlomi Fish <shlomif@shlomifish.org>
|
||||
Shovan Maity <shovan.maity@mayadata.io>
|
||||
Simeon Visser <svisser@users.noreply.github.com>
|
||||
Simon Cross <hodgestar@gmail.com>
|
||||
Simon Pichugin <simon.pichugin@gmail.com>
|
||||
sinoroc <sinoroc.code+git@gmail.com>
|
||||
Sorin Sbarnea <sorin.sbarnea@gmail.com>
|
||||
Stavros Korokithakis <stavros@korokithakis.net>
|
||||
Stefan Scherfke <stefan@sofa-rockers.org>
|
||||
Stephan Erb <github@stephanerb.eu>
|
||||
stepshal <nessento@openmailbox.org>
|
||||
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Barnes <gadgetsteve@hotmail.com>
|
||||
Steve Dower <steve.dower@microsoft.com>
|
||||
Steve Kowalik <steven@wedontsleep.org>
|
||||
Steven Myint <git@stevenmyint.com>
|
||||
stonebig <stonebig34@gmail.com>
|
||||
Stéphane Bidoul (ACSONE) <stephane.bidoul@acsone.eu>
|
||||
Stéphane Bidoul <stephane.bidoul@acsone.eu>
|
||||
Stéphane Klein <contact@stephane-klein.info>
|
||||
Sumana Harihareswara <sh@changeset.nyc>
|
||||
Sviatoslav Sydorenko <wk.cvs.github@sydorenko.org.ua>
|
||||
Sviatoslav Sydorenko <wk@sydorenko.org.ua>
|
||||
Swat009 <swatantra.kumar8@gmail.com>
|
||||
Takayuki SHIMIZUKAWA <shimizukawa@gmail.com>
|
||||
tbeswick <tbeswick@enphaseenergy.com>
|
||||
Thijs Triemstra <info@collab.nl>
|
||||
Thomas Fenzl <thomas.fenzl@gmail.com>
|
||||
Thomas Grainger <tagrain@gmail.com>
|
||||
Thomas Guettler <tguettler@tbz-pariv.de>
|
||||
Thomas Johansson <devnull@localhost>
|
||||
Thomas Kluyver <thomas@kluyver.me.uk>
|
||||
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
|
||||
Tim D. Smith <github@tim-smith.us>
|
||||
Tim Gates <tim.gates@iress.com>
|
||||
Tim Harder <radhermit@gmail.com>
|
||||
Tim Heap <tim@timheap.me>
|
||||
tim smith <github@tim-smith.us>
|
||||
tinruufu <tinruufu@gmail.com>
|
||||
Tom Forbes <tom@tomforb.es>
|
||||
Tom Freudenheim <tom.freudenheim@onepeloton.com>
|
||||
Tom V <tom@viner.tv>
|
||||
Tomas Orsava <torsava@redhat.com>
|
||||
Tomer Chachamu <tomer.chachamu@gmail.com>
|
||||
Tony Beswick <tonybeswick@orcon.net.nz>
|
||||
Tony Zhaocheng Tan <tony@tonytan.io>
|
||||
TonyBeswick <TonyBeswick@users.noreply.github.com>
|
||||
toonarmycaptain <toonarmycaptain@hotmail.com>
|
||||
Toshio Kuratomi <toshio@fedoraproject.org>
|
||||
Travis Swicegood <development@domain51.com>
|
||||
Tzu-ping Chung <uranusjr@gmail.com>
|
||||
Valentin Haenel <valentin.haenel@gmx.de>
|
||||
Victor Stinner <victor.stinner@gmail.com>
|
||||
victorvpaulo <victorvpaulo@gmail.com>
|
||||
Viktor Szépe <viktor@szepe.net>
|
||||
Ville Skyttä <ville.skytta@iki.fi>
|
||||
Vinay Sajip <vinay_sajip@yahoo.co.uk>
|
||||
Vincent Philippon <sindaewoh@gmail.com>
|
||||
Vinicyus Macedo <7549205+vinicyusmacedo@users.noreply.github.com>
|
||||
Vitaly Babiy <vbabiy86@gmail.com>
|
||||
Vladimir Rutsky <rutsky@users.noreply.github.com>
|
||||
W. Trevor King <wking@drexel.edu>
|
||||
Wil Tan <wil@dready.org>
|
||||
Wilfred Hughes <me@wilfred.me.uk>
|
||||
William ML Leslie <william.leslie.ttg@gmail.com>
|
||||
William T Olson <trevor@heytrevor.com>
|
||||
Wilson Mo <wilsonfv@126.com>
|
||||
wim glenn <wim.glenn@gmail.com>
|
||||
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
|
||||
Xavier Fernandez <xav.fernandez@gmail.com>
|
||||
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
|
||||
xoviat <xoviat@users.noreply.github.com>
|
||||
xtreak <tir.karthi@gmail.com>
|
||||
YAMAMOTO Takashi <yamamoto@midokura.com>
|
||||
Yen Chi Hsuan <yan12125@gmail.com>
|
||||
Yeray Diaz Diaz <yeraydiazdiaz@gmail.com>
|
||||
Yoval P <yoval@gmx.com>
|
||||
Yu Jian <askingyj@gmail.com>
|
||||
Yuan Jing Vincent Yan <yyan82@bloomberg.net>
|
||||
Zearin <zearin@gonk.net>
|
||||
Zearin <Zearin@users.noreply.github.com>
|
||||
Zhiping Deng <kofreestyler@gmail.com>
|
||||
Zvezdan Petkovic <zpetkovic@acm.org>
|
||||
Łukasz Langa <lukasz@langa.pl>
|
||||
Семён Марьясин <simeon@maryasin.name>
|
@ -0,0 +1 @@
|
||||
pip
|
@ -0,0 +1,20 @@
|
||||
Copyright (c) 2008-2019 The pip developers (see AUTHORS.txt file)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,98 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: chardet
|
||||
Version: 3.0.4
|
||||
Summary: Universal encoding detector for Python 2 and 3
|
||||
Home-page: https://github.com/chardet/chardet
|
||||
Author: Mark Pilgrim
|
||||
Author-email: mark@diveintomark.org
|
||||
Maintainer: Daniel Blanchard
|
||||
Maintainer-email: dan.blanchard@gmail.com
|
||||
License: LGPL
|
||||
Keywords: encoding,i18n,xml
|
||||
Platform: UNKNOWN
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)
|
||||
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 :: Software Development :: Libraries :: Python Modules
|
||||
Classifier: Topic :: Text Processing :: Linguistic
|
||||
|
||||
Chardet: The Universal Character Encoding Detector
|
||||
--------------------------------------------------
|
||||
|
||||
.. image:: https://img.shields.io/travis/chardet/chardet/stable.svg
|
||||
:alt: Build status
|
||||
:target: https://travis-ci.org/chardet/chardet
|
||||
|
||||
.. image:: https://img.shields.io/coveralls/chardet/chardet/stable.svg
|
||||
:target: https://coveralls.io/r/chardet/chardet
|
||||
|
||||
.. image:: https://img.shields.io/pypi/v/chardet.svg
|
||||
:target: https://warehouse.python.org/project/chardet/
|
||||
:alt: Latest version on PyPI
|
||||
|
||||
.. image:: https://img.shields.io/pypi/l/chardet.svg
|
||||
:alt: License
|
||||
|
||||
|
||||
Detects
|
||||
- ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants)
|
||||
- Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese)
|
||||
- EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese)
|
||||
- EUC-KR, ISO-2022-KR (Korean)
|
||||
- KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic)
|
||||
- ISO-8859-5, windows-1251 (Bulgarian)
|
||||
- ISO-8859-1, windows-1252 (Western European languages)
|
||||
- ISO-8859-7, windows-1253 (Greek)
|
||||
- ISO-8859-8, windows-1255 (Visual and Logical Hebrew)
|
||||
- TIS-620 (Thai)
|
||||
|
||||
.. note::
|
||||
Our ISO-8859-2 and windows-1250 (Hungarian) probers have been temporarily
|
||||
disabled until we can retrain the models.
|
||||
|
||||
Requires Python 2.6, 2.7, or 3.3+.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Install from `PyPI <https://pypi.python.org/pypi/chardet>`_::
|
||||
|
||||
pip install chardet
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
For users, docs are now available at https://chardet.readthedocs.io/.
|
||||
|
||||
Command-line Tool
|
||||
-----------------
|
||||
|
||||
chardet comes with a command-line script which reports on the encodings of one
|
||||
or more files::
|
||||
|
||||
% chardetect somefile someotherfile
|
||||
somefile: windows-1252 with confidence 0.5
|
||||
someotherfile: ascii with confidence 1.0
|
||||
|
||||
About
|
||||
-----
|
||||
|
||||
This is a continuation of Mark Pilgrim's excellent chardet. Previously, two
|
||||
versions needed to be maintained: one that supported python 2.x and one that
|
||||
supported python 3.x. We've recently merged with `Ian Cordasco <https://github.com/sigmavirus24>`_'s
|
||||
`charade <https://github.com/sigmavirus24/charade>`_ fork, so now we have one
|
||||
coherent version that works for Python 2.6+.
|
||||
|
||||
:maintainer: Dan Blanchard
|
||||
|
||||
|
@ -0,0 +1,97 @@
|
||||
chardet/__init__.py,sha256=YsP5wQlsHJ2auF1RZJfypiSrCA7_bQiRm3ES_NI76-Y,1559
|
||||
chardet/big5freq.py,sha256=D_zK5GyzoVsRes0HkLJziltFQX0bKCLOrFe9_xDvO_8,31254
|
||||
chardet/big5prober.py,sha256=kBxHbdetBpPe7xrlb-e990iot64g_eGSLd32lB7_h3M,1757
|
||||
chardet/chardistribution.py,sha256=3woWS62KrGooKyqz4zQSnjFbJpa6V7g02daAibTwcl8,9411
|
||||
chardet/charsetgroupprober.py,sha256=6bDu8YIiRuScX4ca9Igb0U69TA2PGXXDej6Cc4_9kO4,3787
|
||||
chardet/charsetprober.py,sha256=KSmwJErjypyj0bRZmC5F5eM7c8YQgLYIjZXintZNstg,5110
|
||||
chardet/codingstatemachine.py,sha256=VYp_6cyyki5sHgXDSZnXW4q1oelHc3cu9AyQTX7uug8,3590
|
||||
chardet/compat.py,sha256=PKTzHkSbtbHDqS9PyujMbX74q1a8mMpeQTDVsQhZMRw,1134
|
||||
chardet/cp949prober.py,sha256=TZ434QX8zzBsnUvL_8wm4AQVTZ2ZkqEEQL_lNw9f9ow,1855
|
||||
chardet/enums.py,sha256=Aimwdb9as1dJKZaFNUH2OhWIVBVd6ZkJJ_WK5sNY8cU,1661
|
||||
chardet/escprober.py,sha256=kkyqVg1Yw3DIOAMJ2bdlyQgUFQhuHAW8dUGskToNWSc,3950
|
||||
chardet/escsm.py,sha256=RuXlgNvTIDarndvllNCk5WZBIpdCxQ0kcd9EAuxUh84,10510
|
||||
chardet/eucjpprober.py,sha256=iD8Jdp0ISRjgjiVN7f0e8xGeQJ5GM2oeZ1dA8nbSeUw,3749
|
||||
chardet/euckrfreq.py,sha256=-7GdmvgWez4-eO4SuXpa7tBiDi5vRXQ8WvdFAzVaSfo,13546
|
||||
chardet/euckrprober.py,sha256=MqFMTQXxW4HbzIpZ9lKDHB3GN8SP4yiHenTmf8g_PxY,1748
|
||||
chardet/euctwfreq.py,sha256=No1WyduFOgB5VITUA7PLyC5oJRNzRyMbBxaKI1l16MA,31621
|
||||
chardet/euctwprober.py,sha256=13p6EP4yRaxqnP4iHtxHOJ6R2zxHq1_m8hTRjzVZ95c,1747
|
||||
chardet/gb2312freq.py,sha256=JX8lsweKLmnCwmk8UHEQsLgkr_rP_kEbvivC4qPOrlc,20715
|
||||
chardet/gb2312prober.py,sha256=gGvIWi9WhDjE-xQXHvNIyrnLvEbMAYgyUSZ65HUfylw,1754
|
||||
chardet/hebrewprober.py,sha256=c3SZ-K7hvyzGY6JRAZxJgwJ_sUS9k0WYkvMY00YBYFo,13838
|
||||
chardet/jisfreq.py,sha256=vpmJv2Bu0J8gnMVRPHMFefTRvo_ha1mryLig8CBwgOg,25777
|
||||
chardet/jpcntx.py,sha256=PYlNqRUQT8LM3cT5FmHGP0iiscFlTWED92MALvBungo,19643
|
||||
chardet/langbulgarianmodel.py,sha256=1HqQS9Pbtnj1xQgxitJMvw8X6kKr5OockNCZWfEQrPE,12839
|
||||
chardet/langcyrillicmodel.py,sha256=LODajvsetH87yYDDQKA2CULXUH87tI223dhfjh9Zx9c,17948
|
||||
chardet/langgreekmodel.py,sha256=8YAW7bU8YwSJap0kIJSbPMw1BEqzGjWzqcqf0WgUKAA,12688
|
||||
chardet/langhebrewmodel.py,sha256=JSnqmE5E62tDLTPTvLpQsg5gOMO4PbdWRvV7Avkc0HA,11345
|
||||
chardet/langhungarianmodel.py,sha256=RhapYSG5l0ZaO-VV4Fan5sW0WRGQqhwBM61yx3yxyOA,12592
|
||||
chardet/langthaimodel.py,sha256=8l0173Gu_W6G8mxmQOTEF4ls2YdE7FxWf3QkSxEGXJQ,11290
|
||||
chardet/langturkishmodel.py,sha256=W22eRNJsqI6uWAfwXSKVWWnCerYqrI8dZQTm_M0lRFk,11102
|
||||
chardet/latin1prober.py,sha256=S2IoORhFk39FEFOlSFWtgVybRiP6h7BlLldHVclNkU8,5370
|
||||
chardet/mbcharsetprober.py,sha256=AR95eFH9vuqSfvLQZN-L5ijea25NOBCoXqw8s5O9xLQ,3413
|
||||
chardet/mbcsgroupprober.py,sha256=h6TRnnYq2OxG1WdD5JOyxcdVpn7dG0q-vB8nWr5mbh4,2012
|
||||
chardet/mbcssm.py,sha256=SY32wVIF3HzcjY3BaEspy9metbNSKxIIB0RKPn7tjpI,25481
|
||||
chardet/sbcharsetprober.py,sha256=LDSpCldDCFlYwUkGkwD2oFxLlPWIWXT09akH_2PiY74,5657
|
||||
chardet/sbcsgroupprober.py,sha256=1IprcCB_k1qfmnxGC6MBbxELlKqD3scW6S8YIwdeyXA,3546
|
||||
chardet/sjisprober.py,sha256=IIt-lZj0WJqK4rmUZzKZP4GJlE8KUEtFYVuY96ek5MQ,3774
|
||||
chardet/universaldetector.py,sha256=qL0174lSZE442eB21nnktT9_VcAye07laFWUeUrjttY,12485
|
||||
chardet/utf8prober.py,sha256=IdD8v3zWOsB8OLiyPi-y_fqwipRFxV9Nc1eKBLSuIEw,2766
|
||||
chardet/version.py,sha256=sp3B08mrDXB-pf3K9fqJ_zeDHOCLC8RrngQyDFap_7g,242
|
||||
chardet/cli/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
||||
chardet/cli/chardetect.py,sha256=YBO8L4mXo0WR6_-Fjh_8QxPBoEBNqB9oNxNrdc54AQs,2738
|
||||
chardet-3.0.4.dist-info/AUTHORS.txt,sha256=RtqU9KfonVGhI48DAA4-yTOBUhBtQTjFhaDzHoyh7uU,21518
|
||||
chardet-3.0.4.dist-info/LICENSE.txt,sha256=W6Ifuwlk-TatfRU2LR7W1JMcyMj5_y1NkRkOEJvnRDE,1090
|
||||
chardet-3.0.4.dist-info/METADATA,sha256=o6XNN41EUioeDnklH1-8haOSjI60AkAaI823ANFkOM4,3304
|
||||
chardet-3.0.4.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
|
||||
chardet-3.0.4.dist-info/entry_points.txt,sha256=fAMmhu5eJ-zAJ-smfqQwRClQ3-nozOCmvJ6-E8lgGJo,60
|
||||
chardet-3.0.4.dist-info/top_level.txt,sha256=AowzBbZy4x8EirABDdJSLJZMkJ_53iIag8xfKR6D7kI,8
|
||||
chardet-3.0.4.dist-info/RECORD,,
|
||||
chardet/gb2312freq.cpython-38.pyc,,
|
||||
chardet-3.0.4.dist-info/__pycache__,,
|
||||
chardet/langcyrillicmodel.cpython-38.pyc,,
|
||||
chardet/escprober.cpython-38.pyc,,
|
||||
chardet/version.cpython-38.pyc,,
|
||||
chardet/cli/__pycache__,,
|
||||
chardet/big5prober.cpython-38.pyc,,
|
||||
chardet/langturkishmodel.cpython-38.pyc,,
|
||||
chardet/eucjpprober.cpython-38.pyc,,
|
||||
chardet/sjisprober.cpython-38.pyc,,
|
||||
chardet/__pycache__,,
|
||||
chardet/cli/chardetect.cpython-38.pyc,,
|
||||
chardet/utf8prober.cpython-38.pyc,,
|
||||
chardet/gb2312prober.cpython-38.pyc,,
|
||||
chardet-3.0.4.virtualenv,,
|
||||
chardet/langhungarianmodel.cpython-38.pyc,,
|
||||
chardet/compat.cpython-38.pyc,,
|
||||
chardet/euctwprober.cpython-38.pyc,,
|
||||
chardet/enums.cpython-38.pyc,,
|
||||
chardet/big5freq.cpython-38.pyc,,
|
||||
chardet/euckrfreq.cpython-38.pyc,,
|
||||
chardet/langthaimodel.cpython-38.pyc,,
|
||||
chardet/hebrewprober.cpython-38.pyc,,
|
||||
chardet/cp949prober.cpython-38.pyc,,
|
||||
../../../bin/chardetect,,
|
||||
chardet/universaldetector.cpython-38.pyc,,
|
||||
chardet/euctwfreq.cpython-38.pyc,,
|
||||
chardet/langgreekmodel.cpython-38.pyc,,
|
||||
chardet-3.0.4.dist-info/INSTALLER,,
|
||||
../../../bin/chardetect3,,
|
||||
chardet/chardistribution.cpython-38.pyc,,
|
||||
chardet/jisfreq.cpython-38.pyc,,
|
||||
chardet/jpcntx.cpython-38.pyc,,
|
||||
chardet/latin1prober.cpython-38.pyc,,
|
||||
chardet/mbcssm.cpython-38.pyc,,
|
||||
chardet/charsetgroupprober.cpython-38.pyc,,
|
||||
chardet/sbcharsetprober.cpython-38.pyc,,
|
||||
../../../bin/chardetect-3.8,,
|
||||
chardet/sbcsgroupprober.cpython-38.pyc,,
|
||||
chardet/escsm.cpython-38.pyc,,
|
||||
chardet/mbcsgroupprober.cpython-38.pyc,,
|
||||
chardet/euckrprober.cpython-38.pyc,,
|
||||
chardet/langbulgarianmodel.cpython-38.pyc,,
|
||||
chardet/langhebrewmodel.cpython-38.pyc,,
|
||||
chardet/cli/__init__.cpython-38.pyc,,
|
||||
chardet/charsetprober.cpython-38.pyc,,
|
||||
chardet/__init__.cpython-38.pyc,,
|
||||
chardet/codingstatemachine.cpython-38.pyc,,
|
||||
chardet/mbcharsetprober.cpython-38.pyc,,
|
@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: bdist_wheel (0.34.2)
|
||||
Root-Is-Purelib: true
|
||||
Tag: py2-none-any
|
||||
Tag: py3-none-any
|
||||
|
@ -0,0 +1,3 @@
|
||||
[console_scripts]
|
||||
chardetect = chardet.cli.chardetect:main
|
||||
|
@ -0,0 +1 @@
|
||||
chardet
|
39
.tox/pep8/lib/python3.8/site-packages/chardet/__init__.py
Normal file
39
.tox/pep8/lib/python3.8/site-packages/chardet/__init__.py
Normal file
@ -0,0 +1,39 @@
|
||||
######################## BEGIN LICENSE BLOCK ########################
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
||||
# 02110-1301 USA
|
||||
######################### END LICENSE BLOCK #########################
|
||||
|
||||
|
||||
from .compat import PY2, PY3
|
||||
from .universaldetector import UniversalDetector
|
||||
from .version import __version__, VERSION
|
||||
|
||||
|
||||
def detect(byte_str):
|
||||
"""
|
||||
Detect the encoding of the given byte string.
|
||||
|
||||
:param byte_str: The byte sequence to examine.
|
||||
:type byte_str: ``bytes`` or ``bytearray``
|
||||
"""
|
||||
if not isinstance(byte_str, bytearray):
|
||||
if not isinstance(byte_str, bytes):
|
||||
raise TypeError('Expected object of type bytes or bytearray, got: '
|
||||
'{0}'.format(type(byte_str)))
|
||||
else:
|
||||
byte_str = bytearray(byte_str)
|
||||
detector = UniversalDetector()
|
||||
detector.feed(byte_str)
|
||||
return detector.close()
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user