Restarted VENV

This commit is contained in:
quentin 2025-05-30 16:33:49 -05:00
parent 5258a6787c
commit ace8f0524f
5341 changed files with 10 additions and 1397064 deletions

6
.idea/BlendCharmSettings.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BlendCharmPersistentData">
<option name="blenderSettings" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&#10;&lt;blenderSettingsData&gt;&#10; &lt;showVerbose&gt;false&lt;/showVerbose&gt;&#10;&lt;/blenderSettingsData&gt;&#10;" />
</component>
</project>

View File

@ -11,7 +11,7 @@ password = open("../sqlPass.txt", 'r').read()
scheduler = AsyncIOScheduler({
'apscheduler.jobstores.default': {
'type': 'sqlalchemy',
'url': f'mysql+pymysql://discord_bot:{password}@localhost:5618/discord_bot?charset=utf8mb4',
'url': f'mysql+pymysql://quentin:{password}@192.168.1.52:5618/discord_bot?charset=utf8mb4',
},
'apscheduler.job_defaults.coalesce': 'True',
'apscheduler.timezone': 'America/Chicago'
@ -23,9 +23,9 @@ mcSelf = None
def get_con() -> pymysql.Connection:
return pymysql.connect(host='localhost',
return pymysql.connect(host='192.168.1.52',
port=5618,
user='discord_bot',
user='quentin',
password=f'{password}',
db='minecraft',
charset='utf8mb4',
@ -122,7 +122,7 @@ class McRoll(commands.Cog):
async def main_poll_recursion(self, choices, channelId):
self.pollMessageId = (await self.poll(choices, channelId)).id
scheduler.add_job(get_poll_results, 'date',
run_date=(datetime.now() + timedelta(days=1)),
run_date=(datetime.now() + timedelta(seconds=6)),
args=[choices, self.pollMessageId, channelId],
coalesce=True)

View File

@ -1,34 +0,0 @@
import discord
from discord.ext.commands import Bot
token = open("../token.txt")
cogs = ["Modules.TMC.autoReply.Join", "Modules.TMC.autoReply.Leave",
"Modules.TMC.McRoll", "Modules.TMC.ParseForIssues", "Modules.TMC.doym"]
prefix = 'o!'
intents = discord.Intents().all()
"""
tokens = open("tokens.txt", 'r')
tokens = tokens.readlines()
bot_running = input("Would you like to run the test bot[T] or the default[D] :: ")
if bot_running == 'T':
token = tokens[0].rstrip()
elif bot_running == 'D':
token = tokens[1].rstrip()
tokens = ''
"""
client = Bot(command_prefix=prefix, intents=intents)
client.remove_command("help")
@client.event
async def on_ready():
print('Logged in as:')
print('{0.user}'.format(client))
for cog in cogs:
client.load_extension(cog)
client.run(token.read())

View File

@ -1,241 +0,0 @@
<#
.Synopsis
Activate a Python virtual environment for the current PowerShell session.
.Description
Pushes the python executable for a virtual environment to the front of the
$Env:PATH environment variable and sets the prompt to signify that you are
in a Python virtual environment. Makes use of the command line switches as
well as the `pyvenv.cfg` file values present in the virtual environment.
.Parameter VenvDir
Path to the directory that contains the virtual environment to activate. The
default value for this is the parent of the directory that the Activate.ps1
script is located within.
.Parameter Prompt
The prompt prefix to display when this virtual environment is activated. By
default, this prompt is the name of the virtual environment folder (VenvDir)
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
.Example
Activate.ps1
Activates the Python virtual environment that contains the Activate.ps1 script.
.Example
Activate.ps1 -Verbose
Activates the Python virtual environment that contains the Activate.ps1 script,
and shows extra information about the activation as it executes.
.Example
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
Activates the Python virtual environment located in the specified location.
.Example
Activate.ps1 -Prompt "MyPython"
Activates the Python virtual environment that contains the Activate.ps1 script,
and prefixes the current prompt with the specified string (surrounded in
parentheses) while the virtual environment is active.
.Notes
On Windows, it may be required to enable this Activate.ps1 script by setting the
execution policy for the user. You can do this by issuing the following PowerShell
command:
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
For more information on Execution Policies:
https://go.microsoft.com/fwlink/?LinkID=135170
#>
Param(
[Parameter(Mandatory = $false)]
[String]
$VenvDir,
[Parameter(Mandatory = $false)]
[String]
$Prompt
)
<# Function declarations --------------------------------------------------- #>
<#
.Synopsis
Remove all shell session elements added by the Activate script, including the
addition of the virtual environment's Python executable from the beginning of
the PATH variable.
.Parameter NonDestructive
If present, do not remove this function from the global namespace for the
session.
#>
function global:deactivate ([switch]$NonDestructive) {
# Revert to original values
# The prior prompt:
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
}
# The prior PYTHONHOME:
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
}
# The prior PATH:
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
}
# Just remove the VIRTUAL_ENV altogether:
if (Test-Path -Path Env:VIRTUAL_ENV) {
Remove-Item -Path env:VIRTUAL_ENV
}
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
}
# Leave deactivate function in the global namespace if requested:
if (-not $NonDestructive) {
Remove-Item -Path function:deactivate
}
}
<#
.Description
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
given folder, and returns them in a map.
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
two strings separated by `=` (with any amount of whitespace surrounding the =)
then it is considered a `key = value` line. The left hand string is the key,
the right hand is the value.
If the value starts with a `'` or a `"` then the first and last character is
stripped from the value before being captured.
.Parameter ConfigDir
Path to the directory that contains the `pyvenv.cfg` file.
#>
function Get-PyVenvConfig(
[String]
$ConfigDir
) {
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
# An empty map will be returned if no config file is found.
$pyvenvConfig = @{ }
if ($pyvenvConfigPath) {
Write-Verbose "File exists, parse `key = value` lines"
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
$pyvenvConfigContent | ForEach-Object {
$keyval = $PSItem -split "\s*=\s*", 2
if ($keyval[0] -and $keyval[1]) {
$val = $keyval[1]
# Remove extraneous quotations around a string value.
if ("'""".Contains($val.Substring(0, 1))) {
$val = $val.Substring(1, $val.Length - 2)
}
$pyvenvConfig[$keyval[0]] = $val
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
}
}
}
return $pyvenvConfig
}
<# Begin Activate script --------------------------------------------------- #>
# Determine the containing directory of this script
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$VenvExecDir = Get-Item -Path $VenvExecPath
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
# Set values required in priority: CmdLine, ConfigFile, Default
# First, get the location of the virtual environment, it might not be
# VenvExecDir if specified on the command line.
if ($VenvDir) {
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
}
else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
Write-Verbose "VenvDir=$VenvDir"
}
# Next, read the `pyvenv.cfg` file to determine any required value such
# as `prompt`.
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
# Next, set the prompt from the command line, or the config file, or
# just use the name of the virtual environment folder.
if ($Prompt) {
Write-Verbose "Prompt specified as argument, using '$Prompt'"
}
else {
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
$Prompt = $pyvenvCfg['prompt'];
}
else {
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)"
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
$Prompt = Split-Path -Path $venvDir -Leaf
}
}
Write-Verbose "Prompt = '$Prompt'"
Write-Verbose "VenvDir='$VenvDir'"
# Deactivate any currently active virtual environment, but leave the
# deactivate function in place.
deactivate -nondestructive
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
# that there is an activated venv.
$env:VIRTUAL_ENV = $VenvDir
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
Write-Verbose "Setting prompt to '$Prompt'"
# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT { "" }
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
function global:prompt {
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
_OLD_VIRTUAL_PROMPT
}
}
# Clear PYTHONHOME
if (Test-Path -Path Env:PYTHONHOME) {
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
Remove-Item -Path Env:PYTHONHOME
}
# Add the venv to the PATH
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"

View File

@ -1,76 +0,0 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r
fi
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV="/home/discord_bot/bot/venv-linux"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
if [ "x(venv-linux) " != x ] ; then
PS1="(venv-linux) ${PS1:-}"
else
if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then
# special case for Aspen magic directories
# see https://aspen.io/
PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1"
else
PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
fi
export PS1
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r
fi

View File

@ -1,37 +0,0 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV "/home/discord_bot/bot/venv-linux"
set _OLD_VIRTUAL_PATH="$PATH"
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
set _OLD_VIRTUAL_PROMPT="$prompt"
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
if ("venv-linux" != "") then
set env_name = "venv-linux"
else
if (`basename "VIRTUAL_ENV"` == "__") then
# special case for Aspen magic directories
# see https://aspen.io/
set env_name = `basename \`dirname "$VIRTUAL_ENV"\``
else
set env_name = `basename "$VIRTUAL_ENV"`
endif
endif
set prompt = "[$env_name] $prompt"
unset env_name
endif
alias pydoc python -m pydoc
rehash

View File

@ -1,75 +0,0 @@
# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org)
# you cannot run it directly
function deactivate -d "Exit virtualenv and return to normal shell environment"
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
set -gx PATH $_OLD_VIRTUAL_PATH
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
functions -e fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
end
set -e VIRTUAL_ENV
if test "$argv[1]" != "nondestructive"
# Self destruct!
functions -e deactivate
end
end
# unset irrelevant variables
deactivate nondestructive
set -gx VIRTUAL_ENV "/home/discord_bot/bot/venv-linux"
set -gx _OLD_VIRTUAL_PATH $PATH
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
# unset PYTHONHOME if set
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# fish uses a function instead of an env var to generate the prompt.
# save the current fish_prompt function as the function _old_fish_prompt
functions -c fish_prompt _old_fish_prompt
# with the original prompt function renamed, we can override with our own.
function fish_prompt
# Save the return status of the last command
set -l old_status $status
# Prompt override?
if test -n "(venv-linux) "
printf "%s%s" "(venv-linux) " (set_color normal)
else
# ...Otherwise, prepend env
set -l _checkbase (basename "$VIRTUAL_ENV")
if test $_checkbase = "__"
# special case for Aspen magic directories
# see https://aspen.io/
printf "%s[%s]%s " (set_color -b blue white) (basename (dirname "$VIRTUAL_ENV")) (set_color normal)
else
printf "%s(%s)%s" (set_color -b blue white) (basename "$VIRTUAL_ENV") (set_color normal)
end
end
# Restore the return status of the previous command.
echo "exit $old_status" | .
_old_fish_prompt
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from chardet.cli.chardetect import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- 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())

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- 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())

View File

@ -1,8 +0,0 @@
#!/home/discord_bot/bot/venv-linux/bin/python3
# -*- 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())

View File

@ -1 +0,0 @@
python3

View File

@ -1 +0,0 @@
/usr/lib/python-exec/python3.8/python3

View File

@ -1,19 +0,0 @@
This is the MIT license: http://www.opensource.org/licenses/mit-license.php
Copyright (c) Alex Grönholm
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.

View File

@ -1,140 +0,0 @@
Metadata-Version: 2.1
Name: APScheduler
Version: 3.7.0
Summary: In-process task scheduler with Cron-like capabilities
Home-page: https://github.com/agronholm/apscheduler
Author: Alex Grönholm
Author-email: apscheduler@nextday.fi
License: MIT
Keywords: scheduling cron
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4
Requires-Dist: setuptools (>=0.7)
Requires-Dist: six (>=1.4.0)
Requires-Dist: pytz
Requires-Dist: tzlocal (~=2.0)
Requires-Dist: funcsigs ; python_version < "3.5"
Requires-Dist: futures ; python_version == "2.7"
Provides-Extra: asyncio
Requires-Dist: trollius ; (python_version == "2.7") and extra == 'asyncio'
Provides-Extra: doc
Requires-Dist: sphinx ; extra == 'doc'
Requires-Dist: sphinx-rtd-theme ; extra == 'doc'
Provides-Extra: gevent
Requires-Dist: gevent ; extra == 'gevent'
Provides-Extra: mongodb
Requires-Dist: pymongo (>=3.0) ; extra == 'mongodb'
Provides-Extra: redis
Requires-Dist: redis (>=3.0) ; extra == 'redis'
Provides-Extra: rethinkdb
Requires-Dist: rethinkdb (>=2.4.0) ; extra == 'rethinkdb'
Provides-Extra: sqlalchemy
Requires-Dist: sqlalchemy (>=0.8) ; extra == 'sqlalchemy'
Provides-Extra: testing
Requires-Dist: pytest (<6) ; extra == 'testing'
Requires-Dist: pytest-cov ; extra == 'testing'
Requires-Dist: pytest-tornado5 ; extra == 'testing'
Requires-Dist: mock ; (python_version == "2.7") and extra == 'testing'
Requires-Dist: pytest-asyncio (<0.6) ; (python_version == "3.4") and extra == 'testing'
Requires-Dist: pytest-asyncio ; (python_version >= "3.5") and extra == 'testing'
Provides-Extra: tornado
Requires-Dist: tornado (>=4.3) ; extra == 'tornado'
Provides-Extra: twisted
Requires-Dist: twisted ; extra == 'twisted'
Provides-Extra: zookeeper
Requires-Dist: kazoo ; extra == 'zookeeper'
.. image:: https://travis-ci.com/agronholm/apscheduler.svg?branch=master
:target: https://travis-ci.com/agronholm/apscheduler
:alt: Build Status
.. image:: https://coveralls.io/repos/github/agronholm/apscheduler/badge.svg?branch=master
:target: https://coveralls.io/github/agronholm/apscheduler?branch=master
:alt: Code Coverage
Advanced Python Scheduler (APScheduler) is a Python library that lets you schedule your Python code
to be executed later, either just once or periodically. You can add new jobs or remove old ones on
the fly as you please. If you store your jobs in a database, they will also survive scheduler
restarts and maintain their state. When the scheduler is restarted, it will then run all the jobs
it should have run while it was offline [#f1]_.
Among other things, APScheduler can be used as a cross-platform, application specific replacement
to platform specific schedulers, such as the cron daemon or the Windows task scheduler. Please
note, however, that APScheduler is **not** a daemon or service itself, nor does it come with any
command line tools. It is primarily meant to be run inside existing applications. That said,
APScheduler does provide some building blocks for you to build a scheduler service or to run a
dedicated scheduler process.
APScheduler has three built-in scheduling systems you can use:
* Cron-style scheduling (with optional start/end times)
* Interval-based execution (runs jobs on even intervals, with optional start/end times)
* One-off delayed execution (runs jobs once, on a set date/time)
You can mix and match scheduling systems and the backends where the jobs are stored any way you
like. Supported backends for storing jobs include:
* Memory
* `SQLAlchemy <http://www.sqlalchemy.org/>`_ (any RDBMS supported by SQLAlchemy works)
* `MongoDB <http://www.mongodb.org/>`_
* `Redis <http://redis.io/>`_
* `RethinkDB <https://www.rethinkdb.com/>`_
* `ZooKeeper <https://zookeeper.apache.org/>`_
APScheduler also integrates with several common Python frameworks, like:
* `asyncio <http://docs.python.org/3.4/library/asyncio.html>`_ (:pep:`3156`)
* `gevent <http://www.gevent.org/>`_
* `Tornado <http://www.tornadoweb.org/>`_
* `Twisted <http://twistedmatrix.com/>`_
* `Qt <http://qt-project.org/>`_ (using either
`PyQt <http://www.riverbankcomputing.com/software/pyqt/intro>`_ ,
`PySide2 <https://wiki.qt.io/Qt_for_Python>`_ or
`PySide <http://qt-project.org/wiki/PySide>`_)
There are third party solutions for integrating APScheduler with other frameworks:
* `Django <https://github.com/jarekwg/django-apscheduler>`_
* `Flask <https://github.com/viniciuschiele/flask-apscheduler>`_
.. [#f1] The cutoff period for this is also configurable.
Documentation
-------------
Documentation can be found `here <http://readthedocs.org/docs/apscheduler/en/latest/>`_.
Source
------
The source can be browsed at `Github <https://github.com/agronholm/apscheduler>`_.
Reporting bugs
--------------
A `bug tracker <https://github.com/agronholm/apscheduler/issues>`_ is provided by Github.
Getting help
------------
If you have problems or other questions, you can either:
* Ask in the `apscheduler <https://gitter.im/apscheduler/Lobby>`_ room on Gitter
* Ask on the `APScheduler Google group <http://groups.google.com/group/apscheduler>`_, or
* Ask on `StackOverflow <http://stackoverflow.com/questions/tagged/apscheduler>`_ and tag your
question with the ``apscheduler`` tag

View File

@ -1,84 +0,0 @@
APScheduler-3.7.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
APScheduler-3.7.0.dist-info/LICENSE.txt,sha256=YWP3mH37ONa8MgzitwsvArhivEESZRbVUu8c1DJH51g,1130
APScheduler-3.7.0.dist-info/METADATA,sha256=nv0HEv4xOwQh-OD13duoBbl8yiRqrg2egM15MAbpoRk,5685
APScheduler-3.7.0.dist-info/RECORD,,
APScheduler-3.7.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
APScheduler-3.7.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110
APScheduler-3.7.0.dist-info/entry_points.txt,sha256=7RgkYN_OYyCUQtIGhj-UNcelnIjsNm7nC9rogdMQh3U,1148
APScheduler-3.7.0.dist-info/top_level.txt,sha256=O3oMCWxG-AHkecUoO6Ze7-yYjWrttL95uHO8-RFdYvE,12
apscheduler/__init__.py,sha256=qFEK2ysRBcLiYmm3deyJJ1avUOugaM_nCGHMD42WMBw,380
apscheduler/__pycache__/__init__.cpython-38.pyc,,
apscheduler/__pycache__/events.cpython-38.pyc,,
apscheduler/__pycache__/job.cpython-38.pyc,,
apscheduler/__pycache__/util.cpython-38.pyc,,
apscheduler/events.py,sha256=KRMTDQUS6d2uVnrQvPoz3ZPV5V9XKsCAZLsgx913FFo,3593
apscheduler/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
apscheduler/executors/__pycache__/__init__.cpython-38.pyc,,
apscheduler/executors/__pycache__/asyncio.cpython-38.pyc,,
apscheduler/executors/__pycache__/base.cpython-38.pyc,,
apscheduler/executors/__pycache__/base_py3.cpython-38.pyc,,
apscheduler/executors/__pycache__/debug.cpython-38.pyc,,
apscheduler/executors/__pycache__/gevent.cpython-38.pyc,,
apscheduler/executors/__pycache__/pool.cpython-38.pyc,,
apscheduler/executors/__pycache__/tornado.cpython-38.pyc,,
apscheduler/executors/__pycache__/twisted.cpython-38.pyc,,
apscheduler/executors/asyncio.py,sha256=ji5f6Qm2uGhov-3w52CXHZi8jc5U_gS56lisQylKTBQ,2087
apscheduler/executors/base.py,sha256=hogiMc_t-huw6BMod0HEeY2FhRNmAAUyNNuBHvIX31M,5336
apscheduler/executors/base_py3.py,sha256=8WOpTeX1NA-spdbEQ1oJMh5T2O_t2UdsaSnAh-iEWe0,1831
apscheduler/executors/debug.py,sha256=15_ogSBzl8RRCfBYDnkIV2uMH8cLk1KImYmBa_NVGpc,573
apscheduler/executors/gevent.py,sha256=aulrNmoefyBgrOkH9awRhFiXIDnSCnZ4U0o0_JXIXgc,777
apscheduler/executors/pool.py,sha256=6FEUTMl3WCRKebTqwCvpl7B2L9y0GYH16ULs4y_VNJg,2107
apscheduler/executors/tornado.py,sha256=DU75VaQ9R6nBuy8lbPUvDKUgsuJcZqwAvURC5vg3r6w,1780
apscheduler/executors/twisted.py,sha256=bRoU0C4BoVcS6_BjKD5wfUs0IJpGkmLsRAcMH2rJJss,778
apscheduler/job.py,sha256=JCRERBpfWLuomPiNNHX-jrluEwfHkdscEmz4i0Y8rao,11216
apscheduler/jobstores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
apscheduler/jobstores/__pycache__/__init__.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/base.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/memory.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/mongodb.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/redis.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/rethinkdb.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/sqlalchemy.cpython-38.pyc,,
apscheduler/jobstores/__pycache__/zookeeper.cpython-38.pyc,,
apscheduler/jobstores/base.py,sha256=DXzSW9XscueHZHMvy1qFiG-vYqUl_MMv0n0uBSZWXGo,4523
apscheduler/jobstores/memory.py,sha256=ZxWiKsqfsCHFvac-6X9BztuhnuSxlOYi1dhT6g-pjQo,3655
apscheduler/jobstores/mongodb.py,sha256=JI6t3PanXsxHjj6fzxMdzcZBy5ytV84ZPU_WWB5zEA4,5335
apscheduler/jobstores/redis.py,sha256=kjQDIzPXz-Yq976U9HK3aMkcCI_QRLKgTADQWKewtik,5483
apscheduler/jobstores/rethinkdb.py,sha256=k1rSLYJqejuhQxJY3pXwHAQYcpZ1QFJsoQ8n0oEu5MM,5863
apscheduler/jobstores/sqlalchemy.py,sha256=alfkAEIzwSJKbYYXGc4G8DTeBsLdGhtac8ebjYvoVT0,6134
apscheduler/jobstores/zookeeper.py,sha256=avGLXaJGjHD0F7uG6rLJ2gg_TXNqXDEM4PqOu56f-Xg,6363
apscheduler/schedulers/__init__.py,sha256=jM63xA_K7GSToBenhsz-SCcqfhk1pdEVb6ajwoO5Kqg,406
apscheduler/schedulers/__pycache__/__init__.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/asyncio.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/background.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/base.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/blocking.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/gevent.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/qt.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/tornado.cpython-38.pyc,,
apscheduler/schedulers/__pycache__/twisted.cpython-38.pyc,,
apscheduler/schedulers/asyncio.py,sha256=BuSE8re61ytQtUNRw197iJdhOepaIexr3-WYEDAjhR0,2230
apscheduler/schedulers/background.py,sha256=751p-f5Di6pY4x6UXlZggpxQ5k2ObJ_Q5wSeWmKHS8o,1566
apscheduler/schedulers/base.py,sha256=gvC0rjzSljDPxn0iGu-DyCy-9Fh48NJoY4-VeoZzDZo,43237
apscheduler/schedulers/blocking.py,sha256=8nubfJ4PoUnAkEY6WRQG4COzG4SxGyW9PjuVPhDAbsk,985
apscheduler/schedulers/gevent.py,sha256=csPBvV75FGcboXXsdex6fCD7J54QgBddYNdWj62ZO9g,1031
apscheduler/schedulers/qt.py,sha256=vH2ZHL0PkFTcnHfnsU_tnI3u7bVQ81yy2v_is-575jQ,1463
apscheduler/schedulers/tornado.py,sha256=D9Vaq3Ee9EFiXa1jDy9tedI048gR_YT_LAFUWqO_uEw,1926
apscheduler/schedulers/twisted.py,sha256=D5EBjjMRtMBxy0_aAURcULAI8Ky2IvCTr9tK9sO1rYk,1844
apscheduler/triggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
apscheduler/triggers/__pycache__/__init__.cpython-38.pyc,,
apscheduler/triggers/__pycache__/base.cpython-38.pyc,,
apscheduler/triggers/__pycache__/combining.cpython-38.pyc,,
apscheduler/triggers/__pycache__/date.cpython-38.pyc,,
apscheduler/triggers/__pycache__/interval.cpython-38.pyc,,
apscheduler/triggers/base.py,sha256=BvBJdOnIeVClXPXeInzYK25cN64jAc4a9IiEQucSiVk,1355
apscheduler/triggers/combining.py,sha256=klaSoBp1kyrPX5D3gBpNTlsGKjks5QeKPW5JN_MVs30,3449
apscheduler/triggers/cron/__init__.py,sha256=XVdyymFsnXQMw57gpU1M0vmJo5oGdQ_t8BAkhEFNMFA,9236
apscheduler/triggers/cron/__pycache__/__init__.cpython-38.pyc,,
apscheduler/triggers/cron/__pycache__/expressions.cpython-38.pyc,,
apscheduler/triggers/cron/__pycache__/fields.cpython-38.pyc,,
apscheduler/triggers/cron/expressions.py,sha256=hu1kq0mKvivIw7U0D0Nnrbuk3q01dCuhZ7SHRPw6qhI,9184
apscheduler/triggers/cron/fields.py,sha256=NWPClh1NgSOpTlJ3sm1TXM_ViC2qJGKWkd_vg0xsw7o,3510
apscheduler/triggers/date.py,sha256=RrfB1PNO9G9e91p1BOf-y_TseVHQQR-KJPhNdPpAHcU,1705
apscheduler/triggers/interval.py,sha256=M4y6APgeP9DEh_XKHbFcaUKFk7wAb0-XoSO50bR4qXc,4369
apscheduler/util.py,sha256=3gKKUbW2fyEa5LkYCGHnaWSk2jqj_HreQbE4SrJiDxc,14087

View File

@ -1,6 +0,0 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.36.2)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any

View File

@ -1,24 +0,0 @@
[apscheduler.executors]
asyncio = apscheduler.executors.asyncio:AsyncIOExecutor [asyncio]
debug = apscheduler.executors.debug:DebugExecutor
gevent = apscheduler.executors.gevent:GeventExecutor [gevent]
processpool = apscheduler.executors.pool:ProcessPoolExecutor
threadpool = apscheduler.executors.pool:ThreadPoolExecutor
tornado = apscheduler.executors.tornado:TornadoExecutor [tornado]
twisted = apscheduler.executors.twisted:TwistedExecutor [twisted]
[apscheduler.jobstores]
memory = apscheduler.jobstores.memory:MemoryJobStore
mongodb = apscheduler.jobstores.mongodb:MongoDBJobStore [mongodb]
redis = apscheduler.jobstores.redis:RedisJobStore [redis]
rethinkdb = apscheduler.jobstores.rethinkdb:RethinkDBJobStore [rethinkdb]
sqlalchemy = apscheduler.jobstores.sqlalchemy:SQLAlchemyJobStore [sqlalchemy]
zookeeper = apscheduler.jobstores.zookeeper:ZooKeeperJobStore [zookeeper]
[apscheduler.triggers]
and = apscheduler.triggers.combining:AndTrigger
cron = apscheduler.triggers.cron:CronTrigger
date = apscheduler.triggers.date:DateTrigger
interval = apscheduler.triggers.interval:IntervalTrigger
or = apscheduler.triggers.combining:OrTrigger

View File

@ -1,19 +0,0 @@
Copyright (c) 2010, 2013 PyMySQL contributors
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.

View File

@ -1,180 +0,0 @@
Metadata-Version: 2.1
Name: PyMySQL
Version: 1.0.2
Summary: Pure Python MySQL Driver
Home-page: https://github.com/PyMySQL/PyMySQL/
Author: yutaka.matsubara
Author-email: yutaka.matsubara@gmail.com
Maintainer: Inada Naoki
Maintainer-email: songofacandy@gmail.com
License: "MIT"
Project-URL: Documentation, https://pymysql.readthedocs.io/
Keywords: MySQL
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Database
Requires-Python: >=3.6
Provides-Extra: ed25519
Requires-Dist: PyNaCl (>=1.4.0) ; extra == 'ed25519'
Provides-Extra: rsa
Requires-Dist: cryptography ; extra == 'rsa'
.. image:: https://readthedocs.org/projects/pymysql/badge/?version=latest
:target: https://pymysql.readthedocs.io/
:alt: Documentation Status
.. image:: https://coveralls.io/repos/PyMySQL/PyMySQL/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/PyMySQL/PyMySQL?branch=master
.. image:: https://img.shields.io/lgtm/grade/python/g/PyMySQL/PyMySQL.svg?logo=lgtm&logoWidth=18
:target: https://lgtm.com/projects/g/PyMySQL/PyMySQL/context:python
PyMySQL
=======
.. contents:: Table of Contents
:local:
This package contains a pure-Python MySQL client library, based on `PEP 249`_.
Most public APIs are compatible with mysqlclient and MySQLdb.
NOTE: PyMySQL doesn't support low level APIs `_mysql` provides like `data_seek`,
`store_result`, and `use_result`. You should use high level APIs defined in `PEP 249`_.
But some APIs like `autocommit` and `ping` are supported because `PEP 249`_ doesn't cover
their usecase.
.. _`PEP 249`: https://www.python.org/dev/peps/pep-0249/
Requirements
-------------
* Python -- one of the following:
- CPython_ : 3.6 and newer
- PyPy_ : Latest 3.x version
* MySQL Server -- one of the following:
- MySQL_ >= 5.6
- MariaDB_ >= 10.0
.. _CPython: https://www.python.org/
.. _PyPy: https://pypy.org/
.. _MySQL: https://www.mysql.com/
.. _MariaDB: https://mariadb.org/
Installation
------------
Package is uploaded on `PyPI <https://pypi.org/project/PyMySQL>`_.
You can install it with pip::
$ python3 -m pip install PyMySQL
To use "sha256_password" or "caching_sha2_password" for authenticate,
you need to install additional dependency::
$ python3 -m pip install PyMySQL[rsa]
To use MariaDB's "ed25519" authentication method, you need to install
additional dependency::
$ python3 -m pip install PyMySQL[ed25519]
Documentation
-------------
Documentation is available online: https://pymysql.readthedocs.io/
For support, please refer to the `StackOverflow
<https://stackoverflow.com/questions/tagged/pymysql>`_.
Example
-------
The following examples make use of a simple table
.. code:: sql
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
AUTO_INCREMENT=1 ;
.. code:: python
import pymysql.cursors
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
database='db',
cursorclass=pymysql.cursors.DictCursor)
with connection:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()
with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
This example will print:
.. code:: python
{'password': 'very-secret', 'id': 1}
Resources
---------
* DB-API 2.0: https://www.python.org/dev/peps/pep-0249/
* MySQL Reference Manuals: https://dev.mysql.com/doc/
* MySQL client/server protocol:
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
* "Connector" channel in MySQL Community Slack:
https://lefred.be/mysql-community-on-slack/
* PyMySQL mailing list: https://groups.google.com/forum/#!forum/pymysql-users
License
-------
PyMySQL is released under the MIT License. See LICENSE for more information.

View File

@ -1,43 +0,0 @@
PyMySQL-1.0.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
PyMySQL-1.0.2.dist-info/LICENSE,sha256=MUEg3GXwgA9ziksxQAx27hTezR--d86cNUCkIbhup7Y,1070
PyMySQL-1.0.2.dist-info/METADATA,sha256=hz4Fdo8sOFKcNqZ8wp4Bp-txNCOBCnw9-leYR7QBZ5I,5119
PyMySQL-1.0.2.dist-info/RECORD,,
PyMySQL-1.0.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
PyMySQL-1.0.2.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92
PyMySQL-1.0.2.dist-info/top_level.txt,sha256=IKlV-f4o90sOdnMd6HBvo0l2nqfJOGUzkwZeaEEGuRg,8
pymysql/__init__.py,sha256=XL7skPUK4cbKiek68T0vMob-L4YkIRLb2KX4hdMZVvM,4391
pymysql/__pycache__/__init__.cpython-38.pyc,,
pymysql/__pycache__/_auth.cpython-38.pyc,,
pymysql/__pycache__/charset.cpython-38.pyc,,
pymysql/__pycache__/connections.cpython-38.pyc,,
pymysql/__pycache__/converters.cpython-38.pyc,,
pymysql/__pycache__/cursors.cpython-38.pyc,,
pymysql/__pycache__/err.cpython-38.pyc,,
pymysql/__pycache__/optionfile.cpython-38.pyc,,
pymysql/__pycache__/protocol.cpython-38.pyc,,
pymysql/__pycache__/times.cpython-38.pyc,,
pymysql/_auth.py,sha256=l1VtBwDpCtTkalgYQFASO-rj-vEd3DGYR8g-eQjNF1U,7399
pymysql/charset.py,sha256=JCvshFnNf4vzkpXc6uPCyg07qGNfZaVZoxrFqzVlKFs,10293
pymysql/connections.py,sha256=EwKWqFIWlx6kbOeDFIhMFpjJ9-pyF140E5ouKgrrYfY,51251
pymysql/constants/CLIENT.py,sha256=SSvMFPZCTVMU1UWa4zOrfhYMDdR2wG2mS0E5GzJhDsg,878
pymysql/constants/COMMAND.py,sha256=TGITAUcNWlq2Gwg2wv5UK2ykdTd4LYTk_EcJJOCpGIc,679
pymysql/constants/CR.py,sha256=oHyD9dnR1DUX7hd42rcamMnFrWhjUZz7E4S6qQWSQb4,1927
pymysql/constants/ER.py,sha256=cH5wgU-e70wd0uSygNR5IFCnnXcrR9WLwJPMH22bhUw,12296
pymysql/constants/FIELD_TYPE.py,sha256=ytFzgAnGmb9hvdsBlnK68qdZv_a6jYFIXT6VSAb60z8,370
pymysql/constants/FLAG.py,sha256=Fy-PrCLnUI7fx_o5WypYnUAzWAM0E9d5yL8fFRVKffY,214
pymysql/constants/SERVER_STATUS.py,sha256=m28Iq5JGCFCWLhafE73-iOvw_9gDGqnytW3NkHpbugA,333
pymysql/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pymysql/constants/__pycache__/CLIENT.cpython-38.pyc,,
pymysql/constants/__pycache__/COMMAND.cpython-38.pyc,,
pymysql/constants/__pycache__/CR.cpython-38.pyc,,
pymysql/constants/__pycache__/ER.cpython-38.pyc,,
pymysql/constants/__pycache__/FIELD_TYPE.cpython-38.pyc,,
pymysql/constants/__pycache__/FLAG.cpython-38.pyc,,
pymysql/constants/__pycache__/SERVER_STATUS.cpython-38.pyc,,
pymysql/constants/__pycache__/__init__.cpython-38.pyc,,
pymysql/converters.py,sha256=MBXTOCXSyewMculaRliBEzPVkOKXLiRMqvIXih9Akrg,9430
pymysql/cursors.py,sha256=1E79f3vysxygyfZMhvR6-yFDfysRn3Go8xZTywteh4o,15366
pymysql/err.py,sha256=bpxayM4IUnFQAd8bUZ3PFsFomi9QSfBk-0TJXyKU2FI,3773
pymysql/optionfile.py,sha256=ehPrZW4d7pcEvXGAEpsKgLdXpFnIQD93yF7T_jHjoRk,573
pymysql/protocol.py,sha256=Ur8xXkVvyFc6m5CA34QrHBasADvS_NPFsWU-Q3flRYA,11859
pymysql/times.py,sha256=_qXgDaYwsHntvpIKSKXp1rrYIgtq6Z9pLyLnO2XNoL0,360

View File

@ -1,5 +0,0 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.36.2)
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -1,19 +0,0 @@
Copyright 2005-2021 SQLAlchemy authors and contributors <see AUTHORS 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.

View File

@ -1,211 +0,0 @@
Metadata-Version: 2.1
Name: SQLAlchemy
Version: 1.3.23
Summary: Database Abstraction Library
Home-page: http://www.sqlalchemy.org
Author: Mike Bayer
Author-email: mike_mp@zzzcomputing.com
License: MIT
Project-URL: Documentation, https://docs.sqlalchemy.org
Project-URL: Issue Tracker, https://github.com/sqlalchemy/sqlalchemy/
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Database :: Front-Ends
Classifier: Operating System :: OS Independent
Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
Provides-Extra: mssql
Requires-Dist: pyodbc ; extra == 'mssql'
Provides-Extra: mssql_pymssql
Requires-Dist: pymssql ; extra == 'mssql_pymssql'
Provides-Extra: mssql_pyodbc
Requires-Dist: pyodbc ; extra == 'mssql_pyodbc'
Provides-Extra: mysql
Requires-Dist: mysqlclient ; extra == 'mysql'
Provides-Extra: oracle
Requires-Dist: cx-oracle ; extra == 'oracle'
Provides-Extra: postgresql
Requires-Dist: psycopg2 ; extra == 'postgresql'
Provides-Extra: postgresql_pg8000
Requires-Dist: pg8000 (<1.16.6) ; extra == 'postgresql_pg8000'
Provides-Extra: postgresql_psycopg2binary
Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
Provides-Extra: postgresql_psycopg2cffi
Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
Provides-Extra: pymysql
Requires-Dist: pymysql (<1) ; (python_version < "3") and extra == 'pymysql'
Requires-Dist: pymysql ; (python_version >= "3") and extra == 'pymysql'
SQLAlchemy
==========
|PyPI| |Python| |Downloads|
.. |PyPI| image:: https://img.shields.io/pypi/v/sqlalchemy
:target: https://pypi.org/project/sqlalchemy
:alt: PyPI
.. |Python| image:: https://img.shields.io/pypi/pyversions/sqlalchemy
:target: https://pypi.org/project/sqlalchemy
:alt: PyPI - Python Version
.. |Downloads| image:: https://img.shields.io/pypi/dm/sqlalchemy
:target: https://pypi.org/project/sqlalchemy
:alt: PyPI - Downloads
The Python SQL Toolkit and Object Relational Mapper
Introduction
-------------
SQLAlchemy is the Python SQL toolkit and Object Relational Mapper
that gives application developers the full power and
flexibility of SQL. SQLAlchemy provides a full suite
of well known enterprise-level persistence patterns,
designed for efficient and high-performing database
access, adapted into a simple and Pythonic domain
language.
Major SQLAlchemy features include:
* An industrial strength ORM, built
from the core on the identity map, unit of work,
and data mapper patterns. These patterns
allow transparent persistence of objects
using a declarative configuration system.
Domain models
can be constructed and manipulated naturally,
and changes are synchronized with the
current transaction automatically.
* A relationally-oriented query system, exposing
the full range of SQL's capabilities
explicitly, including joins, subqueries,
correlation, and most everything else,
in terms of the object model.
Writing queries with the ORM uses the same
techniques of relational composition you use
when writing SQL. While you can drop into
literal SQL at any time, it's virtually never
needed.
* A comprehensive and flexible system
of eager loading for related collections and objects.
Collections are cached within a session,
and can be loaded on individual access, all
at once using joins, or by query per collection
across the full result set.
* A Core SQL construction system and DBAPI
interaction layer. The SQLAlchemy Core is
separate from the ORM and is a full database
abstraction layer in its own right, and includes
an extensible Python-based SQL expression
language, schema metadata, connection pooling,
type coercion, and custom types.
* All primary and foreign key constraints are
assumed to be composite and natural. Surrogate
integer primary keys are of course still the
norm, but SQLAlchemy never assumes or hardcodes
to this model.
* Database introspection and generation. Database
schemas can be "reflected" in one step into
Python structures representing database metadata;
those same structures can then generate
CREATE statements right back out - all within
the Core, independent of the ORM.
SQLAlchemy's philosophy:
* SQL databases behave less and less like object
collections the more size and performance start to
matter; object collections behave less and less like
tables and rows the more abstraction starts to matter.
SQLAlchemy aims to accommodate both of these
principles.
* An ORM doesn't need to hide the "R". A relational
database provides rich, set-based functionality
that should be fully exposed. SQLAlchemy's
ORM provides an open-ended set of patterns
that allow a developer to construct a custom
mediation layer between a domain model and
a relational schema, turning the so-called
"object relational impedance" issue into
a distant memory.
* The developer, in all cases, makes all decisions
regarding the design, structure, and naming conventions
of both the object model as well as the relational
schema. SQLAlchemy only provides the means
to automate the execution of these decisions.
* With SQLAlchemy, there's no such thing as
"the ORM generated a bad query" - you
retain full control over the structure of
queries, including how joins are organized,
how subqueries and correlation is used, what
columns are requested. Everything SQLAlchemy
does is ultimately the result of a developer-
initiated decision.
* Don't use an ORM if the problem doesn't need one.
SQLAlchemy consists of a Core and separate ORM
component. The Core offers a full SQL expression
language that allows Pythonic construction
of SQL constructs that render directly to SQL
strings for a target database, returning
result sets that are essentially enhanced DBAPI
cursors.
* Transactions should be the norm. With SQLAlchemy's
ORM, nothing goes to permanent storage until
commit() is called. SQLAlchemy encourages applications
to create a consistent means of delineating
the start and end of a series of operations.
* Never render a literal value in a SQL statement.
Bound parameters are used to the greatest degree
possible, allowing query optimizers to cache
query plans effectively and making SQL injection
attacks a non-issue.
Documentation
-------------
Latest documentation is at:
http://www.sqlalchemy.org/docs/
Installation / Requirements
---------------------------
Full documentation for installation is at
`Installation <http://www.sqlalchemy.org/docs/intro.html#installation>`_.
Getting Help / Development / Bug reporting
------------------------------------------
Please refer to the `SQLAlchemy Community Guide <http://www.sqlalchemy.org/support.html>`_.
Code of Conduct
---------------
Above all, SQLAlchemy places great emphasis on polite, thoughtful, and
constructive communication between users and developers.
Please see our current Code of Conduct at
`Code of Conduct <http://www.sqlalchemy.org/codeofconduct.html>`_.
License
-------
SQLAlchemy is distributed under the `MIT license
<http://www.opensource.org/licenses/mit-license.php>`_.

View File

@ -1,408 +0,0 @@
SQLAlchemy-1.3.23.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
SQLAlchemy-1.3.23.dist-info/LICENSE,sha256=_-DCK5JvsC0ovMsgocueJWTu1m_PSeTv7r8oHE-pf6c,1100
SQLAlchemy-1.3.23.dist-info/METADATA,sha256=pB1rDXWUGBqIOHOjvcQChBh8gBRyk_zK9qnyB6a10us,7903
SQLAlchemy-1.3.23.dist-info/RECORD,,
SQLAlchemy-1.3.23.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
SQLAlchemy-1.3.23.dist-info/WHEEL,sha256=RIeRBYNNiNK3sXfnenIjXDrR2Tzyz05xCMpKF2hJ1iA,111
SQLAlchemy-1.3.23.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
sqlalchemy/__init__.py,sha256=2Ar5kF-XtPUz2GGE9mvFg3J_B1GuvgiIE4SfRdxMRcY,4789
sqlalchemy/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/__pycache__/events.cpython-38.pyc,,
sqlalchemy/__pycache__/exc.cpython-38.pyc,,
sqlalchemy/__pycache__/inspection.cpython-38.pyc,,
sqlalchemy/__pycache__/interfaces.cpython-38.pyc,,
sqlalchemy/__pycache__/log.cpython-38.pyc,,
sqlalchemy/__pycache__/processors.cpython-38.pyc,,
sqlalchemy/__pycache__/schema.cpython-38.pyc,,
sqlalchemy/__pycache__/types.cpython-38.pyc,,
sqlalchemy/connectors/__init__.py,sha256=2ZX0t61fo77OLuGFpYxFo3LVPTQDKMRIF77YOhjPFQw,278
sqlalchemy/connectors/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/connectors/__pycache__/mxodbc.cpython-38.pyc,,
sqlalchemy/connectors/__pycache__/pyodbc.cpython-38.pyc,,
sqlalchemy/connectors/__pycache__/zxJDBC.cpython-38.pyc,,
sqlalchemy/connectors/mxodbc.py,sha256=-1W0YZgXI4o1y0CjriCX9w007baz13TmTP7rdjO0mZ0,5350
sqlalchemy/connectors/pyodbc.py,sha256=xeEuF8GUK8j7wijsnEyqU4YG1UCSM2nZHURFlOUGmmE,5995
sqlalchemy/connectors/zxJDBC.py,sha256=5M6EatP2eiYrCeDUgZdpBcojZd0zlikTPJpbkirzrx8,1878
sqlalchemy/cprocessors.cpython-38-x86_64-linux-gnu.so,sha256=vlfOa40nlyE_APsJ9wgV8ISgMxqD147-BApj4jU5aLo,64760
sqlalchemy/cresultproxy.cpython-38-x86_64-linux-gnu.so,sha256=U5-j69w1eXot_Inck-R8MZk029DNhZjVOtukG-D3gQE,77600
sqlalchemy/cutils.cpython-38-x86_64-linux-gnu.so,sha256=VZiCTQelvGp25k0Vno3SRIzcZ1VYtNMPDotiuVKt7ac,39864
sqlalchemy/databases/__init__.py,sha256=gRoL6-LdtHu7sWIXmXla0M7pghKcE2hNlN6ifWHUdO0,819
sqlalchemy/databases/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/__init__.py,sha256=vsfq3oDoCJLI6X35ZJSpqX2nUPbgM8u8ITOo2b5K0iI,1909
sqlalchemy/dialects/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/firebird/__init__.py,sha256=6M_TulUbTNL3JzHQHLGZDT1kP2ihNzwEZ_aPrGPCrXE,1152
sqlalchemy/dialects/firebird/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/firebird/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/firebird/__pycache__/fdb.cpython-38.pyc,,
sqlalchemy/dialects/firebird/__pycache__/kinterbasdb.cpython-38.pyc,,
sqlalchemy/dialects/firebird/base.py,sha256=gLKiJ2xAKraLohqErE8wZNwwU7DUZ-j45kS_rRQ8yH4,30316
sqlalchemy/dialects/firebird/fdb.py,sha256=gYT3W60bcZpyZPDIAhzuNFE-TVbaarppYPEpd1oeOzk,4079
sqlalchemy/dialects/firebird/kinterbasdb.py,sha256=qMlnnzYsIOHNfjgniR_tBCKgitz7YdjnSRFrpRETEGo,6437
sqlalchemy/dialects/mssql/__init__.py,sha256=MlegTjxm6HyKJzBdArcCdDcrfD2gxgFihl2FbZI4RlU,1812
sqlalchemy/dialects/mssql/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/adodbapi.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/information_schema.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/mxodbc.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/pymssql.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/pyodbc.cpython-38.pyc,,
sqlalchemy/dialects/mssql/__pycache__/zxjdbc.cpython-38.pyc,,
sqlalchemy/dialects/mssql/adodbapi.py,sha256=d0s5geCj1gnPsw8OmOoLqodtOo5sNsrY8ogM6vt-gjY,2719
sqlalchemy/dialects/mssql/base.py,sha256=O7SgxwNFBgyihARAXzsBidmw_iH49gzzlMdoOLNjMJQ,91331
sqlalchemy/dialects/mssql/information_schema.py,sha256=FrOW0yDkxhhMKIQBu18p2fJK4XoQrzDyJ37qC5J1KlQ,5639
sqlalchemy/dialects/mssql/mxodbc.py,sha256=i0usyju5kmj9KpJIwwE0XftDddPXM-4vm5eNCWr9hWQ,4611
sqlalchemy/dialects/mssql/provision.py,sha256=j7eVrBHR1NjPvT_DmtPcNnAadZiHG1x65AyxYnZJ7d0,2785
sqlalchemy/dialects/mssql/pymssql.py,sha256=_IqSxuRI0qpTQWdT56Hltcyhsh7QJ7fdxdFYWCYPA_Y,4784
sqlalchemy/dialects/mssql/pyodbc.py,sha256=MzlNGZoc_NkiIx3qowoD2o8XGhFAA9OOdonmvGh-yw8,16310
sqlalchemy/dialects/mssql/zxjdbc.py,sha256=o752DAx3F1FQA8-tmymP_V_GBxcTxLjmFGN0fJ7ajAs,2311
sqlalchemy/dialects/mysql/__init__.py,sha256=-VDiSVlVCUr8JSds25zKeFNYd_wvIyJgW01PTp7o6I0,2056
sqlalchemy/dialects/mysql/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/cymysql.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/dml.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/enumerated.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/gaerdbms.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/json.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/mysqlconnector.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/mysqldb.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/oursql.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/pymysql.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/pyodbc.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/reflection.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/types.cpython-38.pyc,,
sqlalchemy/dialects/mysql/__pycache__/zxjdbc.cpython-38.pyc,,
sqlalchemy/dialects/mysql/base.py,sha256=_KNksGABODI8rMh-l3igyQMfW0oh8rzAyy3ol_C2_-8,107173
sqlalchemy/dialects/mysql/cymysql.py,sha256=dXNtv5TwMN5oT3BHczpkPFlrFxmFw9ckZy_fxTOr2_s,2244
sqlalchemy/dialects/mysql/dml.py,sha256=yq9Kgm2IvLkt0_Uw1RGsuyjNQVgpWIWMFd2Ntm_R65Y,4764
sqlalchemy/dialects/mysql/enumerated.py,sha256=pEeEuapS_bbaTCU6Iv-LwRkZ6i5K2zk5VciC2yW-Uwk,11307
sqlalchemy/dialects/mysql/gaerdbms.py,sha256=E7sGM9Md2smw5cpJhTtpjcz1YSfw-i4gihXocULGtgg,3375
sqlalchemy/dialects/mysql/json.py,sha256=B2OYzgnBF7ex23SQeWO0UtiDuPV2Yt4iWtOov-mFAAg,2045
sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=CR3vDeERyT2pXJRs_wSuqltyGFTSMM2dtnsrO9e5BDk,7889
sqlalchemy/dialects/mysql/mysqldb.py,sha256=Kp95xmh3HIhAyKiBg0DwM6oZ9p8Mag0pVTe20AGlBxY,8504
sqlalchemy/dialects/mysql/oursql.py,sha256=y4Y_QOEhXtcZSGJuDUlg-M5M2dxyLW0LT2DIv2FlNn4,8086
sqlalchemy/dialects/mysql/provision.py,sha256=sJ7IpiIB1Eb9AdRK3loRlsCHKzzsFGJzMgICyRrkFpY,1269
sqlalchemy/dialects/mysql/pymysql.py,sha256=kJJymEX_Xd3s1UJU1WcoZi9zBlFB9yxEDy1mWstZ51k,2720
sqlalchemy/dialects/mysql/pyodbc.py,sha256=GqZTTkBkGnGWqtk0xuNeCeYchwFeWKyXdW5zzR4JQcg,3470
sqlalchemy/dialects/mysql/reflection.py,sha256=mlLi4rqRM9LBO8IkxhMHsOk23mNq5GcsIPnknnVx4JQ,18275
sqlalchemy/dialects/mysql/types.py,sha256=JuynK1xxpffyKKc_gKe4n_HOKJcf5G4yxwVY2XQhVGA,24589
sqlalchemy/dialects/mysql/zxjdbc.py,sha256=HzHSEcOmpUEYdP-4w6q8qork3bMNgvDVIICUK0ERubw,3970
sqlalchemy/dialects/oracle/__init__.py,sha256=E5ZEABZzwheOKeeWmkqTfNgqNTvGPHs6PyRVYISU-A4,1257
sqlalchemy/dialects/oracle/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/oracle/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/oracle/__pycache__/cx_oracle.cpython-38.pyc,,
sqlalchemy/dialects/oracle/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/dialects/oracle/__pycache__/zxjdbc.cpython-38.pyc,,
sqlalchemy/dialects/oracle/base.py,sha256=Mt2ZYQRbXXxNPsIFEF3nsKXA6PvvPliYAwFFePgdozA,78266
sqlalchemy/dialects/oracle/cx_oracle.py,sha256=v73Pbntu2tLjLcbshCRR9WYG7CaFYf_YvikyuYXKfHY,48882
sqlalchemy/dialects/oracle/provision.py,sha256=AQwaR1DOcAP0Z8j8ek7StLg6rmEYLrUbaH9fpYyq9HQ,5001
sqlalchemy/dialects/oracle/zxjdbc.py,sha256=M4zftIcMyr9y95rr8d6Nbqw9pyClddQ9S1mhuptL6N4,8207
sqlalchemy/dialects/postgresql/__init__.py,sha256=KQV__iX-kTOGf28JO-cIM5VAs6ZEyRsj0EEf1d-nOAc,2461
sqlalchemy/dialects/postgresql/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/array.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/dml.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/ext.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/hstore.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/json.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/pg8000.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/psycopg2.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/psycopg2cffi.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/pygresql.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/pypostgresql.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/ranges.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/__pycache__/zxjdbc.cpython-38.pyc,,
sqlalchemy/dialects/postgresql/array.py,sha256=9UUpyCx_7KDQDiCKqIn-reeVabJ29fJ0QKYDh0Zw5D4,12043
sqlalchemy/dialects/postgresql/base.py,sha256=VNbgxE7VvxoTN4k5b40V3hKDalFRdPt5gh4B47uoWdQ,128016
sqlalchemy/dialects/postgresql/dml.py,sha256=JYliPOVnKoj8uo7X8qTTPtnm0bQNeBghZyymcMJk3-Y,7790
sqlalchemy/dialects/postgresql/ext.py,sha256=uxuPOQp_hRDguODT5PEWs9iiLH27bCpGsx7twfvK9eM,7702
sqlalchemy/dialects/postgresql/hstore.py,sha256=EUKmtCaONXFzaSfiejAlG5ZKxM5tHTYWNPa7GbSTwpk,12417
sqlalchemy/dialects/postgresql/json.py,sha256=qgFvEcH12HSoMiWG0jw6ysBZmfkyBzw0vuJbjpgS7t4,10103
sqlalchemy/dialects/postgresql/pg8000.py,sha256=aIa8KkZHHtfwEbKgDnewWgbvBHtw7kQUMg8B6O44Uq4,9722
sqlalchemy/dialects/postgresql/provision.py,sha256=E8LOoSNSWUlx77ihNLQfW9csAxsmL-qleiLPbVlSlVw,2008
sqlalchemy/dialects/postgresql/psycopg2.py,sha256=WRHgU0cAtwloz1fOPnFJO5WMpzSssl9afT9gMrNMrdA,37129
sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=wEY6Y__dRQ9nTYD9QT8wMqyWq72mWcFvu-aH8_Z0abw,1657
sqlalchemy/dialects/postgresql/pygresql.py,sha256=k-98-shPJhe9Fdrry5WTm4md4BnWZVBJHWoGkVuq64U,8129
sqlalchemy/dialects/postgresql/pypostgresql.py,sha256=XHqAmXAGD4RgBEMxJDtcfSgcZvbdH5xwkNslxuMyKU4,2915
sqlalchemy/dialects/postgresql/ranges.py,sha256=g0kDAzz4ZpyRmxEBxD2A3oZGVoz7G4tR-dptArrDzFk,4622
sqlalchemy/dialects/postgresql/zxjdbc.py,sha256=tTs7npUPBsirH5eJN8ug57ptm7NHpC64CRxW82xU-dM,1415
sqlalchemy/dialects/sqlite/__init__.py,sha256=TuG5N7nTu2CYJFX62iZXBTyl4m-hpbmulRDvmLOncDM,1042
sqlalchemy/dialects/sqlite/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/__pycache__/json.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/__pycache__/pysqlcipher.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/__pycache__/pysqlite.cpython-38.pyc,,
sqlalchemy/dialects/sqlite/base.py,sha256=sohu343wSsOGQodxOmIGELStJyqniWeXxd_4Dvd-dNM,75220
sqlalchemy/dialects/sqlite/json.py,sha256=IwhCnGL_BKtASpm0-OzeNByp3qtkcLZgAeBGY_EPUvM,2292
sqlalchemy/dialects/sqlite/provision.py,sha256=PEmgxbdz67KsONOEhFVQFLX3s4BXWKLb2gvNgj0gn9M,2591
sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=fYApVG70qWOzTbnNXOlVds_iFjjKKbN1CHUynGqZS6E,4692
sqlalchemy/dialects/sqlite/pysqlite.py,sha256=cIq6mBIRqgZ9ICrZCD6AYqMUifuR0tgk3OZvQWzbSRA,20983
sqlalchemy/dialects/sybase/__init__.py,sha256=SAXbbiAkTpa9uIO7ReFbRXzoETJPLyHgzyxVDfTf3kw,1363
sqlalchemy/dialects/sybase/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/dialects/sybase/__pycache__/base.cpython-38.pyc,,
sqlalchemy/dialects/sybase/__pycache__/mxodbc.cpython-38.pyc,,
sqlalchemy/dialects/sybase/__pycache__/pyodbc.cpython-38.pyc,,
sqlalchemy/dialects/sybase/__pycache__/pysybase.cpython-38.pyc,,
sqlalchemy/dialects/sybase/base.py,sha256=abrB6wdPbwIEHgit5eoJuc7diD1qe3rGMb13trMKepQ,31789
sqlalchemy/dialects/sybase/mxodbc.py,sha256=Ch21Wkqryfqcl5ilhvY2w1abU9xxUhMgsfhzeSKcJkE,902
sqlalchemy/dialects/sybase/pyodbc.py,sha256=lszvO00cAbfzYRIkzMSMgpHhAO52U0IOqx_mafJ0E20,2120
sqlalchemy/dialects/sybase/pysybase.py,sha256=X_LYYF0BiBqxIxkINnrkvwXO8dEEcT8uCLFxtXQBHkg,3313
sqlalchemy/engine/__init__.py,sha256=lqwPyO4joLaFh7fH7HJVH3xZQuig4alN5lZqf1yPbJ0,25066
sqlalchemy/engine/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/base.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/default.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/interfaces.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/reflection.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/result.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/strategies.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/threadlocal.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/url.cpython-38.pyc,,
sqlalchemy/engine/__pycache__/util.cpython-38.pyc,,
sqlalchemy/engine/base.py,sha256=8nG_zKOF6det1HQCJslUsg3mm3F1yeuMfiqlCoY0fKA,87152
sqlalchemy/engine/default.py,sha256=C31_Zb3C7Ux6b7yic4LGRIfDUBH68g2A8wd1u4yKsFw,55723
sqlalchemy/engine/interfaces.py,sha256=BaJBcKP-R1ZBv4q_XMhj6-G2DXQ6dz8ITweav_-z6Kk,48491
sqlalchemy/engine/reflection.py,sha256=d6F8Zf64fsn1n-rafzN__j1vMvhMyGwse8t1APKgnbY,34712
sqlalchemy/engine/result.py,sha256=yUxKClpINiDnbasn5ZgrNjSOxwMMovA83ZutALHno-0,54716
sqlalchemy/engine/strategies.py,sha256=NykNfa1kpgd0oYMnTBg9iex3hWJmWKiT0l7M4Ng8WjM,9847
sqlalchemy/engine/threadlocal.py,sha256=pq3Dda83-HCnzYM5Lduxvw4vyFLfbfDM69NfIoTEGaE,4764
sqlalchemy/engine/url.py,sha256=FdGibIzQzMlx1gO1BejijBeSBbutR7lQ-M3UmBos-kE,9445
sqlalchemy/engine/util.py,sha256=L-rKj_pXLbYPyZ35toBwLe3W0jtxBI4oWETau4aJ_1A,2421
sqlalchemy/event/__init__.py,sha256=iaU3UOZRD9JzgDeVrDkU4cnRnqt-8G8p8fNs0bg84dQ,596
sqlalchemy/event/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/event/__pycache__/api.cpython-38.pyc,,
sqlalchemy/event/__pycache__/attr.cpython-38.pyc,,
sqlalchemy/event/__pycache__/base.cpython-38.pyc,,
sqlalchemy/event/__pycache__/legacy.cpython-38.pyc,,
sqlalchemy/event/__pycache__/registry.cpython-38.pyc,,
sqlalchemy/event/api.py,sha256=51Oi42BEaAuGZ2piJ4PSqTHBAOuj0LezGGIEOsQ20AI,7083
sqlalchemy/event/attr.py,sha256=RoFb0WRHeNTzU_6Es0DZv3cx7O9UUXbuYiYQS-R1ciQ,13849
sqlalchemy/event/base.py,sha256=NF-G65o9iWzsMTH4QJLgn_AN2A3hGvWwGbEBiABAkS0,9748
sqlalchemy/event/legacy.py,sha256=ZGn4YR3VKebg8DPvrfycnOckUkRAZN-EGc_74UrNDPg,5904
sqlalchemy/event/registry.py,sha256=BQQzvrJPSG3HrlJfkTwJ4q_zMI6hBa7XixatzTp9G9c,8229
sqlalchemy/events.py,sha256=my0slrUpnlzWTXEPaFjWKAK0U5ghlIwA9T9ta6MZyG8,53461
sqlalchemy/exc.py,sha256=1nr2fMRIN3UFxlQAtP8DIM2EBUzZpBfyfUMTVSJDsvM,17879
sqlalchemy/ext/__init__.py,sha256=qTDr6zFJdTSYPnYTjWfyyNM3N8AjBJwguF5F9vW3kK8,322
sqlalchemy/ext/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/associationproxy.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/automap.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/baked.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/compiler.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/horizontal_shard.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/hybrid.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/indexable.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/instrumentation.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/mutable.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/orderinglist.cpython-38.pyc,,
sqlalchemy/ext/__pycache__/serializer.cpython-38.pyc,,
sqlalchemy/ext/associationproxy.py,sha256=iAD8qOQu8ErsbPUrGlCOkbzhddrRtg-U-368tzSfH6A,49985
sqlalchemy/ext/automap.py,sha256=jEk3gULu4aWN3cnX9JCJlwiI9LvbxZV_yCi-6KxBSoA,42157
sqlalchemy/ext/baked.py,sha256=woeB5ZY8g0YGZIHjn2QR-tOTycVmfxJ9rSueNDDbIes,21980
sqlalchemy/ext/compiler.py,sha256=vTjdPj6Ivaz__Fq_Bze3qejHE_257gmMMj2C8xXHeJc,17357
sqlalchemy/ext/declarative/__init__.py,sha256=CGsFgqic6gVqOi5-EkOCLGfFkUJGYdmrfvv5v1zpskI,902
sqlalchemy/ext/declarative/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/ext/declarative/__pycache__/api.cpython-38.pyc,,
sqlalchemy/ext/declarative/__pycache__/base.cpython-38.pyc,,
sqlalchemy/ext/declarative/__pycache__/clsregistry.cpython-38.pyc,,
sqlalchemy/ext/declarative/api.py,sha256=DR2IqrsU0S8gmbtykhfPfBO081EPzgiz1DByKTkkgmg,28728
sqlalchemy/ext/declarative/base.py,sha256=TKin_32YOj9twFzXZArX_rxiStNt39HXlKxyV2WOt2A,32093
sqlalchemy/ext/declarative/clsregistry.py,sha256=yXVmcpVUVQYqxKmrK6gBcoUdQX_eyGhU7rwgWz0UGVw,12561
sqlalchemy/ext/horizontal_shard.py,sha256=upsiKPAFIX1GpEjhvgs3uk3gpL5wk8yerd4AkaXvDz0,9139
sqlalchemy/ext/hybrid.py,sha256=eglFZDgpn28Ik7kQ9c9wKstdsYuTrGrpfM4kJjDEYas,40399
sqlalchemy/ext/indexable.py,sha256=YELHG5NDsb_U5WqmzMByiPFjyam_sqYol_c9KEHggxE,11254
sqlalchemy/ext/instrumentation.py,sha256=FfL8M6OAJYxvKZNgS1O638pkPDWsiRXE34IL5ZJebUE,14371
sqlalchemy/ext/mutable.py,sha256=lSgZOKa0uYZfveQQzySvFEFo_TutmK42SXlQuOPd4OQ,31820
sqlalchemy/ext/orderinglist.py,sha256=FDxCKsCosB2azFYdcEnIYslAnVMhAsJlbozzuUHfuf0,13899
sqlalchemy/ext/serializer.py,sha256=hLVvWbGpnJSi0XnadvzxQjWIttLyVBYxo7GNFoZMR78,5784
sqlalchemy/inspection.py,sha256=P__ODm4vVnPbmg06OjL8BcCkg8RHNhdhKTheysN_fM8,3030
sqlalchemy/interfaces.py,sha256=RloFpj6mUrLdQ3Niu7wMAgySM4p3da6T2yq9sV7lBs8,12740
sqlalchemy/log.py,sha256=s79j1qy8XtNw9GajMKA4I5Xy35mQHVjzQ5jMPP9mMK4,6705
sqlalchemy/orm/__init__.py,sha256=JCzIb6kwgkg_6mGuwnhj6206BOU4hkYG8zcAlWKSMuY,9938
sqlalchemy/orm/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/attributes.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/base.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/collections.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/dependency.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/deprecated_interfaces.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/descriptor_props.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/dynamic.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/evaluator.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/events.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/exc.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/identity.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/instrumentation.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/interfaces.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/loading.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/mapper.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/path_registry.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/persistence.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/properties.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/query.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/relationships.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/scoping.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/session.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/state.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/strategies.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/strategy_options.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/sync.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/unitofwork.cpython-38.pyc,,
sqlalchemy/orm/__pycache__/util.cpython-38.pyc,,
sqlalchemy/orm/attributes.py,sha256=ahJBcxLpnM5s1bqLnaGrAfs0Spc4cY9-flHc3CUHHQk,68083
sqlalchemy/orm/base.py,sha256=vbsZ5c_LRPQkwS22p6-NGvtSIKw64LOz_zwfflF6pl8,15304
sqlalchemy/orm/collections.py,sha256=xJj-NrKWzsPW5u7vErY-Iq394RAG3rTLiyFP3-PUYZc,52864
sqlalchemy/orm/dependency.py,sha256=_9PByDItrMhM6i_gYlyVaEZ0mxIxPBTtee7hWnP5HRs,46556
sqlalchemy/orm/deprecated_interfaces.py,sha256=7SXbqGG2JdboPJagiyFCvf5XjY8ZWzrBx4JYaYvY4Lo,20759
sqlalchemy/orm/descriptor_props.py,sha256=Dk4Qn1yqUMmZEET9GppWSVmHIB4CRrjcRctnWOHpiY8,28373
sqlalchemy/orm/dynamic.py,sha256=5TxYM9YBTnepjdWpGJmuOS9mJXMOCHGWQfCn4MFl3_o,14667
sqlalchemy/orm/evaluator.py,sha256=L6YFApadrh4YSqjg4h7x6nSzAnYg4Znw1BTZj19tFw8,5441
sqlalchemy/orm/events.py,sha256=vqfSjgvYrFX2n93t8jDJnhEpPuSvx1xmX3Nwxe--eOM,104638
sqlalchemy/orm/exc.py,sha256=3TRLpgBqLGbs5tAmuDLXIKCP9miXqwWTswesLfHVDoQ,6616
sqlalchemy/orm/identity.py,sha256=EtxAr9Xdqi-HDRKubM8WgKwV8MfopjGmrD6_PHZwLsI,10436
sqlalchemy/orm/instrumentation.py,sha256=VZcwUhDYTSVEE-ghA1lddfg63wB1RKl0Y_S6FOoEuwk,18603
sqlalchemy/orm/interfaces.py,sha256=wkyxGnrwjWmRB-V2YU6_N8bS5oJNJfGKpjA6XNtfERk,25851
sqlalchemy/orm/loading.py,sha256=4tc3FogDFeu3w9AZ9kN_inlob4E_jc8R8Ychccyi5MQ,33839
sqlalchemy/orm/mapper.py,sha256=N9fUoXRzyef4QmiDyzCx6XpWIqCKL1P8drmEldYoo7A,130942
sqlalchemy/orm/path_registry.py,sha256=KWOoz1ehAs5gNLAHYJ-Q63ygIf4BBVLUyRmlkImDV9E,13764
sqlalchemy/orm/persistence.py,sha256=6aTVTZ7XX-JqAhTX-YfcanrwZq58gIMnjFMo4JtU7ag,66035
sqlalchemy/orm/properties.py,sha256=MAcp9PiA46pm47vf9bQA6IUVeoWFzaUnoii2XBXnGBc,12695
sqlalchemy/orm/query.py,sha256=7hdesIIVlKrjY7vbur0puDVVkZIGNZ6fE6n5LBmRkmY,181457
sqlalchemy/orm/relationships.py,sha256=7v8AjdTht_K_ieq57Lb1BBBQgUl3Rzd9CQgvXczYyQ0,138036
sqlalchemy/orm/scoping.py,sha256=3Y83kBN7ZlTJ33h84W0yMTeXY4xC1WZH9e8klJ89sO8,6414
sqlalchemy/orm/session.py,sha256=dfxPuikvPB1mF33KZ8ue-GXVDvStuP2LPFouiAtifQc,131771
sqlalchemy/orm/state.py,sha256=8O06vy90cN7O-FW93DZ1aWKtxcEdGE4ET0kCfpdY814,30811
sqlalchemy/orm/strategies.py,sha256=-V_9_FPbPR0AOqyF7AKDlFakOUDx6TlZxw-Bv80-ubA,87320
sqlalchemy/orm/strategy_options.py,sha256=2awP_rijlFTpkTdxtOxmX_mACKgu691drwXU40BbQSI,57823
sqlalchemy/orm/sync.py,sha256=4YOWE_Mcc9LvfHjFNpJsvS7hgJx6qrT2kXAtm8CB1sg,5823
sqlalchemy/orm/unitofwork.py,sha256=Wn7CUBlJmRlnaHuM5dqHfhMJPc0iL3dW-8sBoox8DD8,24743
sqlalchemy/orm/util.py,sha256=Tf7dPkuN3GXW_zbrRQuGMr91yGmX_fWscEbnBNYu98k,45446
sqlalchemy/pool/__init__.py,sha256=tfTxHi0MH3JqYjze_JgTCzUvr9cjbmkc8WIVMmt5zdM,1483
sqlalchemy/pool/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/pool/__pycache__/base.cpython-38.pyc,,
sqlalchemy/pool/__pycache__/dbapi_proxy.cpython-38.pyc,,
sqlalchemy/pool/__pycache__/impl.cpython-38.pyc,,
sqlalchemy/pool/base.py,sha256=l_LEQn-j81fMWKahPjgBGB_C4y-q7f3mPpa-GcGwOVQ,36523
sqlalchemy/pool/dbapi_proxy.py,sha256=NKjSNzUEkc3H0KXyPvrYWZoxIDb2dm3ehcSqe7rzDGE,4320
sqlalchemy/pool/impl.py,sha256=wcIS8k7wAg-lg6xmsT03MqZcw9EnheU4OFvVE6Pb95M,14958
sqlalchemy/processors.py,sha256=VcPrLgLq1SxIuoFNC4RY5g0gSc2g71k2G06nq1XchRo,5744
sqlalchemy/schema.py,sha256=jLYR7GdxP4SguXIxhAX8_1KTrtSYvtbm1SfTJ4emA_s,2466
sqlalchemy/sql/__init__.py,sha256=Ml5KSEtBkCaJfZOiglqVFXoqNHLzjPo5OyjU55OvobA,3789
sqlalchemy/sql/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/annotation.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/base.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/compiler.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/crud.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/ddl.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/default_comparator.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/dml.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/elements.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/expression.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/functions.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/naming.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/operators.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/schema.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/selectable.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/sqltypes.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/type_api.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/util.cpython-38.pyc,,
sqlalchemy/sql/__pycache__/visitors.cpython-38.pyc,,
sqlalchemy/sql/annotation.py,sha256=VgvxZCXy6OEr23OQp4_isOMyk5KSweE4-mPIfkelDZM,6725
sqlalchemy/sql/base.py,sha256=xP5syBfSh8OpNtHt_vVkYtglodIrTeRPiq2HDMnYAg4,21715
sqlalchemy/sql/compiler.py,sha256=SvCfnnTXnAlUq9jygUxWNAl0f1wcYpjND2vNaJjguZU,128543
sqlalchemy/sql/crud.py,sha256=8fFRPK-Bnr3rKifHngn7k1hVEGiGsvMKUxaOe2g7xIY,25889
sqlalchemy/sql/ddl.py,sha256=xI-hDJP_7BcQGJsAGJiCzkIlCTpQ0T6hN1MOidbX3yc,41440
sqlalchemy/sql/default_comparator.py,sha256=X-CAfBG7tb4XTeZK9Bu_kVAki-yxe-27BXLweu3h2dw,12234
sqlalchemy/sql/dml.py,sha256=yXSELQt9PxXa3oQx4MlrCmMUxgSOCqp9A2PfzlJEkVQ,35672
sqlalchemy/sql/elements.py,sha256=hkxhp5DBrzEulku2SCoCcDCCPnOanAW1BSHG6MmcEtc,161275
sqlalchemy/sql/expression.py,sha256=8J7WLYExiOOzfV-pzWaVHiws_3NcEKWRw0mPGo543DQ,9209
sqlalchemy/sql/functions.py,sha256=nJRqdL4e_Wo-FePk14xoYbBAImnv77zlh6GlH6Me1s0,35835
sqlalchemy/sql/naming.py,sha256=swda027eaqs8dv6PI-JjJWsVcoM1_loYqV9JvGv64_E,5889
sqlalchemy/sql/operators.py,sha256=8lXjIRD4k28vJihwvGtYDkssnvh7Q9zSyjevDZLWWFA,42560
sqlalchemy/sql/schema.py,sha256=9k7Bl4q0YSsazWOWXqgwmZ3Au0VydrRbhMCGxbOeWCU,181259
sqlalchemy/sql/selectable.py,sha256=n1cwkDQgQc2EjVGJ3RJfzMqsLedls_GM1FZaRhWL4Yw,139439
sqlalchemy/sql/sqltypes.py,sha256=EMJp3m3ZsfKYL5MJq_aBv3Q_bDct2STbRIDoJbLWXNo,101624
sqlalchemy/sql/type_api.py,sha256=WdIDK9-hM6faavMMpCW9068RAfENioOE6vt7x9L2PFQ,52062
sqlalchemy/sql/util.py,sha256=XqOe4NcUVtNmpaekLGZdXs0z6fDdek1MoYpIIYe4drE,30042
sqlalchemy/sql/visitors.py,sha256=nb8IRycDVzsTlqCk-t7kmvTgxU9u6v2EX-1CMKQJa8Y,15940
sqlalchemy/testing/__init__.py,sha256=3d22By8REcvn1y89Tl2FX0NfWotUJUppcWmRWOOLPzg,2867
sqlalchemy/testing/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/assertions.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/assertsql.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/config.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/engines.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/entities.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/exclusions.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/fixtures.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/mock.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/pickleable.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/profiling.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/provision.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/replay_fixture.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/requirements.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/schema.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/util.cpython-38.pyc,,
sqlalchemy/testing/__pycache__/warnings.cpython-38.pyc,,
sqlalchemy/testing/assertions.py,sha256=prUiqNGpWr-YdQOVElP_3wfeffhKOl8nra-6oodGtwY,22260
sqlalchemy/testing/assertsql.py,sha256=V4k6jMuXHxzFRtprIC_eVEgJEXe9xcj9np2G2QXCpsY,13590
sqlalchemy/testing/config.py,sha256=8MFev0_oNGmc3DfumGCY0YLfrd_D4fSI0rGorJRc63U,5521
sqlalchemy/testing/engines.py,sha256=6xrmfdYHTCMa8QBaJxWxuT3sL_VZacwBVZYok9L5dXM,10528
sqlalchemy/testing/entities.py,sha256=AqTYLKczh4WHFswa4Hw5vQ1CmPGXn3_I3_MBTr-QrAQ,3203
sqlalchemy/testing/exclusions.py,sha256=7cQWoJRm_X3q5Sv7DDb11VnykB41l_-C791G3xQQjVg,13220
sqlalchemy/testing/fixtures.py,sha256=JrC5yBhoOjWrzu0WolDvyGE0GYDoRlqDfAcjk4ELbr0,14917
sqlalchemy/testing/mock.py,sha256=7GKwpmJQXqI65E8nIKqY0bwleIxxWkJl7vOQ-2X-0w4,893
sqlalchemy/testing/pickleable.py,sha256=C_MqKsBUJnzPaOfzK5wsfwSqcvV8upId9xTC0c7-Wm0,2693
sqlalchemy/testing/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
sqlalchemy/testing/plugin/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/testing/plugin/__pycache__/bootstrap.cpython-38.pyc,,
sqlalchemy/testing/plugin/__pycache__/plugin_base.cpython-38.pyc,,
sqlalchemy/testing/plugin/__pycache__/pytestplugin.cpython-38.pyc,,
sqlalchemy/testing/plugin/bootstrap.py,sha256=0rkror_9S175GPGNnbtbDmfdLEhu9v-AAv715lR8KyU,1468
sqlalchemy/testing/plugin/plugin_base.py,sha256=bDj-2YKsiLOEwkYcT_1FnpFiT7cJUPQaVP2Z8aVMzKI,20455
sqlalchemy/testing/plugin/pytestplugin.py,sha256=g-s_XCxAp23sP81mTgIgKNlu2h63RnRypmcFFAt7KcM,16055
sqlalchemy/testing/profiling.py,sha256=LdmyansaQUqm6aP31FmQ33uEXE50nN5cLbPfLCjAsEE,8741
sqlalchemy/testing/provision.py,sha256=-25MIMowZV4iCmbFgQ74oTaGVCHH33Rxq4zVoIF_XxU,5572
sqlalchemy/testing/replay_fixture.py,sha256=W_QZD96t7ichRNvILOjhuoQXTCYnd2usiHBQhPkzUYI,5875
sqlalchemy/testing/requirements.py,sha256=s8mXcHLlhi6fDwnWJ6Y8p1lfV8QmwUD89Pd3wfJ5yXo,33063
sqlalchemy/testing/schema.py,sha256=yyhuI-l__HtQINm5lSbFOzJWTP33PWhEx7ErCAavyqU,3712
sqlalchemy/testing/suite/__init__.py,sha256=SUWU-LR3asH2hN2YsIhlpqxeuo8fpvej3o6nct-L4xU,358
sqlalchemy/testing/suite/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_cte.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_ddl.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_dialect.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_insert.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_reflection.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_results.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_select.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_sequence.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_types.cpython-38.pyc,,
sqlalchemy/testing/suite/__pycache__/test_update_delete.cpython-38.pyc,,
sqlalchemy/testing/suite/test_cte.py,sha256=VbBzRrNWXk2EkuFAz5f5vFXaR9tU240c63dSY88qpf0,6801
sqlalchemy/testing/suite/test_ddl.py,sha256=jRgSteRzO9dn1kQEFjW7DwmnGB_5A4nN0BoFR1tmOVo,9064
sqlalchemy/testing/suite/test_dialect.py,sha256=jELX6CVW7nHeY0trT9cSsV7X-oiJ24No2FVBQo2UBiQ,6860
sqlalchemy/testing/suite/test_insert.py,sha256=Hiwa4iE-oG4csNG57CieNgN2-hGfHX8xgbMQT3rM0TE,9672
sqlalchemy/testing/suite/test_reflection.py,sha256=FtMUIbgT2PpumvxjYNYiQ1q2uNHTygmThpj4hcfajNU,48391
sqlalchemy/testing/suite/test_results.py,sha256=wemYY7ZTVisKLbks8p1Maf1HEOLZ9vigIsGoHHc4Cbw,10971
sqlalchemy/testing/suite/test_select.py,sha256=Sy-B7GWsEsIuA2rK-EhDHcAI9B4GZwmHMLq9_z6Xjto,24393
sqlalchemy/testing/suite/test_sequence.py,sha256=oacBvtAqW3Ua3gcqyqnT1U_hpJutEW_EmEbwvf7Xq7E,4661
sqlalchemy/testing/suite/test_types.py,sha256=hTKuq3ZxbwJp1xLsqjKhGAJRrOEFQMS6Ew6A9EJUS-c,37161
sqlalchemy/testing/suite/test_update_delete.py,sha256=I2NOhWu7iwKLJzcqM_6sLh3WCE1jmcN8tLwBzvNYLPg,1491
sqlalchemy/testing/util.py,sha256=aUqGKkFl8iiXX6-FnVsZn8raw_e2UEFvth1zIXh3BHQ,10149
sqlalchemy/testing/warnings.py,sha256=VJkKwRvCn6aEdbS_aofomrktaWPmGkQ-up1LJLHJCVY,1649
sqlalchemy/types.py,sha256=vPVnkVVfZrywYxCd_VWYfoJUOPBhpdAAleKlcxDxuB0,3377
sqlalchemy/util/__init__.py,sha256=RvsFbqQLFJPxwHmAdhbruzlXNk-oZPX7PzOB9eZP1IE,6711
sqlalchemy/util/__pycache__/__init__.cpython-38.pyc,,
sqlalchemy/util/__pycache__/_collections.cpython-38.pyc,,
sqlalchemy/util/__pycache__/_preloaded.cpython-38.pyc,,
sqlalchemy/util/__pycache__/compat.cpython-38.pyc,,
sqlalchemy/util/__pycache__/deprecations.cpython-38.pyc,,
sqlalchemy/util/__pycache__/langhelpers.cpython-38.pyc,,
sqlalchemy/util/__pycache__/queue.cpython-38.pyc,,
sqlalchemy/util/__pycache__/topological.cpython-38.pyc,,
sqlalchemy/util/_collections.py,sha256=GxzEak0oLJqdiOxmW9t5WW2UGy_F02FhFDiUVKtnuV8,29219
sqlalchemy/util/_preloaded.py,sha256=GvH_E9UkXgMgCwwZVvIpEhsj-POcwsIVayjXB_8ON9c,5765
sqlalchemy/util/compat.py,sha256=iJmEwGhtV7BcJNZ5zsZmyl4OnXp3AbqaUe-GEp-VH6k,16920
sqlalchemy/util/deprecations.py,sha256=Lp160Bfl_01YfxRLxzMKtsV12ZrW2JlON5h693OfG60,7474
sqlalchemy/util/langhelpers.py,sha256=oHRxxqMafVcK7JgtNqJ-p2G7UPedGt0zzJ5ezz2vq3Q,47707
sqlalchemy/util/queue.py,sha256=ZX0mG0SLdrTAh4J6eBMfBOdwJVey_bPQf5HCXEu1IiM,6827
sqlalchemy/util/topological.py,sha256=32yF_dXbio62iosoIbQvb2zcjUv9hWfbnIsFPcotYuE,2767

View File

@ -1,5 +0,0 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.36.2)
Root-Is-Purelib: false
Tag: cp38-cp38-manylinux2010_x86_64

View File

@ -1,201 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2013-2020 aiohttp maintainers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -1,978 +0,0 @@
Metadata-Version: 2.1
Name: aiohttp
Version: 3.7.4.post0
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author: Nikolay Kim
Author-email: fafhrd91@gmail.com
Maintainer: Nikolay Kim <fafhrd91@gmail.com>, Andrew Svetlov <andrew.svetlov@gmail.com>
Maintainer-email: aio-libs@googlegroups.com
License: Apache 2
Project-URL: Chat: Gitter, https://gitter.im/aio-libs/Lobby
Project-URL: CI: Azure Pipelines, https://dev.azure.com/aio-libs/aiohttp/_build
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/aiohttp
Project-URL: Docs: RTD, https://docs.aiohttp.org
Project-URL: GitHub: issues, https://github.com/aio-libs/aiohttp/issues
Project-URL: GitHub: repo, https://github.com/aio-libs/aiohttp
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Framework :: AsyncIO
Requires-Python: >=3.6
Requires-Dist: attrs (>=17.3.0)
Requires-Dist: chardet (<5.0,>=2.0)
Requires-Dist: multidict (<7.0,>=4.5)
Requires-Dist: async-timeout (<4.0,>=3.0)
Requires-Dist: yarl (<2.0,>=1.0)
Requires-Dist: typing-extensions (>=3.6.5)
Requires-Dist: idna-ssl (>=1.0) ; python_version < "3.7"
Provides-Extra: speedups
Requires-Dist: aiodns ; extra == 'speedups'
Requires-Dist: brotlipy ; extra == 'speedups'
Requires-Dist: cchardet ; extra == 'speedups'
==================================
Async http client/server framework
==================================
.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/_static/aiohttp-icon-128x128.png
:height: 64px
:width: 64px
:alt: aiohttp logo
|
.. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg
:target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI
:alt: GitHub Actions status for master branch
.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg
:target: https://codecov.io/gh/aio-libs/aiohttp
:alt: codecov.io status for master branch
.. image:: https://badge.fury.io/py/aiohttp.svg
:target: https://pypi.org/project/aiohttp
:alt: Latest PyPI package version
.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest
:target: https://docs.aiohttp.org/
:alt: Latest Read The Docs
.. image:: https://img.shields.io/discourse/status?server=https%3A%2F%2Faio-libs.discourse.group
:target: https://aio-libs.discourse.group
:alt: Discourse status
.. image:: https://badges.gitter.im/Join%20Chat.svg
:target: https://gitter.im/aio-libs/Lobby
:alt: Chat on Gitter
Key Features
============
- Supports both client and server side of HTTP protocol.
- Supports both client and server Web-Sockets out-of-the-box and avoids
Callback Hell.
- Provides Web-server with middlewares and plugable routing.
Getting started
===============
Client
------
To get something from the web:
.. code-block:: python
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://python.org') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
This prints:
.. code-block::
Status: 200
Content-type: text/html; charset=utf-8
Body: <!doctype html> ...
Coming from `requests <https://requests.readthedocs.io/>`_ ? Read `why we need so many lines <https://aiohttp.readthedocs.io/en/latest/http_request_lifecycle.html>`_.
Server
------
An example using a simple server:
.. code-block:: python
# examples/server_simple.py
from aiohttp import web
async def handle(request):
name = request.match_info.get('name', "Anonymous")
text = "Hello, " + name
return web.Response(text=text)
async def wshandle(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
async for msg in ws:
if msg.type == web.WSMsgType.text:
await ws.send_str("Hello, {}".format(msg.data))
elif msg.type == web.WSMsgType.binary:
await ws.send_bytes(msg.data)
elif msg.type == web.WSMsgType.close:
break
return ws
app = web.Application()
app.add_routes([web.get('/', handle),
web.get('/echo', wshandle),
web.get('/{name}', handle)])
if __name__ == '__main__':
web.run_app(app)
Documentation
=============
https://aiohttp.readthedocs.io/
Demos
=====
https://github.com/aio-libs/aiohttp-demos
External links
==============
* `Third party libraries
<http://aiohttp.readthedocs.io/en/latest/third_party.html>`_
* `Built with aiohttp
<http://aiohttp.readthedocs.io/en/latest/built_with.html>`_
* `Powered by aiohttp
<http://aiohttp.readthedocs.io/en/latest/powered_by.html>`_
Feel free to make a Pull Request for adding your link to these pages!
Communication channels
======================
*aio-libs discourse group*: https://aio-libs.discourse.group
*gitter chat* https://gitter.im/aio-libs/Lobby
We support `Stack Overflow
<https://stackoverflow.com/questions/tagged/aiohttp>`_.
Please add *aiohttp* tag to your question there.
Requirements
============
- Python >= 3.6
- async-timeout_
- attrs_
- chardet_
- multidict_
- yarl_
Optionally you may install the cChardet_ and aiodns_ libraries (highly
recommended for sake of speed).
.. _chardet: https://pypi.python.org/pypi/chardet
.. _aiodns: https://pypi.python.org/pypi/aiodns
.. _attrs: https://github.com/python-attrs/attrs
.. _multidict: https://pypi.python.org/pypi/multidict
.. _yarl: https://pypi.python.org/pypi/yarl
.. _async-timeout: https://pypi.python.org/pypi/async_timeout
.. _cChardet: https://pypi.python.org/pypi/cchardet
License
=======
``aiohttp`` is offered under the Apache 2 license.
Keepsafe
========
The aiohttp community would like to thank Keepsafe
(https://www.getkeepsafe.com) for its support in the early days of
the project.
Source code
===========
The latest developer version is available in a GitHub repository:
https://github.com/aio-libs/aiohttp
Benchmarks
==========
If you are interested in efficiency, the AsyncIO community maintains a
list of benchmarks on the official wiki:
https://github.com/python/asyncio/wiki/Benchmarks
=========
Changelog
=========
..
You should *NOT* be adding new change log entries to this file, this
file is managed by towncrier. You *may* edit previous change logs to
fix problems like typo corrections or such.
To add a new change log entry, please see
https://pip.pypa.io/en/latest/development/#adding-a-news-entry
we named the news folder "changes".
WARNING: Don't drop the next directive!
.. towncrier release notes start
3.7.4.post0 (2021-03-06)
========================
Misc
----
- Bumped upper bound of the ``chardet`` runtime dependency
to allow their v4.0 version stream.
`#5366 <https://github.com/aio-libs/aiohttp/issues/5366>`_
----
3.7.4 (2021-02-25)
==================
Bugfixes
--------
- **(SECURITY BUG)** Started preventing open redirects in the
``aiohttp.web.normalize_path_middleware`` middleware. For
more details, see
https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg.
Thanks to `Beast Glatisant <https://github.com/g147>`__ for
finding the first instance of this issue and `Jelmer Vernooij
<https://jelmer.uk/>`__ for reporting and tracking it down
in aiohttp.
`#5497 <https://github.com/aio-libs/aiohttp/issues/5497>`_
- Fix interpretation difference of the pure-Python and the Cython-based
HTTP parsers construct a ``yarl.URL`` object for HTTP request-target.
Before this fix, the Python parser would turn the URI's absolute-path
for ``//some-path`` into ``/`` while the Cython code preserved it as
``//some-path``. Now, both do the latter.
`#5498 <https://github.com/aio-libs/aiohttp/issues/5498>`_
----
3.7.3 (2020-11-18)
==================
Features
--------
- Use Brotli instead of brotlipy
`#3803 <https://github.com/aio-libs/aiohttp/issues/3803>`_
- Made exceptions pickleable. Also changed the repr of some exceptions.
`#4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
Bugfixes
--------
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
`#3532 <https://github.com/aio-libs/aiohttp/issues/3532>`_
- Fix ``web_middlewares.normalize_path_middleware`` behavior for patch without slash.
`#3669 <https://github.com/aio-libs/aiohttp/issues/3669>`_
- Fix overshadowing of overlapped sub-applications prefixes.
`#3701 <https://github.com/aio-libs/aiohttp/issues/3701>`_
- Make `BaseConnector.close()` a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax.
`#3736 <https://github.com/aio-libs/aiohttp/issues/3736>`_
- Reset the ``sock_read`` timeout each time data is received for a ``aiohttp.client`` response.
`#3808 <https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View
`#3880 <https://github.com/aio-libs/aiohttp/issues/3880>`_
- Fixed querying the address families from DNS that the current host supports.
`#5156 <https://github.com/aio-libs/aiohttp/issues/5156>`_
- Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator.
`#5163 <https://github.com/aio-libs/aiohttp/issues/5163>`_
- Provide x86 Windows wheels.
`#5230 <https://github.com/aio-libs/aiohttp/issues/5230>`_
Improved Documentation
----------------------
- Add documentation for ``aiohttp.web.FileResponse``.
`#3958 <https://github.com/aio-libs/aiohttp/issues/3958>`_
- Removed deprecation warning in tracing example docs
`#3964 <https://github.com/aio-libs/aiohttp/issues/3964>`_
- Fixed wrong "Usage" docstring of ``aiohttp.client.request``.
`#4603 <https://github.com/aio-libs/aiohttp/issues/4603>`_
- Add aiohttp-pydantic to third party libraries
`#5228 <https://github.com/aio-libs/aiohttp/issues/5228>`_
Misc
----
- `#4102 <https://github.com/aio-libs/aiohttp/issues/4102>`_
----
3.7.2 (2020-10-27)
==================
Bugfixes
--------
- Fixed static files handling for loops without ``.sendfile()`` support
`#5149 <https://github.com/aio-libs/aiohttp/issues/5149>`_
----
3.7.1 (2020-10-25)
==================
Bugfixes
--------
- Fixed a type error caused by the conditional import of `Protocol`.
`#5111 <https://github.com/aio-libs/aiohttp/issues/5111>`_
- Server doesn't send Content-Length for 1xx or 204
`#4901 <https://github.com/aio-libs/aiohttp/issues/4901>`_
- Fix run_app typing
`#4957 <https://github.com/aio-libs/aiohttp/issues/4957>`_
- Always require ``typing_extensions`` library.
`#5107 <https://github.com/aio-libs/aiohttp/issues/5107>`_
- Fix a variable-shadowing bug causing `ThreadedResolver.resolve` to
return the resolved IP as the ``hostname`` in each record, which prevented
validation of HTTPS connections.
`#5110 <https://github.com/aio-libs/aiohttp/issues/5110>`_
- Added annotations to all public attributes.
`#5115 <https://github.com/aio-libs/aiohttp/issues/5115>`_
- Fix flaky test_when_timeout_smaller_second
`#5116 <https://github.com/aio-libs/aiohttp/issues/5116>`_
- Ensure sending a zero byte file does not throw an exception
`#5124 <https://github.com/aio-libs/aiohttp/issues/5124>`_
- Fix a bug in ``web.run_app()`` about Python version checking on Windows
`#5127 <https://github.com/aio-libs/aiohttp/issues/5127>`_
----
3.7.0 (2020-10-24)
==================
Features
--------
- Response headers are now prepared prior to running ``on_response_prepare`` hooks, directly before headers are sent to the client.
`#1958 <https://github.com/aio-libs/aiohttp/issues/1958>`_
- Add a ``quote_cookie`` option to ``CookieJar``, a way to skip quotation wrapping of cookies containing special characters.
`#2571 <https://github.com/aio-libs/aiohttp/issues/2571>`_
- Call ``AccessLogger.log`` with the current exception available from ``sys.exc_info()``.
`#3557 <https://github.com/aio-libs/aiohttp/issues/3557>`_
- `web.UrlDispatcher.add_routes` and `web.Application.add_routes` return a list
of registered `AbstractRoute` instances. `AbstractRouteDef.register` (and all
subclasses) return a list of registered resources registered resource.
`#3866 <https://github.com/aio-libs/aiohttp/issues/3866>`_
- Added properties of default ClientSession params to ClientSession class so it is available for introspection
`#3882 <https://github.com/aio-libs/aiohttp/issues/3882>`_
- Don't cancel web handler on peer disconnection, raise `OSError` on reading/writing instead.
`#4080 <https://github.com/aio-libs/aiohttp/issues/4080>`_
- Implement BaseRequest.get_extra_info() to access a protocol transports' extra info.
`#4189 <https://github.com/aio-libs/aiohttp/issues/4189>`_
- Added `ClientSession.timeout` property.
`#4191 <https://github.com/aio-libs/aiohttp/issues/4191>`_
- allow use of SameSite in cookies.
`#4224 <https://github.com/aio-libs/aiohttp/issues/4224>`_
- Use ``loop.sendfile()`` instead of custom implementation if available.
`#4269 <https://github.com/aio-libs/aiohttp/issues/4269>`_
- Apply SO_REUSEADDR to test server's socket.
`#4393 <https://github.com/aio-libs/aiohttp/issues/4393>`_
- Use .raw_host instead of slower .host in client API
`#4402 <https://github.com/aio-libs/aiohttp/issues/4402>`_
- Allow configuring the buffer size of input stream by passing ``read_bufsize`` argument.
`#4453 <https://github.com/aio-libs/aiohttp/issues/4453>`_
- Pass tests on Python 3.8 for Windows.
`#4513 <https://github.com/aio-libs/aiohttp/issues/4513>`_
- Add `method` and `url` attributes to `TraceRequestChunkSentParams` and `TraceResponseChunkReceivedParams`.
`#4674 <https://github.com/aio-libs/aiohttp/issues/4674>`_
- Add ClientResponse.ok property for checking status code under 400.
`#4711 <https://github.com/aio-libs/aiohttp/issues/4711>`_
- Don't ceil timeouts that are smaller than 5 seconds.
`#4850 <https://github.com/aio-libs/aiohttp/issues/4850>`_
- TCPSite now listens by default on all interfaces instead of just IPv4 when `None` is passed in as the host.
`#4894 <https://github.com/aio-libs/aiohttp/issues/4894>`_
- Bump ``http_parser`` to 2.9.4
`#5070 <https://github.com/aio-libs/aiohttp/issues/5070>`_
Bugfixes
--------
- Fix keepalive connections not being closed in time
`#3296 <https://github.com/aio-libs/aiohttp/issues/3296>`_
- Fix failed websocket handshake leaving connection hanging.
`#3380 <https://github.com/aio-libs/aiohttp/issues/3380>`_
- Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact.
`#3805 <https://github.com/aio-libs/aiohttp/issues/3805>`_
- Don't start heartbeat until _writer is set
`#4062 <https://github.com/aio-libs/aiohttp/issues/4062>`_
- Fix handling of multipart file uploads without a content type.
`#4089 <https://github.com/aio-libs/aiohttp/issues/4089>`_
- Preserve view handler function attributes across middlewares
`#4174 <https://github.com/aio-libs/aiohttp/issues/4174>`_
- Fix the string representation of ``ServerDisconnectedError``.
`#4175 <https://github.com/aio-libs/aiohttp/issues/4175>`_
- Raising RuntimeError when trying to get encoding from not read body
`#4214 <https://github.com/aio-libs/aiohttp/issues/4214>`_
- Remove warning messages from noop.
`#4282 <https://github.com/aio-libs/aiohttp/issues/4282>`_
- Raise ClientPayloadError if FormData re-processed.
`#4345 <https://github.com/aio-libs/aiohttp/issues/4345>`_
- Fix a warning about unfinished task in ``web_protocol.py``
`#4408 <https://github.com/aio-libs/aiohttp/issues/4408>`_
- Fixed 'deflate' compression. According to RFC 2616 now.
`#4506 <https://github.com/aio-libs/aiohttp/issues/4506>`_
- Fixed OverflowError on platforms with 32-bit time_t
`#4515 <https://github.com/aio-libs/aiohttp/issues/4515>`_
- Fixed request.body_exists returns wrong value for methods without body.
`#4528 <https://github.com/aio-libs/aiohttp/issues/4528>`_
- Fix connecting to link-local IPv6 addresses.
`#4554 <https://github.com/aio-libs/aiohttp/issues/4554>`_
- Fix a problem with connection waiters that are never awaited.
`#4562 <https://github.com/aio-libs/aiohttp/issues/4562>`_
- Always make sure transport is not closing before reuse a connection.
Reuse a protocol based on keepalive in headers is unreliable.
For example, uWSGI will not support keepalive even it serves a
HTTP 1.1 request, except explicitly configure uWSGI with a
``--http-keepalive`` option.
Servers designed like uWSGI could cause aiohttp intermittently
raise a ConnectionResetException when the protocol poll runs
out and some protocol is reused.
`#4587 <https://github.com/aio-libs/aiohttp/issues/4587>`_
- Handle the last CRLF correctly even if it is received via separate TCP segment.
`#4630 <https://github.com/aio-libs/aiohttp/issues/4630>`_
- Fix the register_resource function to validate route name before splitting it so that route name can include python keywords.
`#4691 <https://github.com/aio-libs/aiohttp/issues/4691>`_
- Improve typing annotations for ``web.Request``, ``aiohttp.ClientResponse`` and
``multipart`` module.
`#4736 <https://github.com/aio-libs/aiohttp/issues/4736>`_
- Fix resolver task is not awaited when connector is cancelled
`#4795 <https://github.com/aio-libs/aiohttp/issues/4795>`_
- Fix a bug "Aiohttp doesn't return any error on invalid request methods"
`#4798 <https://github.com/aio-libs/aiohttp/issues/4798>`_
- Fix HEAD requests for static content.
`#4809 <https://github.com/aio-libs/aiohttp/issues/4809>`_
- Fix incorrect size calculation for memoryview
`#4890 <https://github.com/aio-libs/aiohttp/issues/4890>`_
- Add HTTPMove to _all__.
`#4897 <https://github.com/aio-libs/aiohttp/issues/4897>`_
- Fixed the type annotations in the ``tracing`` module.
`#4912 <https://github.com/aio-libs/aiohttp/issues/4912>`_
- Fix typing for multipart ``__aiter__``.
`#4931 <https://github.com/aio-libs/aiohttp/issues/4931>`_
- Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit.
`#4936 <https://github.com/aio-libs/aiohttp/issues/4936>`_
- Add forced UTF-8 encoding for ``application/rdap+json`` responses.
`#4938 <https://github.com/aio-libs/aiohttp/issues/4938>`_
- Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL.
`#4972 <https://github.com/aio-libs/aiohttp/issues/4972>`_
- Fix connection closing issue in HEAD request.
`#5012 <https://github.com/aio-libs/aiohttp/issues/5012>`_
- Fix type hint on BaseRunner.addresses (from ``List[str]`` to ``List[Any]``)
`#5086 <https://github.com/aio-libs/aiohttp/issues/5086>`_
- Make `web.run_app()` more responsive to Ctrl+C on Windows for Python < 3.8. It slightly
increases CPU load as a side effect.
`#5098 <https://github.com/aio-libs/aiohttp/issues/5098>`_
Improved Documentation
----------------------
- Fix example code in client quick-start
`#3376 <https://github.com/aio-libs/aiohttp/issues/3376>`_
- Updated the docs so there is no contradiction in ``ttl_dns_cache`` default value
`#3512 <https://github.com/aio-libs/aiohttp/issues/3512>`_
- Add 'Deploy with SSL' to docs.
`#4201 <https://github.com/aio-libs/aiohttp/issues/4201>`_
- Change typing of the secure argument on StreamResponse.set_cookie from ``Optional[str]`` to ``Optional[bool]``
`#4204 <https://github.com/aio-libs/aiohttp/issues/4204>`_
- Changes ``ttl_dns_cache`` type from int to Optional[int].
`#4270 <https://github.com/aio-libs/aiohttp/issues/4270>`_
- Simplify README hello word example and add a documentation page for people coming from requests.
`#4272 <https://github.com/aio-libs/aiohttp/issues/4272>`_
- Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner.
`#4285 <https://github.com/aio-libs/aiohttp/issues/4285>`_
- Fix typo in code example in Multipart docs
`#4312 <https://github.com/aio-libs/aiohttp/issues/4312>`_
- Fix code example in Multipart section.
`#4314 <https://github.com/aio-libs/aiohttp/issues/4314>`_
- Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting.
`#4810 <https://github.com/aio-libs/aiohttp/issues/4810>`_
- Spelling: Change "canonize" to "canonicalize".
`#4986 <https://github.com/aio-libs/aiohttp/issues/4986>`_
- Add ``aiohttp-sse-client`` library to third party usage list.
`#5084 <https://github.com/aio-libs/aiohttp/issues/5084>`_
Misc
----
- `#2856 <https://github.com/aio-libs/aiohttp/issues/2856>`_, `#4218 <https://github.com/aio-libs/aiohttp/issues/4218>`_, `#4250 <https://github.com/aio-libs/aiohttp/issues/4250>`_
----
3.6.3 (2020-10-12)
==================
Bugfixes
--------
- Pin yarl to ``<1.6.0`` to avoid buggy behavior that will be fixed by the next aiohttp
release.
3.6.2 (2019-10-09)
==================
Features
--------
- Made exceptions pickleable. Also changed the repr of some exceptions.
`#4077 <https://github.com/aio-libs/aiohttp/issues/4077>`_
- Use ``Iterable`` type hint instead of ``Sequence`` for ``Application`` *middleware*
parameter. `#4125 <https://github.com/aio-libs/aiohttp/issues/4125>`_
Bugfixes
--------
- Reset the ``sock_read`` timeout each time data is received for a
``aiohttp.ClientResponse``. `#3808
<https://github.com/aio-libs/aiohttp/issues/3808>`_
- Fix handling of expired cookies so they are not stored in CookieJar.
`#4063 <https://github.com/aio-libs/aiohttp/issues/4063>`_
- Fix misleading message in the string representation of ``ClientConnectorError``;
``self.ssl == None`` means default SSL context, not SSL disabled `#4097
<https://github.com/aio-libs/aiohttp/issues/4097>`_
- Don't clobber HTTP status when using FileResponse.
`#4106 <https://github.com/aio-libs/aiohttp/issues/4106>`_
Improved Documentation
----------------------
- Added minimal required logging configuration to logging documentation.
`#2469 <https://github.com/aio-libs/aiohttp/issues/2469>`_
- Update docs to reflect proxy support.
`#4100 <https://github.com/aio-libs/aiohttp/issues/4100>`_
- Fix typo in code example in testing docs.
`#4108 <https://github.com/aio-libs/aiohttp/issues/4108>`_
Misc
----
- `#4102 <https://github.com/aio-libs/aiohttp/issues/4102>`_
----
3.6.1 (2019-09-19)
==================
Features
--------
- Compatibility with Python 3.8.
`#4056 <https://github.com/aio-libs/aiohttp/issues/4056>`_
Bugfixes
--------
- correct some exception string format
`#4068 <https://github.com/aio-libs/aiohttp/issues/4068>`_
- Emit a warning when ``ssl.OP_NO_COMPRESSION`` is
unavailable because the runtime is built against
an outdated OpenSSL.
`#4052 <https://github.com/aio-libs/aiohttp/issues/4052>`_
- Update multidict requirement to >= 4.5
`#4057 <https://github.com/aio-libs/aiohttp/issues/4057>`_
Improved Documentation
----------------------
- Provide pytest-aiohttp namespace for pytest fixtures in docs.
`#3723 <https://github.com/aio-libs/aiohttp/issues/3723>`_
----
3.6.0 (2019-09-06)
==================
Features
--------
- Add support for Named Pipes (Site and Connector) under Windows. This feature requires
Proactor event loop to work. `#3629
<https://github.com/aio-libs/aiohttp/issues/3629>`_
- Removed ``Transfer-Encoding: chunked`` header from websocket responses to be
compatible with more http proxy servers. `#3798
<https://github.com/aio-libs/aiohttp/issues/3798>`_
- Accept non-GET request for starting websocket handshake on server side.
`#3980 <https://github.com/aio-libs/aiohttp/issues/3980>`_
Bugfixes
--------
- Raise a ClientResponseError instead of an AssertionError for a blank
HTTP Reason Phrase.
`#3532 <https://github.com/aio-libs/aiohttp/issues/3532>`_
- Fix an issue where cookies would sometimes not be set during a redirect.
`#3576 <https://github.com/aio-libs/aiohttp/issues/3576>`_
- Change normalize_path_middleware to use 308 redirect instead of 301.
This behavior should prevent clients from being unable to use PUT/POST
methods on endpoints that are redirected because of a trailing slash.
`#3579 <https://github.com/aio-libs/aiohttp/issues/3579>`_
- Drop the processed task from ``all_tasks()`` list early. It prevents logging about a
task with unhandled exception when the server is used in conjunction with
``asyncio.run()``. `#3587 <https://github.com/aio-libs/aiohttp/issues/3587>`_
- ``Signal`` type annotation changed from ``Signal[Callable[['TraceConfig'],
Awaitable[None]]]`` to ``Signal[Callable[ClientSession, SimpleNamespace, ...]``.
`#3595 <https://github.com/aio-libs/aiohttp/issues/3595>`_
- Use sanitized URL as Location header in redirects
`#3614 <https://github.com/aio-libs/aiohttp/issues/3614>`_
- Improve typing annotations for multipart.py along with changes required
by mypy in files that references multipart.py.
`#3621 <https://github.com/aio-libs/aiohttp/issues/3621>`_
- Close session created inside ``aiohttp.request`` when unhandled exception occurs
`#3628 <https://github.com/aio-libs/aiohttp/issues/3628>`_
- Cleanup per-chunk data in generic data read. Memory leak fixed.
`#3631 <https://github.com/aio-libs/aiohttp/issues/3631>`_
- Use correct type for add_view and family
`#3633 <https://github.com/aio-libs/aiohttp/issues/3633>`_
- Fix _keepalive field in __slots__ of ``RequestHandler``.
`#3644 <https://github.com/aio-libs/aiohttp/issues/3644>`_
- Properly handle ConnectionResetError, to silence the "Cannot write to closing
transport" exception when clients disconnect uncleanly.
`#3648 <https://github.com/aio-libs/aiohttp/issues/3648>`_
- Suppress pytest warnings due to ``test_utils`` classes
`#3660 <https://github.com/aio-libs/aiohttp/issues/3660>`_
- Fix overshadowing of overlapped sub-application prefixes.
`#3701 <https://github.com/aio-libs/aiohttp/issues/3701>`_
- Fixed return type annotation for WSMessage.json()
`#3720 <https://github.com/aio-libs/aiohttp/issues/3720>`_
- Properly expose TooManyRedirects publicly as documented.
`#3818 <https://github.com/aio-libs/aiohttp/issues/3818>`_
- Fix missing brackets for IPv6 in proxy CONNECT request
`#3841 <https://github.com/aio-libs/aiohttp/issues/3841>`_
- Make the signature of ``aiohttp.test_utils.TestClient.request`` match
``asyncio.ClientSession.request`` according to the docs `#3852
<https://github.com/aio-libs/aiohttp/issues/3852>`_
- Use correct style for re-exported imports, makes mypy ``--strict`` mode happy.
`#3868 <https://github.com/aio-libs/aiohttp/issues/3868>`_
- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of
View `#3880 <https://github.com/aio-libs/aiohttp/issues/3880>`_
- Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is
missing. `#3906 <https://github.com/aio-libs/aiohttp/issues/3906>`_
- Add URL to the string representation of ClientResponseError.
`#3959 <https://github.com/aio-libs/aiohttp/issues/3959>`_
- Accept ``istr`` keys in ``LooseHeaders`` type hints.
`#3976 <https://github.com/aio-libs/aiohttp/issues/3976>`_
- Fixed race conditions in _resolve_host caching and throttling when tracing is enabled.
`#4013 <https://github.com/aio-libs/aiohttp/issues/4013>`_
- For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of
"localhost:None". `#4039 <https://github.com/aio-libs/aiohttp/issues/4039>`_
Improved Documentation
----------------------
- Modify documentation for Background Tasks to remove deprecated usage of event loop.
`#3526 <https://github.com/aio-libs/aiohttp/issues/3526>`_
- use ``if __name__ == '__main__':`` in server examples.
`#3775 <https://github.com/aio-libs/aiohttp/issues/3775>`_
- Update documentation reference to the default access logger.
`#3783 <https://github.com/aio-libs/aiohttp/issues/3783>`_
- Improve documentation for ``web.BaseRequest.path`` and ``web.BaseRequest.raw_path``.
`#3791 <https://github.com/aio-libs/aiohttp/issues/3791>`_
- Removed deprecation warning in tracing example docs
`#3964 <https://github.com/aio-libs/aiohttp/issues/3964>`_
----
3.5.4 (2019-01-12)
==================
Bugfixes
--------
- Fix stream ``.read()`` / ``.readany()`` / ``.iter_any()`` which used to return a
partial content only in case of compressed content
`#3525 <https://github.com/aio-libs/aiohttp/issues/3525>`_
3.5.3 (2019-01-10)
==================
Bugfixes
--------
- Fix type stubs for ``aiohttp.web.run_app(access_log=True)`` and fix edge case of
``access_log=True`` and the event loop being in debug mode. `#3504
<https://github.com/aio-libs/aiohttp/issues/3504>`_
- Fix ``aiohttp.ClientTimeout`` type annotations to accept ``None`` for fields
`#3511 <https://github.com/aio-libs/aiohttp/issues/3511>`_
- Send custom per-request cookies even if session jar is empty
`#3515 <https://github.com/aio-libs/aiohttp/issues/3515>`_
- Restore Linux binary wheels publishing on PyPI
----
3.5.2 (2019-01-08)
==================
Features
--------
- ``FileResponse`` from ``web_fileresponse.py`` uses a ``ThreadPoolExecutor`` to work
with files asynchronously. I/O based payloads from ``payload.py`` uses a
``ThreadPoolExecutor`` to work with I/O objects asynchronously. `#3313
<https://github.com/aio-libs/aiohttp/issues/3313>`_
- Internal Server Errors in plain text if the browser does not support HTML.
`#3483 <https://github.com/aio-libs/aiohttp/issues/3483>`_
Bugfixes
--------
- Preserve MultipartWriter parts headers on write. Refactor the way how
``Payload.headers`` are handled. Payload instances now always have headers and
Content-Type defined. Fix Payload Content-Disposition header reset after initial
creation. `#3035 <https://github.com/aio-libs/aiohttp/issues/3035>`_
- Log suppressed exceptions in ``GunicornWebWorker``.
`#3464 <https://github.com/aio-libs/aiohttp/issues/3464>`_
- Remove wildcard imports.
`#3468 <https://github.com/aio-libs/aiohttp/issues/3468>`_
- Use the same task for app initialization and web server handling in gunicorn workers.
It allows to use Python3.7 context vars smoothly.
`#3471 <https://github.com/aio-libs/aiohttp/issues/3471>`_
- Fix handling of chunked+gzipped response when first chunk does not give uncompressed
data `#3477 <https://github.com/aio-libs/aiohttp/issues/3477>`_
- Replace ``collections.MutableMapping`` with ``collections.abc.MutableMapping`` to
avoid a deprecation warning. `#3480
<https://github.com/aio-libs/aiohttp/issues/3480>`_
- ``Payload.size`` type annotation changed from ``Optional[float]`` to
``Optional[int]``. `#3484 <https://github.com/aio-libs/aiohttp/issues/3484>`_
- Ignore done tasks when cancels pending activities on ``web.run_app`` finalization.
`#3497 <https://github.com/aio-libs/aiohttp/issues/3497>`_
Improved Documentation
----------------------
- Add documentation for ``aiohttp.web.HTTPException``.
`#3490 <https://github.com/aio-libs/aiohttp/issues/3490>`_
Misc
----
- `#3487 <https://github.com/aio-libs/aiohttp/issues/3487>`_
----
3.5.1 (2018-12-24)
====================
- Fix a regression about ``ClientSession._requote_redirect_url`` modification in debug
mode.
3.5.0 (2018-12-22)
====================
Features
--------
- The library type annotations are checked in strict mode now.
- Add support for setting cookies for individual request (`#2387
<https://github.com/aio-libs/aiohttp/pull/2387>`_)
- Application.add_domain implementation (`#2809
<https://github.com/aio-libs/aiohttp/pull/2809>`_)
- The default ``app`` in the request returned by ``test_utils.make_mocked_request`` can
now have objects assigned to it and retrieved using the ``[]`` operator. (`#3174
<https://github.com/aio-libs/aiohttp/pull/3174>`_)
- Make ``request.url`` accessible when transport is closed. (`#3177
<https://github.com/aio-libs/aiohttp/pull/3177>`_)
- Add ``zlib_executor_size`` argument to ``Response`` constructor to allow compression
to run in a background executor to avoid blocking the main thread and potentially
triggering health check failures. (`#3205
<https://github.com/aio-libs/aiohttp/pull/3205>`_)
- Enable users to set ``ClientTimeout`` in ``aiohttp.request`` (`#3213
<https://github.com/aio-libs/aiohttp/pull/3213>`_)
- Don't raise a warning if ``NETRC`` environment variable is not set and ``~/.netrc``
file doesn't exist. (`#3267 <https://github.com/aio-libs/aiohttp/pull/3267>`_)
- Add default logging handler to web.run_app If the ``Application.debug``` flag is set
and the default logger ``aiohttp.access`` is used, access logs will now be output
using a *stderr* ``StreamHandler`` if no handlers are attached. Furthermore, if the
default logger has no log level set, the log level will be set to ``DEBUG``. (`#3324
<https://github.com/aio-libs/aiohttp/pull/3324>`_)
- Add method argument to ``session.ws_connect()``. Sometimes server API requires a
different HTTP method for WebSocket connection establishment. For example, ``Docker
exec`` needs POST. (`#3378 <https://github.com/aio-libs/aiohttp/pull/3378>`_)
- Create a task per request handling. (`#3406
<https://github.com/aio-libs/aiohttp/pull/3406>`_)
Bugfixes
--------
- Enable passing ``access_log_class`` via ``handler_args`` (`#3158
<https://github.com/aio-libs/aiohttp/pull/3158>`_)
- Return empty bytes with end-of-chunk marker in empty stream reader. (`#3186
<https://github.com/aio-libs/aiohttp/pull/3186>`_)
- Accept ``CIMultiDictProxy`` instances for ``headers`` argument in ``web.Response``
constructor. (`#3207 <https://github.com/aio-libs/aiohttp/pull/3207>`_)
- Don't uppercase HTTP method in parser (`#3233
<https://github.com/aio-libs/aiohttp/pull/3233>`_)
- Make method match regexp RFC-7230 compliant (`#3235
<https://github.com/aio-libs/aiohttp/pull/3235>`_)
- Add ``app.pre_frozen`` state to properly handle startup signals in
sub-applications. (`#3237 <https://github.com/aio-libs/aiohttp/pull/3237>`_)
- Enhanced parsing and validation of helpers.BasicAuth.decode. (`#3239
<https://github.com/aio-libs/aiohttp/pull/3239>`_)
- Change imports from collections module in preparation for 3.8. (`#3258
<https://github.com/aio-libs/aiohttp/pull/3258>`_)
- Ensure Host header is added first to ClientRequest to better replicate browser (`#3265
<https://github.com/aio-libs/aiohttp/pull/3265>`_)
- Fix forward compatibility with Python 3.8: importing ABCs directly from the
collections module will not be supported anymore. (`#3273
<https://github.com/aio-libs/aiohttp/pull/3273>`_)
- Keep the query string by ``normalize_path_middleware``. (`#3278
<https://github.com/aio-libs/aiohttp/pull/3278>`_)
- Fix missing parameter ``raise_for_status`` for aiohttp.request() (`#3290
<https://github.com/aio-libs/aiohttp/pull/3290>`_)
- Bracket IPv6 addresses in the HOST header (`#3304
<https://github.com/aio-libs/aiohttp/pull/3304>`_)
- Fix default message for server ping and pong frames. (`#3308
<https://github.com/aio-libs/aiohttp/pull/3308>`_)
- Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop
def. (`#3337 <https://github.com/aio-libs/aiohttp/pull/3337>`_)
- Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function
(`#3361 <https://github.com/aio-libs/aiohttp/pull/3361>`_)
- Release HTTP response before raising status exception (`#3364
<https://github.com/aio-libs/aiohttp/pull/3364>`_)
- Fix task cancellation when ``sendfile()`` syscall is used by static file
handling. (`#3383 <https://github.com/aio-libs/aiohttp/pull/3383>`_)
- Fix stack trace for ``asyncio.TimeoutError`` which was not logged, when it is caught
in the handler. (`#3414 <https://github.com/aio-libs/aiohttp/pull/3414>`_)
Improved Documentation
----------------------
- Improve documentation of ``Application.make_handler`` parameters. (`#3152
<https://github.com/aio-libs/aiohttp/pull/3152>`_)
- Fix BaseRequest.raw_headers doc. (`#3215
<https://github.com/aio-libs/aiohttp/pull/3215>`_)
- Fix typo in TypeError exception reason in ``web.Application._handle`` (`#3229
<https://github.com/aio-libs/aiohttp/pull/3229>`_)
- Make server access log format placeholder %b documentation reflect
behavior and docstring. (`#3307 <https://github.com/aio-libs/aiohttp/pull/3307>`_)
Deprecations and Removals
-------------------------
- Deprecate modification of ``session.requote_redirect_url`` (`#2278
<https://github.com/aio-libs/aiohttp/pull/2278>`_)
- Deprecate ``stream.unread_data()`` (`#3260
<https://github.com/aio-libs/aiohttp/pull/3260>`_)
- Deprecated use of boolean in ``resp.enable_compression()`` (`#3318
<https://github.com/aio-libs/aiohttp/pull/3318>`_)
- Encourage creation of aiohttp public objects inside a coroutine (`#3331
<https://github.com/aio-libs/aiohttp/pull/3331>`_)
- Drop dead ``Connection.detach()`` and ``Connection.writer``. Both methods were broken
for more than 2 years. (`#3358 <https://github.com/aio-libs/aiohttp/pull/3358>`_)
- Deprecate ``app.loop``, ``request.loop``, ``client.loop`` and ``connector.loop``
properties. (`#3374 <https://github.com/aio-libs/aiohttp/pull/3374>`_)
- Deprecate explicit debug argument. Use asyncio debug mode instead. (`#3381
<https://github.com/aio-libs/aiohttp/pull/3381>`_)
- Deprecate body parameter in HTTPException (and derived classes) constructor. (`#3385
<https://github.com/aio-libs/aiohttp/pull/3385>`_)
- Deprecate bare connector close, use ``async with connector:`` and ``await
connector.close()`` instead. (`#3417
<https://github.com/aio-libs/aiohttp/pull/3417>`_)
- Deprecate obsolete ``read_timeout`` and ``conn_timeout`` in ``ClientSession``
constructor. (`#3438 <https://github.com/aio-libs/aiohttp/pull/3438>`_)
Misc
----
- #3341, #3351

View File

@ -1,135 +0,0 @@
aiohttp-3.7.4.post0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
aiohttp-3.7.4.post0.dist-info/LICENSE.txt,sha256=lmJ77QrQjpsu-p9OBOgIN80FUOdpSg_sM7HaslUCgqs,11321
aiohttp-3.7.4.post0.dist-info/METADATA,sha256=ZF35_2WGQmQSkWbZ9iHwYLbq61rWAzpVTk0FNlVNy84,38836
aiohttp-3.7.4.post0.dist-info/RECORD,,
aiohttp-3.7.4.post0.dist-info/WHEEL,sha256=CdtkbqNu7DBs9FjP8gJdY-3OlUWCYZ9daXyZrkB77RQ,111
aiohttp-3.7.4.post0.dist-info/top_level.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8
aiohttp/.hash/_cparser.pxd.hash,sha256=FL_-kRTf28EWLc1Y_LH1gBAITrbK5XUY0NJS4umU9c4,121
aiohttp/.hash/_find_header.pxd.hash,sha256=_mbpD6vM-CVCKq3ulUvsOAz5Wdo88wrDzfpOsMQaMNA,125
aiohttp/.hash/_frozenlist.pyx.hash,sha256=4VdSipvJDSaEmEEp05VjHxyaYx47L1m0nWnBHUftJBE,124
aiohttp/.hash/_helpers.pyi.hash,sha256=Ew4BZDc2LqFwszgZZUHHrJvw5P8HBhJ700n1Ntg52hE,121
aiohttp/.hash/_helpers.pyx.hash,sha256=5JQ6BlMBE4HnRaCGdkK9_wpL3ZSWpU1gyLYva0Wwx2c,121
aiohttp/.hash/_http_parser.pyx.hash,sha256=yOaN1DvAXVE9aza6tMfm1eXhM8vwi8-4nVi0JA9YyXk,125
aiohttp/.hash/_http_writer.pyx.hash,sha256=FcO55KvyCdZtJWSJO8EDy9zac5UpTdVS7Rb2MUVK_Cg,125
aiohttp/.hash/_websocket.pyx.hash,sha256=M97f-Yti-4vnE4GNTD1s_DzKs-fG_ww3jle6EUvixnE,123
aiohttp/.hash/frozenlist.pyi.hash,sha256=8pvDf3sm8KliTEOQESLQw1c-z2_Gtq0MucWoF3BKIWQ,123
aiohttp/.hash/hdrs.py.hash,sha256=HIFr8dmUhg4XvuL31_KhQqbwjjDVWe3L4tmXtLiLiXk,116
aiohttp/.hash/signals.pyi.hash,sha256=kutOtueKKfYBxDcvGchwFYjaBktzozP19ldFV5uYx10,120
aiohttp/__init__.py,sha256=Eq4dXyV5iy5R94eim9JN1lZeH6uTrSwQfKtUg9EiZ5g,6940
aiohttp/__pycache__/__init__.cpython-38.pyc,,
aiohttp/__pycache__/abc.cpython-38.pyc,,
aiohttp/__pycache__/base_protocol.cpython-38.pyc,,
aiohttp/__pycache__/client.cpython-38.pyc,,
aiohttp/__pycache__/client_exceptions.cpython-38.pyc,,
aiohttp/__pycache__/client_proto.cpython-38.pyc,,
aiohttp/__pycache__/client_reqrep.cpython-38.pyc,,
aiohttp/__pycache__/client_ws.cpython-38.pyc,,
aiohttp/__pycache__/connector.cpython-38.pyc,,
aiohttp/__pycache__/cookiejar.cpython-38.pyc,,
aiohttp/__pycache__/formdata.cpython-38.pyc,,
aiohttp/__pycache__/frozenlist.cpython-38.pyc,,
aiohttp/__pycache__/hdrs.cpython-38.pyc,,
aiohttp/__pycache__/helpers.cpython-38.pyc,,
aiohttp/__pycache__/http.cpython-38.pyc,,
aiohttp/__pycache__/http_exceptions.cpython-38.pyc,,
aiohttp/__pycache__/http_parser.cpython-38.pyc,,
aiohttp/__pycache__/http_websocket.cpython-38.pyc,,
aiohttp/__pycache__/http_writer.cpython-38.pyc,,
aiohttp/__pycache__/locks.cpython-38.pyc,,
aiohttp/__pycache__/log.cpython-38.pyc,,
aiohttp/__pycache__/multipart.cpython-38.pyc,,
aiohttp/__pycache__/payload.cpython-38.pyc,,
aiohttp/__pycache__/payload_streamer.cpython-38.pyc,,
aiohttp/__pycache__/pytest_plugin.cpython-38.pyc,,
aiohttp/__pycache__/resolver.cpython-38.pyc,,
aiohttp/__pycache__/signals.cpython-38.pyc,,
aiohttp/__pycache__/streams.cpython-38.pyc,,
aiohttp/__pycache__/tcp_helpers.cpython-38.pyc,,
aiohttp/__pycache__/test_utils.cpython-38.pyc,,
aiohttp/__pycache__/tracing.cpython-38.pyc,,
aiohttp/__pycache__/typedefs.cpython-38.pyc,,
aiohttp/__pycache__/web.cpython-38.pyc,,
aiohttp/__pycache__/web_app.cpython-38.pyc,,
aiohttp/__pycache__/web_exceptions.cpython-38.pyc,,
aiohttp/__pycache__/web_fileresponse.cpython-38.pyc,,
aiohttp/__pycache__/web_log.cpython-38.pyc,,
aiohttp/__pycache__/web_middlewares.cpython-38.pyc,,
aiohttp/__pycache__/web_protocol.cpython-38.pyc,,
aiohttp/__pycache__/web_request.cpython-38.pyc,,
aiohttp/__pycache__/web_response.cpython-38.pyc,,
aiohttp/__pycache__/web_routedef.cpython-38.pyc,,
aiohttp/__pycache__/web_runner.cpython-38.pyc,,
aiohttp/__pycache__/web_server.cpython-38.pyc,,
aiohttp/__pycache__/web_urldispatcher.cpython-38.pyc,,
aiohttp/__pycache__/web_ws.cpython-38.pyc,,
aiohttp/__pycache__/worker.cpython-38.pyc,,
aiohttp/_cparser.pxd,sha256=tgw30SL6kQSczzGMlMhx2Cuhf_O8P8ZPimVCb85xILc,3959
aiohttp/_find_header.c,sha256=s8Urnxv8CDd2NuKCEzCsLWy4NbVFXfLMNlg-s2bCg3A,187570
aiohttp/_find_header.h,sha256=5oOgQ85nF6V7rpU8NhyE5vyGkTo1Cgf1GIYrtxSTzQI,170
aiohttp/_find_header.pxd,sha256=0GfwFCPN2zxEKTO1_MA5sYq2UfzsG8kcV3aTqvwlz3g,68
aiohttp/_frozenlist.c,sha256=4m7L0I0wWumfGoXIMaYYeKxf9zG3ssoIxB-meEQDgh4,294193
aiohttp/_frozenlist.cpython-38-x86_64-linux-gnu.so,sha256=StY8YfqC4r7-GAYfmE42n8TIB37bRO1CGYqBmRlv9_U,499488
aiohttp/_frozenlist.pyx,sha256=BD8LcERExsWdo4qzuuQ84f-L_pHVzkUQO0lEAOe3Fog,2605
aiohttp/_headers.pxi,sha256=n701k28dVPjwRnx5j6LpJhLTfj7dqu2vJt7f0O60Oyg,2007
aiohttp/_helpers.c,sha256=meXX95gKMrawWPUl-q3Sdyf4VxSdsH-8lbCON6-ATOo,211989
aiohttp/_helpers.cpython-38-x86_64-linux-gnu.so,sha256=Wx3OxSJ_OZwQg7bzAsmlb-d48U0pVA3qvEJWrpcjXAE,366376
aiohttp/_helpers.pyi,sha256=ZoKiJSS51PxELhI2cmIr5737YjjZcJt7FbIRO3ym1Ss,202
aiohttp/_helpers.pyx,sha256=XeLbNft5X_4ifi8QB8i6TyrRuayijMSO3IDHeSA89uM,1049
aiohttp/_http_parser.c,sha256=O51TiHCn0eXUeiBWCyl7E7y-JjZLgeLRj10D18HudSU,1011524
aiohttp/_http_parser.cpython-38-x86_64-linux-gnu.so,sha256=rUHaduTj24YA4-xsF891ki_lcX2_vrRYKIuxD4wFz_Y,2991944
aiohttp/_http_parser.pyx,sha256=8GiPsugeqSvwoXgiJg2VkaMJeRAdoSpLhzET_EWftfo,29022
aiohttp/_http_writer.c,sha256=QxJ09pt3guD8aVsQ7LaAxX4vxBUhJ7RhxeVMVWu8BUk,213020
aiohttp/_http_writer.cpython-38-x86_64-linux-gnu.so,sha256=l6GWtDAH1YAAGldp5OEu8ue_chGxwwTUORauUQRTO3Q,320160
aiohttp/_http_writer.pyx,sha256=Tnt_e6pcZZVOhaW3yNt3hqDsNJgIGwqUIPeSqAMIYoE,4200
aiohttp/_websocket.c,sha256=F5V1i__yewPzFcgYKmcTWk_CjptCZUYlhQesX14u4ec,137427
aiohttp/_websocket.cpython-38-x86_64-linux-gnu.so,sha256=rEfY7yjfrF49yLfByiccoMx2ellzngkR-J-GrN6ziak,121616
aiohttp/_websocket.pyx,sha256=1XuOSNDCbyDrzF5uMA2isqausSs8l2jWTLDlNDLM9Io,1561
aiohttp/abc.py,sha256=tbhrXunYB8-Jmq3-e6zbYtXaCR7Vfb8eRo4Ifk-juLQ,5247
aiohttp/base_protocol.py,sha256=eNgmzKP-Lbh5vxSmShDBKTJ0JSAVpcrAZa-EKqmCTKA,2701
aiohttp/client.py,sha256=9firS0XBuNEGshPE81CsmLxnkfkZoJsRUV6amoGZ1FA,43916
aiohttp/client_exceptions.py,sha256=fW2rrDEcWitwpXhQIFtViuC2JEHDx1oIXXQsj6YGd5I,8529
aiohttp/client_proto.py,sha256=Iek_ZuTr_2xFoKt30zveOBh1xYt6iXE7XZVwUPiCXTs,8163
aiohttp/client_reqrep.py,sha256=okBWp3TC_leAiD0-kEtS8H0v8fZPTSVzyDXDwusSZrs,36439
aiohttp/client_ws.py,sha256=sxkvG5Vw37Mr6V_8w9WZ0ulo_jKL_tRtSK1l9bRIPlY,10287
aiohttp/connector.py,sha256=9A8wGKGoOXZCzRUBnw2dwT457aWXAxFSn4fPaEK5Lh8,42968
aiohttp/cookiejar.py,sha256=SbX_n44bl69PrGIPOmj2imHwynzBlUbxrZUe16T3K-4,12163
aiohttp/formdata.py,sha256=UJ4DgqX4Jk-LZpnKOeOCUewL5264eO4DyHPKOk5vgos,6080
aiohttp/frozenlist.py,sha256=nFqoDVmyxfStqiY_FxcrME8GpvhRDXf3mh-BGCVxhnQ,1718
aiohttp/frozenlist.pyi,sha256=bRNKoI2j1roPdtgfx_nseDanvBqZsZUNHDqmXtfjlRo,1434
aiohttp/hdrs.py,sha256=WsjDJYADYEyJk7-oNXNhA2M3MwtyLkhJAklyzLtclfU,3446
aiohttp/helpers.py,sha256=iAQNQGGoqN8ovgdMfHC2rggYSbOaSTToiUJqg1LJrzw,22918
aiohttp/http.py,sha256=CHdBKhli7yITl_VfpBDdjgF6nT_cCWPRXov8UzBeo2k,1824
aiohttp/http_exceptions.py,sha256=eACQt7azwNbUi8aqXB5J2tIcc_CB4_4y4mLM9SZd4tM,2586
aiohttp/http_parser.py,sha256=wNwFkglxrBFRUHWN4AUbbUuFckMgwy5k_cX6zR4CEiE,30781
aiohttp/http_websocket.py,sha256=k_mvpvQUsliv7F7ZlXmz01hzBnoysSHAr4KyZDC-O78,25098
aiohttp/http_writer.py,sha256=ofDAEH8IJry013XsbrrfNiV82Fr7Gs3d7syduMx1vYU,5341
aiohttp/locks.py,sha256=j5VO5HkQY_N5DRJAezRJXavE9y2N9Y9Sq3oWu8ftAOA,1220
aiohttp/log.py,sha256=BbNKx9e3VMIm0xYjZI0IcBBoS7wjdeIeSaiJE7-qK2g,325
aiohttp/multipart.py,sha256=ZrChyWL811TpsxcL0rcmx3VIJjzj-cINkrjgk9GhBt4,32251
aiohttp/payload.py,sha256=jvvuncmzh4RuHUR05srhzSMXCUCxclUPgFnEDm1vl40,13333
aiohttp/payload_streamer.py,sha256=qW8jvfRJYYnpRro74vQbrTXFd_5JZsHyVGi4-bulOwo,2102
aiohttp/py.typed,sha256=sow9soTwP9T_gEAQSVh7Gb8855h04Nwmhs2We-JRgZM,7
aiohttp/pytest_plugin.py,sha256=0z5FACR9mUEZp72jakz_jfDuy-dsmv2HISIY0EB01K4,11009
aiohttp/resolver.py,sha256=VmUmtY_mjuRQCy4OrByS74bgooPzUeHrO_pEUPaMXc4,4608
aiohttp/signals.py,sha256=YSWNpNheFirmccC7vWMr8J1TDWBN_P0m3Ch_FiZ3HVA,852
aiohttp/signals.pyi,sha256=SLTfUPdx1-g4VSTqCnBXyhSCl0-KQ-Z0mCsEsIvBfV4,319
aiohttp/streams.py,sha256=zmCpGESe27u2b-JmyOem_FThgOn9Iq_TpwIHJMjJfmY,20530
aiohttp/tcp_helpers.py,sha256=l3XD9wWiuMawXCMdqiNSRHIz0iVtMKi7lwqXnHvyK3k,962
aiohttp/test_utils.py,sha256=NG7YcgAE_E7LOlcaNQ8JhgOadhg5bg174-tukUQLDMA,20253
aiohttp/tracing.py,sha256=-G2cfF6LNFqY8nCbnHJ8NkLdnJV1WSjRtKOnJ1gz_lw,14363
aiohttp/typedefs.py,sha256=PUsJ7Y-f8bRqyDOdqd681VvaNi_LETRJ5L7rCPfPRN4,1374
aiohttp/web.py,sha256=WNOEIih5I3g_0BSIJkrKvWuTQ8qZVKoGkjg-v6wcSms,17881
aiohttp/web_app.py,sha256=lDfoKwy1y8_pnMkrqcfHiMnhWwH_4FCkCuSMLT4huA0,17053
aiohttp/web_exceptions.py,sha256=-ZqN_zv7EiaLDS0Na5IpgXmiiNv9QZm8sebYoW3zeYc,10106
aiohttp/web_fileresponse.py,sha256=hpzBp-L-VuVrlsSjoTvGRWpgWZrLODkaoQlGCNQrpag,9025
aiohttp/web_log.py,sha256=hDwnH_USBiNqC1-XggEorcuVQUuKhEezCfjPY1wkac4,7498
aiohttp/web_middlewares.py,sha256=QYD2PiB_AMkIQWpBEiQRP0UM_vBmZ7sAM9Qes3SoXH0,4193
aiohttp/web_protocol.py,sha256=2nHNxxg7Mf8ZP88SFPxnBNGL8zmPhQpjtZ68VT0PeIo,23251
aiohttp/web_request.py,sha256=fY-GmGuV3oayr5r0Szd1VsHraN8T-uW2wCij6iFfZOg,26454
aiohttp/web_response.py,sha256=Xb9PfJhFHzu9Od4qHRmN9O6z5ojBRuL0ETqmR6S_8Ek,26202
aiohttp/web_routedef.py,sha256=PIHf5KvaOnG30pg1J8IhZewoHLOEMd5emWBZBBWS9yE,6109
aiohttp/web_runner.py,sha256=4AM4y6lgmCxBU1AHt1Sdd7IpB4pm9dWqSdapNfgzqG8,11194
aiohttp/web_server.py,sha256=Zp-StXkTSDZ8Lyg2joDdRD05QRu9oh8LET3AKfx9D2I,2058
aiohttp/web_urldispatcher.py,sha256=M930z-C2umyGyU4KmGVsabJNL5ZpT6Aj5tpSf6mSSPc,39532
aiohttp/web_ws.py,sha256=f912oImpu973icUK0QUjeXIxa57R837gdkUUn1ZnSpQ,16783
aiohttp/worker.py,sha256=T1CvPYNP4rqsdpyz3dNRuqNF5bzrH3WaEdDMLDsfLOc,8022

View File

@ -1,5 +0,0 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.36.2)
Root-Is-Purelib: false
Tag: cp38-cp38-manylinux2014_x86_64

View File

@ -1 +0,0 @@
b60c37d122fa91049ccf318c94c871d82ba17ff3bc3fc64f8a65426fce7120b7 /home/runner/work/aiohttp/aiohttp/aiohttp/_cparser.pxd

View File

@ -1 +0,0 @@
d067f01423cddb3c442933b5fcc039b18ab651fcec1bc91c577693aafc25cf78 /home/runner/work/aiohttp/aiohttp/aiohttp/_find_header.pxd

View File

@ -1 +0,0 @@
043f0b704444c6c59da38ab3bae43ce1ff8bfe91d5ce45103b494400e7b71688 /home/runner/work/aiohttp/aiohttp/aiohttp/_frozenlist.pyx

View File

@ -1 +0,0 @@
6682a22524b9d4fc442e123672622be7bdfb6238d9709b7b15b2113b7ca6d52b /home/runner/work/aiohttp/aiohttp/aiohttp/_helpers.pyi

View File

@ -1 +0,0 @@
5de2db35fb795ffe227e2f1007c8ba4f2ad1b9aca28cc48edc80c779203cf6e3 /home/runner/work/aiohttp/aiohttp/aiohttp/_helpers.pyx

View File

@ -1 +0,0 @@
f0688fb2e81ea92bf0a17822260d9591a30979101da12a4b873113fc459fb5fa /home/runner/work/aiohttp/aiohttp/aiohttp/_http_parser.pyx

View File

@ -1 +0,0 @@
4e7b7f7baa5c65954e85a5b7c8db7786a0ec3498081b0a9420f792a803086281 /home/runner/work/aiohttp/aiohttp/aiohttp/_http_writer.pyx

View File

@ -1 +0,0 @@
d57b8e48d0c26f20ebcc5e6e300da2b2a6aeb12b3c9768d64cb0e53432ccf48a /home/runner/work/aiohttp/aiohttp/aiohttp/_websocket.pyx

View File

@ -1 +0,0 @@
6d134aa08da3d6ba0f76d81fc7f9ec7836a7bc1a99b1950d1c3aa65ed7e3951a /home/runner/work/aiohttp/aiohttp/aiohttp/frozenlist.pyi

View File

@ -1 +0,0 @@
5ac8c3258003604c8993bfa8357361036337330b722e4849024972ccbb5c95f5 /home/runner/work/aiohttp/aiohttp/aiohttp/hdrs.py

View File

@ -1 +0,0 @@
48b4df50f771d7e8385524ea0a7057ca1482974f8a43e674982b04b08bc17d5e /home/runner/work/aiohttp/aiohttp/aiohttp/signals.pyi

View File

@ -1,217 +0,0 @@
__version__ = "3.7.4.post0"
from typing import Tuple
from . import hdrs as hdrs
from .client import (
BaseConnector as BaseConnector,
ClientConnectionError as ClientConnectionError,
ClientConnectorCertificateError as ClientConnectorCertificateError,
ClientConnectorError as ClientConnectorError,
ClientConnectorSSLError as ClientConnectorSSLError,
ClientError as ClientError,
ClientHttpProxyError as ClientHttpProxyError,
ClientOSError as ClientOSError,
ClientPayloadError as ClientPayloadError,
ClientProxyConnectionError as ClientProxyConnectionError,
ClientRequest as ClientRequest,
ClientResponse as ClientResponse,
ClientResponseError as ClientResponseError,
ClientSession as ClientSession,
ClientSSLError as ClientSSLError,
ClientTimeout as ClientTimeout,
ClientWebSocketResponse as ClientWebSocketResponse,
ContentTypeError as ContentTypeError,
Fingerprint as Fingerprint,
InvalidURL as InvalidURL,
NamedPipeConnector as NamedPipeConnector,
RequestInfo as RequestInfo,
ServerConnectionError as ServerConnectionError,
ServerDisconnectedError as ServerDisconnectedError,
ServerFingerprintMismatch as ServerFingerprintMismatch,
ServerTimeoutError as ServerTimeoutError,
TCPConnector as TCPConnector,
TooManyRedirects as TooManyRedirects,
UnixConnector as UnixConnector,
WSServerHandshakeError as WSServerHandshakeError,
request as request,
)
from .cookiejar import CookieJar as CookieJar, DummyCookieJar as DummyCookieJar
from .formdata import FormData as FormData
from .helpers import BasicAuth as BasicAuth, ChainMapProxy as ChainMapProxy
from .http import (
HttpVersion as HttpVersion,
HttpVersion10 as HttpVersion10,
HttpVersion11 as HttpVersion11,
WebSocketError as WebSocketError,
WSCloseCode as WSCloseCode,
WSMessage as WSMessage,
WSMsgType as WSMsgType,
)
from .multipart import (
BadContentDispositionHeader as BadContentDispositionHeader,
BadContentDispositionParam as BadContentDispositionParam,
BodyPartReader as BodyPartReader,
MultipartReader as MultipartReader,
MultipartWriter as MultipartWriter,
content_disposition_filename as content_disposition_filename,
parse_content_disposition as parse_content_disposition,
)
from .payload import (
PAYLOAD_REGISTRY as PAYLOAD_REGISTRY,
AsyncIterablePayload as AsyncIterablePayload,
BufferedReaderPayload as BufferedReaderPayload,
BytesIOPayload as BytesIOPayload,
BytesPayload as BytesPayload,
IOBasePayload as IOBasePayload,
JsonPayload as JsonPayload,
Payload as Payload,
StringIOPayload as StringIOPayload,
StringPayload as StringPayload,
TextIOPayload as TextIOPayload,
get_payload as get_payload,
payload_type as payload_type,
)
from .payload_streamer import streamer as streamer
from .resolver import (
AsyncResolver as AsyncResolver,
DefaultResolver as DefaultResolver,
ThreadedResolver as ThreadedResolver,
)
from .signals import Signal as Signal
from .streams import (
EMPTY_PAYLOAD as EMPTY_PAYLOAD,
DataQueue as DataQueue,
EofStream as EofStream,
FlowControlDataQueue as FlowControlDataQueue,
StreamReader as StreamReader,
)
from .tracing import (
TraceConfig as TraceConfig,
TraceConnectionCreateEndParams as TraceConnectionCreateEndParams,
TraceConnectionCreateStartParams as TraceConnectionCreateStartParams,
TraceConnectionQueuedEndParams as TraceConnectionQueuedEndParams,
TraceConnectionQueuedStartParams as TraceConnectionQueuedStartParams,
TraceConnectionReuseconnParams as TraceConnectionReuseconnParams,
TraceDnsCacheHitParams as TraceDnsCacheHitParams,
TraceDnsCacheMissParams as TraceDnsCacheMissParams,
TraceDnsResolveHostEndParams as TraceDnsResolveHostEndParams,
TraceDnsResolveHostStartParams as TraceDnsResolveHostStartParams,
TraceRequestChunkSentParams as TraceRequestChunkSentParams,
TraceRequestEndParams as TraceRequestEndParams,
TraceRequestExceptionParams as TraceRequestExceptionParams,
TraceRequestRedirectParams as TraceRequestRedirectParams,
TraceRequestStartParams as TraceRequestStartParams,
TraceResponseChunkReceivedParams as TraceResponseChunkReceivedParams,
)
__all__: Tuple[str, ...] = (
"hdrs",
# client
"BaseConnector",
"ClientConnectionError",
"ClientConnectorCertificateError",
"ClientConnectorError",
"ClientConnectorSSLError",
"ClientError",
"ClientHttpProxyError",
"ClientOSError",
"ClientPayloadError",
"ClientProxyConnectionError",
"ClientResponse",
"ClientRequest",
"ClientResponseError",
"ClientSSLError",
"ClientSession",
"ClientTimeout",
"ClientWebSocketResponse",
"ContentTypeError",
"Fingerprint",
"InvalidURL",
"RequestInfo",
"ServerConnectionError",
"ServerDisconnectedError",
"ServerFingerprintMismatch",
"ServerTimeoutError",
"TCPConnector",
"TooManyRedirects",
"UnixConnector",
"NamedPipeConnector",
"WSServerHandshakeError",
"request",
# cookiejar
"CookieJar",
"DummyCookieJar",
# formdata
"FormData",
# helpers
"BasicAuth",
"ChainMapProxy",
# http
"HttpVersion",
"HttpVersion10",
"HttpVersion11",
"WSMsgType",
"WSCloseCode",
"WSMessage",
"WebSocketError",
# multipart
"BadContentDispositionHeader",
"BadContentDispositionParam",
"BodyPartReader",
"MultipartReader",
"MultipartWriter",
"content_disposition_filename",
"parse_content_disposition",
# payload
"AsyncIterablePayload",
"BufferedReaderPayload",
"BytesIOPayload",
"BytesPayload",
"IOBasePayload",
"JsonPayload",
"PAYLOAD_REGISTRY",
"Payload",
"StringIOPayload",
"StringPayload",
"TextIOPayload",
"get_payload",
"payload_type",
# payload_streamer
"streamer",
# resolver
"AsyncResolver",
"DefaultResolver",
"ThreadedResolver",
# signals
"Signal",
"DataQueue",
"EMPTY_PAYLOAD",
"EofStream",
"FlowControlDataQueue",
"StreamReader",
# tracing
"TraceConfig",
"TraceConnectionCreateEndParams",
"TraceConnectionCreateStartParams",
"TraceConnectionQueuedEndParams",
"TraceConnectionQueuedStartParams",
"TraceConnectionReuseconnParams",
"TraceDnsCacheHitParams",
"TraceDnsCacheMissParams",
"TraceDnsResolveHostEndParams",
"TraceDnsResolveHostStartParams",
"TraceRequestChunkSentParams",
"TraceRequestEndParams",
"TraceRequestExceptionParams",
"TraceRequestRedirectParams",
"TraceRequestStartParams",
"TraceResponseChunkReceivedParams",
)
try:
from .worker import GunicornUVLoopWebWorker, GunicornWebWorker
__all__ += ("GunicornWebWorker", "GunicornUVLoopWebWorker")
except ImportError: # pragma: no cover
pass

Some files were not shown because too many files have changed in this diff Show More