@@ -0,0 +1,8 @@ | |||
# Default ignored files | |||
/shelf/ | |||
/workspace.xml | |||
# Datasource local storage ignored files | |||
/dataSources/ | |||
/dataSources.local.xml | |||
# Editor-based HTTP Client requests | |||
/httpRequests/ |
@@ -0,0 +1,10 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<module type="PYTHON_MODULE" version="4"> | |||
<component name="NewModuleRootManager"> | |||
<content url="file://$MODULE_DIR$"> | |||
<excludeFolder url="file://$MODULE_DIR$/venv" /> | |||
</content> | |||
<orderEntry type="inheritedJdk" /> | |||
<orderEntry type="sourceFolder" forTests="false" /> | |||
</component> | |||
</module> |
@@ -0,0 +1,6 @@ | |||
<component name="InspectionProjectProfileManager"> | |||
<settings> | |||
<option name="USE_PROJECT_PROFILE" value="false" /> | |||
<version value="1.0" /> | |||
</settings> | |||
</component> |
@@ -0,0 +1,4 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<project version="4"> | |||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (OpenHome)" project-jdk-type="Python SDK" /> | |||
</project> |
@@ -0,0 +1,8 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<project version="4"> | |||
<component name="ProjectModuleManager"> | |||
<modules> | |||
<module fileurl="file://$PROJECT_DIR$/.idea/OpenHome.iml" filepath="$PROJECT_DIR$/.idea/OpenHome.iml" /> | |||
</modules> | |||
</component> | |||
</project> |
@@ -0,0 +1,225 @@ | |||
from telnetlib import Telnet | |||
import serial | |||
DEBUG = True | |||
class MAXPacketFactory: | |||
def create_packet(rec: str): | |||
pkt_type = int(rec[7:9], 16) | |||
if pkt_type == 0: | |||
return MAXPairPingPacket.from_received(rec) | |||
elif pkt_type == 1: | |||
return MAXPairPongPacket.from_received(rec) | |||
elif pkt_type == 2: | |||
return MAXAckPacket.from_received(rec) | |||
elif pkt_type == 0xF1: | |||
return MAXWakeUpPacket.from_received(rec) | |||
elif pkt_type == 0xF0: | |||
return MAXResetPacket.from_received(rec) | |||
else: | |||
print("Unknown message type: {}".format(pkt_type)) | |||
return MAXPacket.from_received(rec) | |||
class MAXPacket: | |||
def __init__(self, length, message_counter: str, message_type: str, message_flag: str, sender_address: str, dest_address: str, | |||
group_id:str): | |||
self.length = length | |||
self.counter = message_counter | |||
self.type = message_type | |||
self.flag = message_flag | |||
self.sender_address = sender_address | |||
self.dest_address = dest_address | |||
self.group_id = group_id | |||
def from_received(rec: str): | |||
return MAXPacket(rec[1:3], rec[3:5], rec[5:7], rec[7:9], rec[9:15], rec[15:21], rec[21:23]) | |||
def gen_header(self): | |||
header_str = "{}{}{}{}{}{}".format(self.counter, self.flag, self.type, self.sender_address, | |||
self.dest_address, self.group_id) | |||
return header_str | |||
def to_string(self): | |||
return "MAXPacket: len={}, counter={}, flag={}, type={}, sender_addr={}, dest_addr={}, group_id={}".format( | |||
self.length, self.counter, self.flag, self.type, self.sender_address, self.dest_address, self.group_id | |||
) | |||
class MAXPairPingPacket(MAXPacket): | |||
def from_received(rec: str): | |||
result = MAXPacket.from_received(rec) | |||
firmware_val = int(rec[23:25], 16) | |||
result.firmware_major = firmware_val // 16 | |||
result.firmware_minor = firmware_val % 16 | |||
result.device_type = rec[25:27] | |||
result.test_result = rec[27:29] | |||
result.serial = rec[29:-2] | |||
return result | |||
def __init__(self, length, message_counter: str, message_type: str, message_flag: str, sender_address: str, dest_address: str, | |||
group_id:str, firmware_major, firmware_minor, device_type, test_result, serial): | |||
MAXPacket.__init__(length, message_counter, message_type, message_flag, sender_address, dest_address, group_id) | |||
self.firmware_major = firmware_major | |||
self.firmware_minor = firmware_minor | |||
self.device_type = device_type | |||
self.test_result = test_result | |||
self.serial = serial | |||
def to_string(self): | |||
result = "{}\nMAXPairPingPacket: firmware_major={} firmware_minor={} device_type={} " \ | |||
"test_result={} serial={}".format(super().to_string(), self.firmware_major, self.firmware_minor, | |||
self.device_type, self.test_result, self.serial) | |||
return result | |||
class MAXPairPongPacket(MAXPacket): | |||
# def __init__(self, rec): | |||
# super().__init__(rec) | |||
def __init__(self, message_counter: str, message_flag: str, sender_address: str, dest_address: str, | |||
group_id:str): | |||
MAXPacket.__init__(message_counter, "01", message_flag, sender_address, dest_address, group_id) | |||
self.payload = "00" | |||
def serialize(self): | |||
header = self.gen_header() | |||
length = (len(header) + len(self.payload))/2 | |||
return "Zs{}{}{}".format(length, header, self.payload) | |||
class MAXAckPacket(MAXPacket): | |||
def __init__(self, rec): | |||
super().__init__(rec) | |||
class MAXWakeUpPacket(MAXPacket): | |||
def __init__(self, rec): | |||
super().__init__(rec) | |||
class MAXResetPacket(MAXPacket): | |||
def __init__(self, rec): | |||
super().__init__(rec) | |||
class CUL: | |||
def __init__(self): | |||
self.client: serial.Serial = None | |||
def connect(self, port): | |||
if self.client is None: | |||
self.client = serial.Serial(port, 38400, timeout=1) | |||
def disconnect(self): | |||
if self.client is not None: | |||
self.client.close() | |||
self.client = None | |||
def request(self, req): | |||
if self.client is not None: | |||
self.client.write(req.encode()) | |||
self.client.write(b"\n") | |||
if DEBUG: | |||
print(">>> {}".format(req)) | |||
else: | |||
print("Request while not connected!") | |||
def response(self): | |||
if self.client is not None: | |||
response = self.client.read(100).decode() | |||
if DEBUG: | |||
print("<<< {}".format(response)) | |||
return response | |||
else: | |||
print("Waiting for response while not connected!") | |||
return None | |||
def version_string(self): | |||
self.request("V") | |||
return self.response() | |||
def is_connected(self): | |||
return self.client is not None | |||
def set_moritz_mode(self, moritz_mode_enable): | |||
if moritz_mode_enable: | |||
self.request("Zr") | |||
#return self.response() | |||
else: | |||
self.request("Zx") | |||
class CUN: | |||
def __init__(self): | |||
self.client: Telnet = None | |||
def connect(self, host, ip): | |||
if self.client is None: | |||
self.client = Telnet(host, ip) | |||
def disconnect(self): | |||
if self.client is not None: | |||
self.client.close() | |||
self.client = None | |||
def version_string(self): | |||
self.request("V") | |||
return self.response() | |||
def request(self, req): | |||
if self.client is not None: | |||
self.client.write(req.encode()) | |||
self.client.write(b"\n") | |||
if DEBUG: | |||
print(">>> {}".format(req)) | |||
else: | |||
print("Request while not connected!") | |||
def response(self): | |||
if self.client is not None: | |||
response = self.client.read_some().decode() | |||
if DEBUG: | |||
print("<<< {}".format(response)) | |||
return response | |||
else: | |||
print("Waiting for response while not connected!") | |||
return None | |||
def set_moritz_mode(self, moritz_mode_enable): | |||
if moritz_mode_enable: | |||
self.request("Zr") | |||
#return self.response() | |||
else: | |||
self.request("Zx") | |||
def configure(self, ip, netmask, gateway, ): | |||
# ToDo: NYI | |||
pass | |||
def h_request(self): | |||
self.request("H?") | |||
return self.response() | |||
def send_moritz(self, packet: MAXPacket): | |||
# llnnccttssssssddddddpp... | |||
# ll - length | |||
# nn - msg counter | |||
# cc - control byte | |||
# tt - msg type | |||
# ss - sender address(3 byte) | |||
# dd - destination address(3 byte - 000000 for broadcast) | |||
# pp - payload... | |||
len_str = packet.length | |||
msg_counter_str = packet.ms | |||
control_byte_str = "00" | |||
message_type_str = "02" | |||
sender_addr_str = "000000" | |||
dest_addr_str = "000000" | |||
payload = "l:" | |||
self.request("Zs{}{}{}{}{}{}{}".format(packet.length, packet.message_counter, control_byte_str, | |||
message_type_str, sender_addr_str, | |||
dest_addr_str, payload)) | |||
#self.request("l:") | |||
return self.response() |
@@ -0,0 +1,35 @@ | |||
from cun import CUL, MAXPacketFactory, MAXPacket, MAXPairPingPacket, MAXPairPongPacket | |||
import time | |||
if __name__ == '__main__': | |||
#cun = CUN() | |||
#cun.connect("192.168.0.244", 2323) | |||
#cun.request(b"V\n") | |||
#print(cun.response()) | |||
#version = cun.version_string() | |||
#print(version) | |||
#cun.set_moritz_mode(True) | |||
#print(cun.send_moritz()) | |||
#cun.request("Zsl:") | |||
#print(cun.response()) | |||
#cun.disconnect() | |||
cul = CUL() | |||
cul.connect("COM8") | |||
print(cul.version_string()) | |||
cul.set_moritz_mode(True) | |||
while cul.is_connected(): | |||
resp = cul.response() | |||
if resp is not None and resp[0:1] == "Z": | |||
pkt = MAXPacketFactory.create_packet(resp) | |||
print(pkt.to_string()) | |||
if isinstance(pkt, MAXPairPingPacket): | |||
print("Sending Pong!") | |||
pong = MAXPairPongPacket(message_counter="00", message_flag="00", sender_address="FDF7CA", | |||
dest_address=pkt.sender_address, group_id="00") | |||
pong_str = pong.serialize() | |||
cul.request(pong_str) | |||
time.sleep(1) | |||
cul.disconnect() | |||
@@ -0,0 +1,146 @@ | |||
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */ | |||
/* Greenlet object interface */ | |||
#ifndef Py_GREENLETOBJECT_H | |||
#define Py_GREENLETOBJECT_H | |||
#include <Python.h> | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* This is deprecated and undocumented. It does not change. */ | |||
#define GREENLET_VERSION "1.0.0" | |||
typedef struct _greenlet { | |||
PyObject_HEAD | |||
char* stack_start; | |||
char* stack_stop; | |||
char* stack_copy; | |||
intptr_t stack_saved; | |||
struct _greenlet* stack_prev; | |||
struct _greenlet* parent; | |||
PyObject* run_info; | |||
struct _frame* top_frame; | |||
int recursion_depth; | |||
PyObject* weakreflist; | |||
#if PY_VERSION_HEX >= 0x030700A3 | |||
_PyErr_StackItem* exc_info; | |||
_PyErr_StackItem exc_state; | |||
#else | |||
PyObject* exc_type; | |||
PyObject* exc_value; | |||
PyObject* exc_traceback; | |||
#endif | |||
PyObject* dict; | |||
#if PY_VERSION_HEX >= 0x030700A3 | |||
PyObject* context; | |||
#endif | |||
#if PY_VERSION_HEX >= 0x30A00B1 | |||
CFrame* cframe; | |||
#endif | |||
} PyGreenlet; | |||
#define PyGreenlet_Check(op) PyObject_TypeCheck(op, &PyGreenlet_Type) | |||
#define PyGreenlet_MAIN(op) (((PyGreenlet*)(op))->stack_stop == (char*)-1) | |||
#define PyGreenlet_STARTED(op) (((PyGreenlet*)(op))->stack_stop != NULL) | |||
#define PyGreenlet_ACTIVE(op) (((PyGreenlet*)(op))->stack_start != NULL) | |||
#define PyGreenlet_GET_PARENT(op) (((PyGreenlet*)(op))->parent) | |||
/* C API functions */ | |||
/* Total number of symbols that are exported */ | |||
#define PyGreenlet_API_pointers 8 | |||
#define PyGreenlet_Type_NUM 0 | |||
#define PyExc_GreenletError_NUM 1 | |||
#define PyExc_GreenletExit_NUM 2 | |||
#define PyGreenlet_New_NUM 3 | |||
#define PyGreenlet_GetCurrent_NUM 4 | |||
#define PyGreenlet_Throw_NUM 5 | |||
#define PyGreenlet_Switch_NUM 6 | |||
#define PyGreenlet_SetParent_NUM 7 | |||
#ifndef GREENLET_MODULE | |||
/* This section is used by modules that uses the greenlet C API */ | |||
static void** _PyGreenlet_API = NULL; | |||
# define PyGreenlet_Type \ | |||
(*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM]) | |||
# define PyExc_GreenletError \ | |||
((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM]) | |||
# define PyExc_GreenletExit \ | |||
((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM]) | |||
/* | |||
* PyGreenlet_New(PyObject *args) | |||
* | |||
* greenlet.greenlet(run, parent=None) | |||
*/ | |||
# define PyGreenlet_New \ | |||
(*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \ | |||
_PyGreenlet_API[PyGreenlet_New_NUM]) | |||
/* | |||
* PyGreenlet_GetCurrent(void) | |||
* | |||
* greenlet.getcurrent() | |||
*/ | |||
# define PyGreenlet_GetCurrent \ | |||
(*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM]) | |||
/* | |||
* PyGreenlet_Throw( | |||
* PyGreenlet *greenlet, | |||
* PyObject *typ, | |||
* PyObject *val, | |||
* PyObject *tb) | |||
* | |||
* g.throw(...) | |||
*/ | |||
# define PyGreenlet_Throw \ | |||
(*(PyObject * (*)(PyGreenlet * self, \ | |||
PyObject * typ, \ | |||
PyObject * val, \ | |||
PyObject * tb)) \ | |||
_PyGreenlet_API[PyGreenlet_Throw_NUM]) | |||
/* | |||
* PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args) | |||
* | |||
* g.switch(*args, **kwargs) | |||
*/ | |||
# define PyGreenlet_Switch \ | |||
(*(PyObject * \ | |||
(*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \ | |||
_PyGreenlet_API[PyGreenlet_Switch_NUM]) | |||
/* | |||
* PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent) | |||
* | |||
* g.parent = new_parent | |||
*/ | |||
# define PyGreenlet_SetParent \ | |||
(*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \ | |||
_PyGreenlet_API[PyGreenlet_SetParent_NUM]) | |||
/* Macro that imports greenlet and initializes C API */ | |||
/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we | |||
keep the older definition to be sure older code that might have a copy of | |||
the header still works. */ | |||
# define PyGreenlet_Import() \ | |||
{ \ | |||
_PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \ | |||
} | |||
#endif /* GREENLET_MODULE */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* !Py_GREENLETOBJECT_H */ |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,28 @@ | |||
Copyright 2010 Pallets | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,124 @@ | |||
Metadata-Version: 2.1 | |||
Name: Flask | |||
Version: 2.0.1 | |||
Summary: A simple framework for building complex web applications. | |||
Home-page: https://palletsprojects.com/p/flask | |||
Author: Armin Ronacher | |||
Author-email: armin.ronacher@active-4.com | |||
Maintainer: Pallets | |||
Maintainer-email: contact@palletsprojects.com | |||
License: BSD-3-Clause | |||
Project-URL: Donate, https://palletsprojects.com/donate | |||
Project-URL: Documentation, https://flask.palletsprojects.com/ | |||
Project-URL: Changes, https://flask.palletsprojects.com/changes/ | |||
Project-URL: Source Code, https://github.com/pallets/flask/ | |||
Project-URL: Issue Tracker, https://github.com/pallets/flask/issues/ | |||
Project-URL: Twitter, https://twitter.com/PalletsTeam | |||
Project-URL: Chat, https://discord.gg/pallets | |||
Platform: UNKNOWN | |||
Classifier: Development Status :: 5 - Production/Stable | |||
Classifier: Environment :: Web Environment | |||
Classifier: Framework :: Flask | |||
Classifier: Intended Audience :: Developers | |||
Classifier: License :: OSI Approved :: BSD License | |||
Classifier: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content | |||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI | |||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application | |||
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks | |||
Requires-Python: >=3.6 | |||
Description-Content-Type: text/x-rst | |||
Requires-Dist: Werkzeug (>=2.0) | |||
Requires-Dist: Jinja2 (>=3.0) | |||
Requires-Dist: itsdangerous (>=2.0) | |||
Requires-Dist: click (>=7.1.2) | |||
Provides-Extra: async | |||
Requires-Dist: asgiref (>=3.2) ; extra == 'async' | |||
Provides-Extra: dotenv | |||
Requires-Dist: python-dotenv ; extra == 'dotenv' | |||
Flask | |||
===== | |||
Flask is a lightweight `WSGI`_ web application framework. It is designed | |||
to make getting started quick and easy, with the ability to scale up to | |||
complex applications. It began as a simple wrapper around `Werkzeug`_ | |||
and `Jinja`_ and has become one of the most popular Python web | |||
application frameworks. | |||
Flask offers suggestions, but doesn't enforce any dependencies or | |||
project layout. It is up to the developer to choose the tools and | |||
libraries they want to use. There are many extensions provided by the | |||
community that make adding new functionality easy. | |||
.. _WSGI: https://wsgi.readthedocs.io/ | |||
.. _Werkzeug: https://werkzeug.palletsprojects.com/ | |||
.. _Jinja: https://jinja.palletsprojects.com/ | |||
Installing | |||
---------- | |||
Install and update using `pip`_: | |||
.. code-block:: text | |||
$ pip install -U Flask | |||
.. _pip: https://pip.pypa.io/en/stable/quickstart/ | |||
A Simple Example | |||
---------------- | |||
.. code-block:: python | |||
# save this as app.py | |||
from flask import Flask | |||
app = Flask(__name__) | |||
@app.route("/") | |||
def hello(): | |||
return "Hello, World!" | |||
.. code-block:: text | |||
$ flask run | |||
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) | |||
Contributing | |||
------------ | |||
For guidance on setting up a development environment and how to make a | |||
contribution to Flask, see the `contributing guidelines`_. | |||
.. _contributing guidelines: https://github.com/pallets/flask/blob/main/CONTRIBUTING.rst | |||
Donate | |||
------ | |||
The Pallets organization develops and supports Flask and the libraries | |||
it uses. In order to grow the community of contributors and users, and | |||
allow the maintainers to devote more time to the projects, `please | |||
donate today`_. | |||
.. _please donate today: https://palletsprojects.com/donate | |||
Links | |||
----- | |||
- Documentation: https://flask.palletsprojects.com/ | |||
- Changes: https://flask.palletsprojects.com/changes/ | |||
- PyPI Releases: https://pypi.org/project/Flask/ | |||
- Source Code: https://github.com/pallets/flask/ | |||
- Issue Tracker: https://github.com/pallets/flask/issues/ | |||
- Website: https://palletsprojects.com/p/flask/ | |||
- Twitter: https://twitter.com/PalletsTeam | |||
- Chat: https://discord.gg/pallets | |||
@@ -0,0 +1,51 @@ | |||
../../Scripts/flask.exe,sha256=jAsR3j2HDZxKuPxMa4-KTV_CkpVSHVaFcQeGKvncEIE,106342 | |||
Flask-2.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
Flask-2.0.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 | |||
Flask-2.0.1.dist-info/METADATA,sha256=50Jm1647RKw98p4RF64bCqRh0wajk-n3hQ7av2-pniA,3808 | |||
Flask-2.0.1.dist-info/RECORD,, | |||
Flask-2.0.1.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 | |||
Flask-2.0.1.dist-info/entry_points.txt,sha256=gBLA1aKg0OYR8AhbAfg8lnburHtKcgJLDU52BBctN0k,42 | |||
Flask-2.0.1.dist-info/top_level.txt,sha256=dvi65F6AeGWVU0TBpYiC04yM60-FX1gJFkK31IKQr5c,6 | |||
flask/__init__.py,sha256=w5v6GCNm8eLDMNWqs2ue7HLHo75aslAwz1h3k3YO9HY,2251 | |||
flask/__main__.py,sha256=bYt9eEaoRQWdejEHFD8REx9jxVEdZptECFsV7F49Ink,30 | |||
flask/__pycache__/__init__.cpython-39.pyc,, | |||
flask/__pycache__/__main__.cpython-39.pyc,, | |||
flask/__pycache__/app.cpython-39.pyc,, | |||
flask/__pycache__/blueprints.cpython-39.pyc,, | |||
flask/__pycache__/cli.cpython-39.pyc,, | |||
flask/__pycache__/config.cpython-39.pyc,, | |||
flask/__pycache__/ctx.cpython-39.pyc,, | |||
flask/__pycache__/debughelpers.cpython-39.pyc,, | |||
flask/__pycache__/globals.cpython-39.pyc,, | |||
flask/__pycache__/helpers.cpython-39.pyc,, | |||
flask/__pycache__/logging.cpython-39.pyc,, | |||
flask/__pycache__/scaffold.cpython-39.pyc,, | |||
flask/__pycache__/sessions.cpython-39.pyc,, | |||
flask/__pycache__/signals.cpython-39.pyc,, | |||
flask/__pycache__/templating.cpython-39.pyc,, | |||
flask/__pycache__/testing.cpython-39.pyc,, | |||
flask/__pycache__/typing.cpython-39.pyc,, | |||
flask/__pycache__/views.cpython-39.pyc,, | |||
flask/__pycache__/wrappers.cpython-39.pyc,, | |||
flask/app.py,sha256=q6lpiiWVxjljQRwjjneUBpfllXYPEq0CFAUpTQ5gIeA,82376 | |||
flask/blueprints.py,sha256=OjI-dkwx96ZNMUGDDFMKzgcpUJf240WRuMlHkmgI1Lc,23541 | |||
flask/cli.py,sha256=iN1pL2SevE5Nmvey-0WwnxG3nipZXIiE__Ed4lx3IuM,32036 | |||
flask/config.py,sha256=jj_7JGen_kYuTlKrx8ZPBsZddb8mihC0ODg4gcjXBX8,11068 | |||
flask/ctx.py,sha256=EM3W0v1ctuFQAGk_HWtQdoJEg_r2f5Le4xcmElxFwwk,17428 | |||
flask/debughelpers.py,sha256=wk5HtLwENsQ4e8tkxfBn6ykUeVRDuMbQCKgtEVe6jxk,6171 | |||
flask/globals.py,sha256=cWd-R2hUH3VqPhnmQNww892tQS6Yjqg_wg8UvW1M7NM,1723 | |||
flask/helpers.py,sha256=00WqA3wYeyjMrnAOPZTUyrnUf7H8ik3CVT0kqGl_qjk,30589 | |||
flask/json/__init__.py,sha256=d-db2DJMASq0G7CI-JvobehRE1asNRGX1rIDQ1GF9WM,11580 | |||
flask/json/__pycache__/__init__.cpython-39.pyc,, | |||
flask/json/__pycache__/tag.cpython-39.pyc,, | |||
flask/json/tag.py,sha256=fys3HBLssWHuMAIJuTcf2K0bCtosePBKXIWASZEEjnU,8857 | |||
flask/logging.py,sha256=1o_hirVGqdj7SBdETnhX7IAjklG89RXlrwz_2CjzQQE,2273 | |||
flask/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
flask/scaffold.py,sha256=EhQuiFrdcmJHxqPGQkEpqLsEUZ7ULZD0rtED2NrduvM,32400 | |||
flask/sessions.py,sha256=Kb7zY4qBIOU2cw1xM5mQ_KmgYUBDFbUYWjlkq0EFYis,15189 | |||
flask/signals.py,sha256=HQWgBEXlrLbHwLBoWqAStJKcN-rsB1_AMO8-VZ7LDOo,2126 | |||
flask/templating.py,sha256=l96VD39JQ0nue4Bcj7wZ4-FWWs-ppLxvgBCpwDQ4KAk,5626 | |||
flask/testing.py,sha256=OsHT-2B70abWH3ulY9IbhLchXIeyj3L-cfcDa88wv5E,10281 | |||
flask/typing.py,sha256=zVqhz53KklncAv-WxbpxGZfaRGOqeWAsLdP1tTMaCuE,1684 | |||
flask/views.py,sha256=F2PpWPloe4x0906IUjnPcsOqg5YvmQIfk07_lFeAD4s,5865 | |||
flask/wrappers.py,sha256=VndbHPRBSUUOejmd2Y3ydkoCVUtsS2OJIdJEVIkBVD8,5604 |
@@ -0,0 +1,5 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: true | |||
Tag: py3-none-any | |||
@@ -0,0 +1,3 @@ | |||
[console_scripts] | |||
flask = flask.cli:main | |||
@@ -0,0 +1 @@ | |||
flask |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,28 @@ | |||
Copyright 2010 Pallets | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,94 @@ | |||
Metadata-Version: 2.1 | |||
Name: Flask-SQLAlchemy | |||
Version: 2.5.1 | |||
Summary: Adds SQLAlchemy support to your Flask application. | |||
Home-page: https://github.com/pallets/flask-sqlalchemy | |||
Author: Armin Ronacher | |||
Author-email: armin.ronacher@active-4.com | |||
Maintainer: Pallets | |||
Maintainer-email: contact@palletsprojects.com | |||
License: BSD-3-Clause | |||
Project-URL: Documentation, https://flask-sqlalchemy.palletsprojects.com/ | |||
Project-URL: Code, https://github.com/pallets/flask-sqlalchemy | |||
Project-URL: Issue tracker, https://github.com/pallets/flask-sqlalchemy/issues | |||
Platform: UNKNOWN | |||
Classifier: Development Status :: 5 - Production/Stable | |||
Classifier: Environment :: Web Environment | |||
Classifier: Intended Audience :: Developers | |||
Classifier: License :: OSI Approved :: BSD License | |||
Classifier: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Programming Language :: Python :: 2 | |||
Classifier: Programming Language :: Python :: 2.7 | |||
Classifier: Programming Language :: Python :: 3 | |||
Classifier: Programming Language :: Python :: 3.4 | |||
Classifier: Programming Language :: Python :: 3.5 | |||
Classifier: Programming Language :: Python :: 3.6 | |||
Classifier: Programming Language :: Python :: 3.7 | |||
Classifier: Programming Language :: Python :: Implementation :: CPython | |||
Classifier: Programming Language :: Python :: Implementation :: PyPy | |||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content | |||
Classifier: Topic :: Software Development :: Libraries :: Python Modules | |||
Requires-Python: >= 2.7, != 3.0.*, != 3.1.*, != 3.2.*, != 3.3.* | |||
Requires-Dist: Flask (>=0.10) | |||
Requires-Dist: SQLAlchemy (>=0.8.0) | |||
Flask-SQLAlchemy | |||
================ | |||
Flask-SQLAlchemy is an extension for `Flask`_ that adds support for | |||
`SQLAlchemy`_ to your application. It aims to simplify using SQLAlchemy | |||
with Flask by providing useful defaults and extra helpers that make it | |||
easier to accomplish common tasks. | |||
Installing | |||
---------- | |||
Install and update using `pip`_: | |||
.. code-block:: text | |||
$ pip install -U Flask-SQLAlchemy | |||
A Simple Example | |||
---------------- | |||
.. code-block:: python | |||
from flask import Flask | |||
from flask_sqlalchemy import SQLAlchemy | |||
app = Flask(__name__) | |||
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.sqlite" | |||
db = SQLAlchemy(app) | |||
class User(db.Model): | |||
id = db.Column(db.Integer, primary_key=True) | |||
username = db.Column(db.String, unique=True, nullable=False) | |||
email = db.Column(db.String, unique=True, nullable=False) | |||
db.session.add(User(name="Flask", email="example@example.com")) | |||
db.session.commit() | |||
users = User.query.all() | |||
Links | |||
----- | |||
- Documentation: https://flask-sqlalchemy.palletsprojects.com/ | |||
- Releases: https://pypi.org/project/Flask-SQLAlchemy/ | |||
- Code: https://github.com/pallets/flask-sqlalchemy | |||
- Issue tracker: https://github.com/pallets/flask-sqlalchemy/issues | |||
- Test status: https://travis-ci.org/pallets/flask-sqlalchemy | |||
- Test coverage: https://codecov.io/gh/pallets/flask-sqlalchemy | |||
.. _Flask: https://palletsprojects.com/p/flask/ | |||
.. _SQLAlchemy: https://www.sqlalchemy.org | |||
.. _pip: https://pip.pypa.io/en/stable/quickstart/ | |||
@@ -0,0 +1,14 @@ | |||
Flask_SQLAlchemy-2.5.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
Flask_SQLAlchemy-2.5.1.dist-info/LICENSE.rst,sha256=SJqOEQhQntmKN7uYPhHg9-HTHwvY-Zp5yESOf_N9B-o,1475 | |||
Flask_SQLAlchemy-2.5.1.dist-info/METADATA,sha256=vVCeMtTM_xOrUVoVyemeNaTUI5L9iXa16NsiMDDOgFU,3128 | |||
Flask_SQLAlchemy-2.5.1.dist-info/RECORD,, | |||
Flask_SQLAlchemy-2.5.1.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110 | |||
Flask_SQLAlchemy-2.5.1.dist-info/top_level.txt,sha256=w2K4fNNoTh4HItoFfz2FRQShSeLcvHYrzU_sZov21QU,17 | |||
flask_sqlalchemy/__init__.py,sha256=IaupgTRkQnY05KPLYvfiNnJdrmwoyfsxaiyGtrEYfO4,40738 | |||
flask_sqlalchemy/__pycache__/__init__.cpython-39.pyc,, | |||
flask_sqlalchemy/__pycache__/_compat.cpython-39.pyc,, | |||
flask_sqlalchemy/__pycache__/model.cpython-39.pyc,, | |||
flask_sqlalchemy/__pycache__/utils.cpython-39.pyc,, | |||
flask_sqlalchemy/_compat.py,sha256=yua0ZSgVWwi56QpEgwaPInzkNQ9PFb7YQdvEk3dImXo,821 | |||
flask_sqlalchemy/model.py,sha256=bd2mIv9LA1A2MZkQObgnMUCSrxNvyqplaSkCxyxKNxY,4988 | |||
flask_sqlalchemy/utils.py,sha256=4eHqAbYElnJ3NbSAHhuINckoAHDABoxjleMJD0iKgyg,1390 |
@@ -0,0 +1,6 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: true | |||
Tag: py2-none-any | |||
Tag: py3-none-any | |||
@@ -0,0 +1 @@ | |||
flask_sqlalchemy |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,28 @@ | |||
Copyright 2007 Pallets | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,112 @@ | |||
Metadata-Version: 2.1 | |||
Name: Jinja2 | |||
Version: 3.0.1 | |||
Summary: A very fast and expressive template engine. | |||
Home-page: https://palletsprojects.com/p/jinja/ | |||
Author: Armin Ronacher | |||
Author-email: armin.ronacher@active-4.com | |||
Maintainer: Pallets | |||
Maintainer-email: contact@palletsprojects.com | |||
License: BSD-3-Clause | |||
Project-URL: Donate, https://palletsprojects.com/donate | |||
Project-URL: Documentation, https://jinja.palletsprojects.com/ | |||
Project-URL: Changes, https://jinja.palletsprojects.com/changes/ | |||
Project-URL: Source Code, https://github.com/pallets/jinja/ | |||
Project-URL: Issue Tracker, https://github.com/pallets/jinja/issues/ | |||
Project-URL: Twitter, https://twitter.com/PalletsTeam | |||
Project-URL: Chat, https://discord.gg/pallets | |||
Platform: UNKNOWN | |||
Classifier: Development Status :: 5 - Production/Stable | |||
Classifier: Environment :: Web Environment | |||
Classifier: Intended Audience :: Developers | |||
Classifier: License :: OSI Approved :: BSD License | |||
Classifier: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content | |||
Classifier: Topic :: Text Processing :: Markup :: HTML | |||
Requires-Python: >=3.6 | |||
Description-Content-Type: text/x-rst | |||
Requires-Dist: MarkupSafe (>=2.0) | |||
Provides-Extra: i18n | |||
Requires-Dist: Babel (>=2.7) ; extra == 'i18n' | |||
Jinja | |||
===== | |||
Jinja is a fast, expressive, extensible templating engine. Special | |||
placeholders in the template allow writing code similar to Python | |||
syntax. Then the template is passed data to render the final document. | |||
It includes: | |||
- Template inheritance and inclusion. | |||
- Define and import macros within templates. | |||
- HTML templates can use autoescaping to prevent XSS from untrusted | |||
user input. | |||
- A sandboxed environment can safely render untrusted templates. | |||
- AsyncIO support for generating templates and calling async | |||
functions. | |||
- I18N support with Babel. | |||
- Templates are compiled to optimized Python code just-in-time and | |||
cached, or can be compiled ahead-of-time. | |||
- Exceptions point to the correct line in templates to make debugging | |||
easier. | |||
- Extensible filters, tests, functions, and even syntax. | |||
Jinja's philosophy is that while application logic belongs in Python if | |||
possible, it shouldn't make the template designer's job difficult by | |||
restricting functionality too much. | |||
Installing | |||
---------- | |||
Install and update using `pip`_: | |||
.. code-block:: text | |||
$ pip install -U Jinja2 | |||
.. _pip: https://pip.pypa.io/en/stable/quickstart/ | |||
In A Nutshell | |||
------------- | |||
.. code-block:: jinja | |||
{% extends "base.html" %} | |||
{% block title %}Members{% endblock %} | |||
{% block content %} | |||
<ul> | |||
{% for user in users %} | |||
<li><a href="{{ user.url }}">{{ user.username }}</a></li> | |||
{% endfor %} | |||
</ul> | |||
{% endblock %} | |||
Donate | |||
------ | |||
The Pallets organization develops and supports Jinja and other popular | |||
packages. In order to grow the community of contributors and users, and | |||
allow the maintainers to devote more time to the projects, `please | |||
donate today`_. | |||
.. _please donate today: https://palletsprojects.com/donate | |||
Links | |||
----- | |||
- Documentation: https://jinja.palletsprojects.com/ | |||
- Changes: https://jinja.palletsprojects.com/changes/ | |||
- PyPI Releases: https://pypi.org/project/Jinja2/ | |||
- Source Code: https://github.com/pallets/jinja/ | |||
- Issue Tracker: https://github.com/pallets/jinja/issues/ | |||
- Website: https://palletsprojects.com/p/jinja/ | |||
- Twitter: https://twitter.com/PalletsTeam | |||
- Chat: https://discord.gg/pallets | |||
@@ -0,0 +1,58 @@ | |||
Jinja2-3.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
Jinja2-3.0.1.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 | |||
Jinja2-3.0.1.dist-info/METADATA,sha256=k6STiOONbGESP2rEKmjhznuG10vm9sNCHCUQL9AQFM4,3508 | |||
Jinja2-3.0.1.dist-info/RECORD,, | |||
Jinja2-3.0.1.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 | |||
Jinja2-3.0.1.dist-info/entry_points.txt,sha256=Qy_DkVo6Xj_zzOtmErrATe8lHZhOqdjpt3e4JJAGyi8,61 | |||
Jinja2-3.0.1.dist-info/top_level.txt,sha256=PkeVWtLb3-CqjWi1fO29OCbj55EhX_chhKrCdrVe_zs,7 | |||
jinja2/__init__.py,sha256=fd8jaCRsCATgC7ahuUTD8CyfQoc4aRfALEIny4mwfog,2205 | |||
jinja2/__pycache__/__init__.cpython-39.pyc,, | |||
jinja2/__pycache__/_identifier.cpython-39.pyc,, | |||
jinja2/__pycache__/async_utils.cpython-39.pyc,, | |||
jinja2/__pycache__/bccache.cpython-39.pyc,, | |||
jinja2/__pycache__/compiler.cpython-39.pyc,, | |||
jinja2/__pycache__/constants.cpython-39.pyc,, | |||
jinja2/__pycache__/debug.cpython-39.pyc,, | |||
jinja2/__pycache__/defaults.cpython-39.pyc,, | |||
jinja2/__pycache__/environment.cpython-39.pyc,, | |||
jinja2/__pycache__/exceptions.cpython-39.pyc,, | |||
jinja2/__pycache__/ext.cpython-39.pyc,, | |||
jinja2/__pycache__/filters.cpython-39.pyc,, | |||
jinja2/__pycache__/idtracking.cpython-39.pyc,, | |||
jinja2/__pycache__/lexer.cpython-39.pyc,, | |||
jinja2/__pycache__/loaders.cpython-39.pyc,, | |||
jinja2/__pycache__/meta.cpython-39.pyc,, | |||
jinja2/__pycache__/nativetypes.cpython-39.pyc,, | |||
jinja2/__pycache__/nodes.cpython-39.pyc,, | |||
jinja2/__pycache__/optimizer.cpython-39.pyc,, | |||
jinja2/__pycache__/parser.cpython-39.pyc,, | |||
jinja2/__pycache__/runtime.cpython-39.pyc,, | |||
jinja2/__pycache__/sandbox.cpython-39.pyc,, | |||
jinja2/__pycache__/tests.cpython-39.pyc,, | |||
jinja2/__pycache__/utils.cpython-39.pyc,, | |||
jinja2/__pycache__/visitor.cpython-39.pyc,, | |||
jinja2/_identifier.py,sha256=EdgGJKi7O1yvr4yFlvqPNEqV6M1qHyQr8Gt8GmVTKVM,1775 | |||
jinja2/async_utils.py,sha256=bY2nCUfBA_4FSnNUsIsJgljBq3hACr6fzLi7LiyMTn8,1751 | |||
jinja2/bccache.py,sha256=smAvSDgDSvXdvJzCN_9s0XfkVpQEu8be-QwgeMlrwiM,12677 | |||
jinja2/compiler.py,sha256=qq0Fo9EpDAEwHPLAs3sAP7dindUvDrFrbx4AcB8xV5M,72046 | |||
jinja2/constants.py,sha256=GMoFydBF_kdpaRKPoM5cl5MviquVRLVyZtfp5-16jg0,1433 | |||
jinja2/debug.py,sha256=uBmrsiwjYH5l14R9STn5mydOOyriBYol5lDGvEqAb3A,9238 | |||
jinja2/defaults.py,sha256=boBcSw78h-lp20YbaXSJsqkAI2uN_mD_TtCydpeq5wU,1267 | |||
jinja2/environment.py,sha256=T6U4be9mY1CUXXin_EQFwpvpFqCiryweGqzXGRYIoSA,61573 | |||
jinja2/exceptions.py,sha256=ioHeHrWwCWNaXX1inHmHVblvc4haO7AXsjCp3GfWvx0,5071 | |||
jinja2/ext.py,sha256=44SjDjeYkkxQTpmC2BetOTxEFMgQ42p2dfSwXmPFcSo,32122 | |||
jinja2/filters.py,sha256=LslRsJd0JVFBHtdfU_WraM1eQitotciwawiW-seR42U,52577 | |||
jinja2/idtracking.py,sha256=KdFVohVNK-baOwt_INPMco19D7AfLDEN8i3_JoiYnGQ,10713 | |||
jinja2/lexer.py,sha256=D5qOKB3KnRqK9gPAZFQvRguomYsQok5-14TKiWTN8Jw,29923 | |||
jinja2/loaders.py,sha256=ePpWB0xDrILgLVqNFcxqqSbPizsI0T-JlkNEUFqq9fo,22350 | |||
jinja2/meta.py,sha256=GNPEvifmSaU3CMxlbheBOZjeZ277HThOPUTf1RkppKQ,4396 | |||
jinja2/nativetypes.py,sha256=62hvvsAxAj0YaxylOHoREYVogJ5JqOlJISgGY3OKd_o,3675 | |||
jinja2/nodes.py,sha256=LHF97fu6GW4r2Z9UaOX92MOT1wZpdS9Nx4N-5Fp5ti8,34509 | |||
jinja2/optimizer.py,sha256=tHkMwXxfZkbfA1KmLcqmBMSaz7RLIvvItrJcPoXTyD8,1650 | |||
jinja2/parser.py,sha256=kHnU8v92GwMYkfr0MVakWv8UlSf_kJPx8LUsgQMof70,39767 | |||
jinja2/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
jinja2/runtime.py,sha256=bSWdawLjReKpKHhF3-96OIuWYpUy1yxFJCN3jBYyoXc,35013 | |||
jinja2/sandbox.py,sha256=-8zxR6TO9kUkciAVFsIKu8Oq-C7PTeYEdZ5TtA55-gw,14600 | |||
jinja2/tests.py,sha256=Am5Z6Lmfr2XaH_npIfJJ8MdXtWsbLjMULZJulTAj30E,5905 | |||
jinja2/utils.py,sha256=0wGkxDbxlW10y0ac4-kEiy1Bn0AsWXqz8uomK9Ugy1Q,26961 | |||
jinja2/visitor.py,sha256=ZmeLuTj66ic35-uFH-1m0EKXiw4ObDDb_WuE6h5vPFg,3572 |
@@ -0,0 +1,5 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: true | |||
Tag: py3-none-any | |||
@@ -0,0 +1,3 @@ | |||
[babel.extractors] | |||
jinja2 = jinja2.ext:babel_extract [i18n] | |||
@@ -0,0 +1 @@ | |||
jinja2 |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,28 @@ | |||
Copyright 2010 Pallets | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,100 @@ | |||
Metadata-Version: 2.1 | |||
Name: MarkupSafe | |||
Version: 2.0.1 | |||
Summary: Safely add untrusted strings to HTML/XML markup. | |||
Home-page: https://palletsprojects.com/p/markupsafe/ | |||
Author: Armin Ronacher | |||
Author-email: armin.ronacher@active-4.com | |||
Maintainer: Pallets | |||
Maintainer-email: contact@palletsprojects.com | |||
License: BSD-3-Clause | |||
Project-URL: Donate, https://palletsprojects.com/donate | |||
Project-URL: Documentation, https://markupsafe.palletsprojects.com/ | |||
Project-URL: Changes, https://markupsafe.palletsprojects.com/changes/ | |||
Project-URL: Source Code, https://github.com/pallets/markupsafe/ | |||
Project-URL: Issue Tracker, https://github.com/pallets/markupsafe/issues/ | |||
Project-URL: Twitter, https://twitter.com/PalletsTeam | |||
Project-URL: Chat, https://discord.gg/pallets | |||
Platform: UNKNOWN | |||
Classifier: Development Status :: 5 - Production/Stable | |||
Classifier: Environment :: Web Environment | |||
Classifier: Intended Audience :: Developers | |||
Classifier: License :: OSI Approved :: BSD License | |||
Classifier: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content | |||
Classifier: Topic :: Text Processing :: Markup :: HTML | |||
Requires-Python: >=3.6 | |||
Description-Content-Type: text/x-rst | |||
MarkupSafe | |||
========== | |||
MarkupSafe implements a text object that escapes characters so it is | |||
safe to use in HTML and XML. Characters that have special meanings are | |||
replaced so that they display as the actual characters. This mitigates | |||
injection attacks, meaning untrusted user input can safely be displayed | |||
on a page. | |||
Installing | |||
---------- | |||
Install and update using `pip`_: | |||
.. code-block:: text | |||
pip install -U MarkupSafe | |||
.. _pip: https://pip.pypa.io/en/stable/quickstart/ | |||
Examples | |||
-------- | |||
.. code-block:: pycon | |||
>>> from markupsafe import Markup, escape | |||
>>> # escape replaces special characters and wraps in Markup | |||
>>> escape("<script>alert(document.cookie);</script>") | |||
Markup('<script>alert(document.cookie);</script>') | |||
>>> # wrap in Markup to mark text "safe" and prevent escaping | |||
>>> Markup("<strong>Hello</strong>") | |||
Markup('<strong>hello</strong>') | |||
>>> escape(Markup("<strong>Hello</strong>")) | |||
Markup('<strong>hello</strong>') | |||
>>> # Markup is a str subclass | |||
>>> # methods and operators escape their arguments | |||
>>> template = Markup("Hello <em>{name}</em>") | |||
>>> template.format(name='"World"') | |||
Markup('Hello <em>"World"</em>') | |||
Donate | |||
------ | |||
The Pallets organization develops and supports MarkupSafe and other | |||
popular packages. In order to grow the community of contributors and | |||
users, and allow the maintainers to devote more time to the projects, | |||
`please donate today`_. | |||
.. _please donate today: https://palletsprojects.com/donate | |||
Links | |||
----- | |||
- Documentation: https://markupsafe.palletsprojects.com/ | |||
- Changes: https://markupsafe.palletsprojects.com/changes/ | |||
- PyPI Releases: https://pypi.org/project/MarkupSafe/ | |||
- Source Code: https://github.com/pallets/markupsafe/ | |||
- Issue Tracker: https://github.com/pallets/markupsafe/issues/ | |||
- Website: https://palletsprojects.com/p/markupsafe/ | |||
- Twitter: https://twitter.com/PalletsTeam | |||
- Chat: https://discord.gg/pallets | |||
@@ -0,0 +1,13 @@ | |||
MarkupSafe-2.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
MarkupSafe-2.0.1.dist-info/LICENSE.rst,sha256=RjHsDbX9kKVH4zaBcmTGeYIUM4FG-KyUtKV_lu6MnsQ,1503 | |||
MarkupSafe-2.0.1.dist-info/METADATA,sha256=FmPpxBdaqCCjF-XKqoxeEzqAzhetQnrkkSsd3V3X-Jc,3211 | |||
MarkupSafe-2.0.1.dist-info/RECORD,, | |||
MarkupSafe-2.0.1.dist-info/WHEEL,sha256=jr7ubY0Lkz_yXH9FfFe9PTtLhGOsf62dZkNvTYrJINE,100 | |||
MarkupSafe-2.0.1.dist-info/top_level.txt,sha256=qy0Plje5IJuvsCBjejJyhDCjEAdcDLK_2agVcex8Z6U,11 | |||
markupsafe/__init__.py,sha256=s08KbuFRV3zh4Wh7xjsIphXgp1xf0EUB79wlPj-4scc,9211 | |||
markupsafe/__pycache__/__init__.cpython-39.pyc,, | |||
markupsafe/__pycache__/_native.cpython-39.pyc,, | |||
markupsafe/_native.py,sha256=JMXegJtk1ZcnRKrgyCA-CEXmRnOpaIXLyDAM98GbshY,2061 | |||
markupsafe/_speedups.cp39-win_amd64.pyd,sha256=hPTsANj9bt7hLYxWLuZcC7E3-EnJQ4GlvIf9Vx0p1p0,16384 | |||
markupsafe/_speedups.pyi,sha256=f5QtwIOP0eLrxh2v5p6SmaYmlcHIGIfmz0DovaqL0OU,238 | |||
markupsafe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 |
@@ -0,0 +1,5 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: false | |||
Tag: cp39-cp39-win_amd64 | |||
@@ -0,0 +1 @@ | |||
markupsafe |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,19 @@ | |||
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. |
@@ -0,0 +1,234 @@ | |||
Metadata-Version: 2.1 | |||
Name: SQLAlchemy | |||
Version: 1.4.20 | |||
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: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Programming Language :: Python :: 2 | |||
Classifier: Programming Language :: Python :: 2.7 | |||
Classifier: Programming Language :: Python :: 3 | |||
Classifier: Programming Language :: Python :: 3.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 | |||
Requires-Python: !=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7 | |||
Description-Content-Type: text/x-rst | |||
Requires-Dist: importlib-metadata ; python_version < "3.8" | |||
Requires-Dist: greenlet (!=0.4.17) ; python_version >= "3" | |||
Provides-Extra: aiomysql | |||
Requires-Dist: greenlet (!=0.4.17) ; (python_version >= "3") and extra == 'aiomysql' | |||
Requires-Dist: aiomysql ; (python_version >= "3") and extra == 'aiomysql' | |||
Provides-Extra: aiosqlite | |||
Requires-Dist: greenlet (!=0.4.17) ; (python_version >= "3") and extra == 'aiosqlite' | |||
Requires-Dist: aiosqlite ; (python_version >= "3") and extra == 'aiosqlite' | |||
Provides-Extra: asyncio | |||
Requires-Dist: greenlet (!=0.4.17) ; (python_version >= "3") and extra == 'asyncio' | |||
Provides-Extra: mariadb_connector | |||
Requires-Dist: mariadb (>=1.0.1) ; (python_version >= "3") and extra == 'mariadb_connector' | |||
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: mypy | |||
Requires-Dist: sqlalchemy2-stubs ; extra == 'mypy' | |||
Requires-Dist: mypy (>=0.800) ; (python_version >= "3") and extra == 'mypy' | |||
Provides-Extra: mysql | |||
Requires-Dist: mysqlclient (<2,>=1.4.0) ; (python_version < "3") and extra == 'mysql' | |||
Requires-Dist: mysqlclient (>=1.4.0) ; (python_version >= "3") and extra == 'mysql' | |||
Provides-Extra: mysql_connector | |||
Requires-Dist: mysqlconnector ; extra == 'mysql_connector' | |||
Provides-Extra: oracle | |||
Requires-Dist: cx-oracle (<8,>=7) ; (python_version < "3") and extra == 'oracle' | |||
Requires-Dist: cx-oracle (>=7) ; (python_version >= "3") and extra == 'oracle' | |||
Provides-Extra: postgresql | |||
Requires-Dist: psycopg2 (>=2.7) ; extra == 'postgresql' | |||
Provides-Extra: postgresql_asyncpg | |||
Requires-Dist: greenlet (!=0.4.17) ; (python_version >= "3") and extra == 'postgresql_asyncpg' | |||
Requires-Dist: asyncpg ; (python_version >= "3") and extra == 'postgresql_asyncpg' | |||
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' | |||
Provides-Extra: sqlcipher | |||
Requires-Dist: sqlcipher3-binary ; (python_version >= "3") and extra == 'sqlcipher' | |||
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>`_. | |||
@@ -0,0 +1,479 @@ | |||
SQLAlchemy-1.4.20.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
SQLAlchemy-1.4.20.dist-info/LICENSE,sha256=YBpAuebmf1_VblyrYHwFdqeATqzBxJ-T6h8-e4s2zW4,1119 | |||
SQLAlchemy-1.4.20.dist-info/METADATA,sha256=Jw3VHRkzzDevEV7BfHjLoAigwu92NLmbpX1abbrS8w4,9386 | |||
SQLAlchemy-1.4.20.dist-info/RECORD,, | |||
SQLAlchemy-1.4.20.dist-info/WHEEL,sha256=jr7ubY0Lkz_yXH9FfFe9PTtLhGOsf62dZkNvTYrJINE,100 | |||
SQLAlchemy-1.4.20.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11 | |||
sqlalchemy/__init__.py,sha256=ExIPxvWel4JwxLhYY4m_-B3qZdcD0IIJGfcSP8c11gw,4241 | |||
sqlalchemy/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/exc.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/inspection.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/log.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/processors.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/schema.cpython-39.pyc,, | |||
sqlalchemy/__pycache__/types.cpython-39.pyc,, | |||
sqlalchemy/cimmutabledict.cp39-win_amd64.pyd,sha256=dFj0Cbv6yOjMa3hJzlY5LcEsJlrQC0p5Sonj8AZsYS4,14848 | |||
sqlalchemy/connectors/__init__.py,sha256=TBW6z0L_8lga2UXWZBC2kXFkmBj1tyyHGj2zPiwVTnA,288 | |||
sqlalchemy/connectors/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/connectors/__pycache__/mxodbc.cpython-39.pyc,, | |||
sqlalchemy/connectors/__pycache__/pyodbc.cpython-39.pyc,, | |||
sqlalchemy/connectors/mxodbc.py,sha256=YPVxoPpPZyCGgZuNG-PXh6vF_y4BT2IJTbhSoSUFgG0,5948 | |||
sqlalchemy/connectors/pyodbc.py,sha256=-9snrm-iRg68Zf-3HBGDvJqFQlK17lku5zL03KJbB0I,7005 | |||
sqlalchemy/cprocessors.cp39-win_amd64.pyd,sha256=qLenj6vwMu-MHzCk6kaLlSuQf1FQhVHZNmCHhLy5OcE,17408 | |||
sqlalchemy/cresultproxy.cp39-win_amd64.pyd,sha256=1tj6189v39vpUK7vBUYkM80Tk72094dU3wzaOtEiL6M,20992 | |||
sqlalchemy/databases/__init__.py,sha256=Wr0SaNwZ_U8v65tQ9b0kL8hcpsCMCQ9f8dnfLjg9z1M,1047 | |||
sqlalchemy/databases/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/__init__.py,sha256=Q9SoXJ9mpShD_4lbIXI6wjJqJsmpmDgS-yndzS1aauU,2156 | |||
sqlalchemy/dialects/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/firebird/__init__.py,sha256=99IsIXbvMTkG2KkeQDdsuxdM5eonmd8kN_7_Hwew1TA,1193 | |||
sqlalchemy/dialects/firebird/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/firebird/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/firebird/__pycache__/fdb.cpython-39.pyc,, | |||
sqlalchemy/dialects/firebird/__pycache__/kinterbasdb.cpython-39.pyc,, | |||
sqlalchemy/dialects/firebird/base.py,sha256=SFPEpzpyUTKy4zwIZe1rnM4V8wjuwk0A7RV-XGMGCXc,32167 | |||
sqlalchemy/dialects/firebird/fdb.py,sha256=qQf8oSpPCWYrXQCVSZlGMLGn2XiqNloP6opoSrMGkxY,4229 | |||
sqlalchemy/dialects/firebird/kinterbasdb.py,sha256=fchGnET7sqXuiNcj-Bim_rmRjhaMPcXyrSkUSuBKVdw,6675 | |||
sqlalchemy/dialects/mssql/__init__.py,sha256=8fhQ2dxcuRwcdYrdbI9nzVAel5nNJotnV1btviNhIag,1872 | |||
sqlalchemy/dialects/mssql/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/information_schema.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/json.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/mxodbc.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/pymssql.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/__pycache__/pyodbc.cpython-39.pyc,, | |||
sqlalchemy/dialects/mssql/base.py,sha256=_xMHlPWaOgx7EyTZOklfxSQBQ2Q4ckxm5m9vFfrwnVo,110143 | |||
sqlalchemy/dialects/mssql/information_schema.py,sha256=yjE4A6JS0MQnC7mdIFFoh8wIz4TXAfvzBcMSKJvRkYM,7815 | |||
sqlalchemy/dialects/mssql/json.py,sha256=bAi9z-htrC6adJUiBRetVj3RwtJ2GNN5I_KGeHFL8_s,4683 | |||
sqlalchemy/dialects/mssql/mxodbc.py,sha256=EwR2i5KeL0O_QOoC_w8bB8-Ibmmca07p_Pk-B9V6oXs,4956 | |||
sqlalchemy/dialects/mssql/provision.py,sha256=oTGw0l5RNcXIWkA0s2erVgk2XKiNw26IRzZE84tN2uE,4371 | |||
sqlalchemy/dialects/mssql/pymssql.py,sha256=KXNWqN_gcJNs4eOcGMUuK2JS0zo3QIZpLtK0Cc2lo10,4979 | |||
sqlalchemy/dialects/mssql/pyodbc.py,sha256=dt8bzeusRcfPSrW14tfK1auaLHbIiKyIAL455R_n66c,21198 | |||
sqlalchemy/dialects/mysql/__init__.py,sha256=zGUaA54PNMKz_foJOomYcDZ0nRcM0FOBTXeZC4DkjkQ,2261 | |||
sqlalchemy/dialects/mysql/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/aiomysql.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/cymysql.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/dml.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/enumerated.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/expression.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/json.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/mariadb.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/mariadbconnector.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/mysqlconnector.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/mysqldb.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/oursql.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/pymysql.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/pyodbc.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/reflection.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/__pycache__/types.cpython-39.pyc,, | |||
sqlalchemy/dialects/mysql/aiomysql.py,sha256=IIaMMlE5Sa6tNHdBF2_w-quqjSckbSLJLO6yGkqWO4I,9458 | |||
sqlalchemy/dialects/mysql/base.py,sha256=PgA-SPgvPsAvwovzNM0jL8MygoeJW1xAzdexHszrM14,121335 | |||
sqlalchemy/dialects/mysql/cymysql.py,sha256=u_2t1j9HsNYjHN1W5mcer3VzXKWpy9Ht0U23fmVv4TA,2352 | |||
sqlalchemy/dialects/mysql/dml.py,sha256=rRmYkeT-R8ZgfqwSG2uuCPwVMN60AMCJ3IMhVdQNjbw,6355 | |||
sqlalchemy/dialects/mysql/enumerated.py,sha256=7Gpd__GD6cqATpJG_exsGzADlV7PmS7Krr4K1KaAYHM,9396 | |||
sqlalchemy/dialects/mysql/expression.py,sha256=rinSVZR7GK6S6OpqNwoUIrbNuT671gObXv5OD_Y6qwk,3867 | |||
sqlalchemy/dialects/mysql/json.py,sha256=iEKILiRmIpakQcqJt2OzfmVGFsgSyi7gBg63khPggu4,2396 | |||
sqlalchemy/dialects/mysql/mariadb.py,sha256=jE1Hpmka_nKJjWsFHcCVRKWvjg7l1mNCjCzvVADMD-k,523 | |||
sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=PONgd15UBS5TUZL8OB6hLj0Za_RpRA4VN6vgZoMYnlY,7755 | |||
sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=DhI1eAhINj_iWsC61fOCMSvJJOW_D9PKQBjOJUZX7gM,7929 | |||
sqlalchemy/dialects/mysql/mysqldb.py,sha256=UFaJzBGFO9ix5oo22IAMQLnVRsETILV8b_zNSAq8drI,10853 | |||
sqlalchemy/dialects/mysql/oursql.py,sha256=lJexKOuqiuzYlbbc4qd6oyzn2jQ8QbocDcgixKGnxEU,8794 | |||
sqlalchemy/dialects/mysql/provision.py,sha256=-gCG7MwEMtztSmNU107Q563t-nN-oqTVkCiay-HRRQI,2727 | |||
sqlalchemy/dialects/mysql/pymysql.py,sha256=QtNLSJ_etMgSoo31A47gyt8lMRXbSOHYPaVyjtS8tjE,2867 | |||
sqlalchemy/dialects/mysql/pyodbc.py,sha256=95nwWGTVR-Ym4-R_QrDRuxcH8-pwu21-ZWBVNvZeTcM,4637 | |||
sqlalchemy/dialects/mysql/reflection.py,sha256=gCWmTOsvrRDGKAmXh4AGGnO03rClVuXPswASmzALgg0,19110 | |||
sqlalchemy/dialects/mysql/types.py,sha256=zMqX3xlwcFf1N4AZhZUeguI3UAn8vEDLJiVBj1TbIYg,25361 | |||
sqlalchemy/dialects/oracle/__init__.py,sha256=z_sm511AIB30Vuv1Es-hfkRMHe5-yeqNGpnzE_XkPPo,1286 | |||
sqlalchemy/dialects/oracle/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/oracle/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/oracle/__pycache__/cx_oracle.cpython-39.pyc,, | |||
sqlalchemy/dialects/oracle/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/dialects/oracle/base.py,sha256=yMK4KDqaFhfntVEXtYXOU3RKhgp8yo8vTiIamog9YEU,89010 | |||
sqlalchemy/dialects/oracle/cx_oracle.py,sha256=9CBbppRxvJEkptdy6iRBRpKRC8LDEyAvYPd7_q8Va5E,50460 | |||
sqlalchemy/dialects/oracle/provision.py,sha256=HCi5hs5fv6rXv-lVQir6gsKrhes9NoAWlChzR3ueq74,5965 | |||
sqlalchemy/dialects/postgresql/__init__.py,sha256=WraAOkI7m26v85Pf28M2ONh-3j4SduvqFdefDPpc3EM,2625 | |||
sqlalchemy/dialects/postgresql/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/array.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/asyncpg.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/dml.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/ext.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/hstore.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/json.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/pg8000.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/psycopg2.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/psycopg2cffi.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/pygresql.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/pypostgresql.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/__pycache__/ranges.cpython-39.pyc,, | |||
sqlalchemy/dialects/postgresql/array.py,sha256=3WQ2yBDAhms40MhJ683FELKmN9TL8XLpXDj3-TIaASo,12615 | |||
sqlalchemy/dialects/postgresql/asyncpg.py,sha256=SmsjkLFctg51nrJKv3zrPWFNXhp0wRf8vWRa06FvC8A,34474 | |||
sqlalchemy/dialects/postgresql/base.py,sha256=m28uVDT3IYxGRKZjeEyilwOAo8o8l_isjF145-Q8zuU,155990 | |||
sqlalchemy/dialects/postgresql/dml.py,sha256=Id1QgpOnhLNOpIiF0igYYovdOcPvpHG0KJsD1VvQH60,9828 | |||
sqlalchemy/dialects/postgresql/ext.py,sha256=K5huWreKbPLRVuwF7gFRhSPG0CY5sdXF0LiFFmDpMbY,8656 | |||
sqlalchemy/dialects/postgresql/hstore.py,sha256=obkZOC84OYVWUC8O4PyMlEGifJAA-AjsgINtrkOj0Ac,12837 | |||
sqlalchemy/dialects/postgresql/json.py,sha256=szREjVPlVfpwAc5D6tHqNCBL2UHIfr6yk_CgZqZQ10A,10777 | |||
sqlalchemy/dialects/postgresql/pg8000.py,sha256=-KFdYLjDPQapVZ-nth9-NxcDETC7m2wwg3NdXuHtV_g,17390 | |||
sqlalchemy/dialects/postgresql/provision.py,sha256=EgdZRObrTzwZ7jaBA_oPkWx3Ly1Cathw4pOfWZm6Pn0,4543 | |||
sqlalchemy/dialects/postgresql/psycopg2.py,sha256=hwJ1yjtBiekK2WHr5NHCF6XQWRuL_Wj65oUEBGBgQVs,39900 | |||
sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=DgxWc4LrxnS3ay2KYr4sYZ76wC2ff1HFc-61Nf9TkpY,1753 | |||
sqlalchemy/dialects/postgresql/pygresql.py,sha256=i7H04i1vuc0I8f3nnUmNinsfGGCku_BKGu_6i1j083A,8861 | |||
sqlalchemy/dialects/postgresql/pypostgresql.py,sha256=MIEJhCHUwj3JF1PC4dB8dAOuoRaoiF8W0yzAU_L-a-g,3817 | |||
sqlalchemy/dialects/postgresql/ranges.py,sha256=b04r-iDteuTMhmVAc5Yf6cGraGTFggZTi0hx61_P3ng,4762 | |||
sqlalchemy/dialects/sqlite/__init__.py,sha256=rPgXiMXoA6X1_aeqq4ABU6QDqhGfIHcBaUY89utTQQw,1255 | |||
sqlalchemy/dialects/sqlite/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/aiosqlite.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/dml.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/json.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/pysqlcipher.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/__pycache__/pysqlite.cpython-39.pyc,, | |||
sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=pUeydy7OicEYmuYE59LIvcyaN2pPZHEQgq8JCeMtCtw,10179 | |||
sqlalchemy/dialects/sqlite/base.py,sha256=J6JqD1JGTYfDWQZZOOKIKdBhb8MQ1naSX44A8RbzTp0,90650 | |||
sqlalchemy/dialects/sqlite/dml.py,sha256=9CKXKKpA2e1Xqo6U1gvvHedyfAZvpkRBpZiRQJVF9ZU,7037 | |||
sqlalchemy/dialects/sqlite/json.py,sha256=bz_1axFG5YI9kLszE-oiCN3-z95zIPPcLgVwug_-AT4,2602 | |||
sqlalchemy/dialects/sqlite/provision.py,sha256=3F5ZX2dYGMFAGra99UVavCihth1_XazJXX9XAet8gbw,4818 | |||
sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=stRIWDxLkq0QATChLf1p3v1P0xlHfGm_sYIrye83vxM,5768 | |||
sqlalchemy/dialects/sqlite/pysqlite.py,sha256=ZL7OxYuaX9nf_3QGutZL29x1RRgqCdPo6d_wR4ZKu_w,23896 | |||
sqlalchemy/dialects/sybase/__init__.py,sha256=L1T7DkOKeeT4rs_-HMQtT8a6L_yeHNJqtTi8MGd_pbw,1430 | |||
sqlalchemy/dialects/sybase/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/dialects/sybase/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/dialects/sybase/__pycache__/mxodbc.cpython-39.pyc,, | |||
sqlalchemy/dialects/sybase/__pycache__/pyodbc.cpython-39.pyc,, | |||
sqlalchemy/dialects/sybase/__pycache__/pysybase.cpython-39.pyc,, | |||
sqlalchemy/dialects/sybase/base.py,sha256=4aLf2TrGblF0ojJR54tHifgNkfTD0adC9j_wR_GYU1Y,33519 | |||
sqlalchemy/dialects/sybase/mxodbc.py,sha256=5QXZjzxHpne8MKAAwPR32x6YXU5IQPDPKCLaSW23wp8,971 | |||
sqlalchemy/dialects/sybase/pyodbc.py,sha256=BNaSGyeAroOrHLc7rLIZ9kkeZxULVDxqHZtzNIjbG6A,2321 | |||
sqlalchemy/dialects/sybase/pysybase.py,sha256=AEIbV2egEfWKrXYMkTj74HlB7owPSn7hs8U7M_b_EpE,3474 | |||
sqlalchemy/engine/__init__.py,sha256=x8TozgrDsPtS2j-9ByAv0ACrcpUMiFJMpxc0lsGQmo8,2092 | |||
sqlalchemy/engine/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/characteristics.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/create.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/cursor.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/default.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/interfaces.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/mock.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/reflection.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/result.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/row.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/strategies.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/url.cpython-39.pyc,, | |||
sqlalchemy/engine/__pycache__/util.cpython-39.pyc,, | |||
sqlalchemy/engine/base.py,sha256=cQVJm7LS3VvsdznS_EmthCan6qCyjENX0LFsGFJ5Gls,121303 | |||
sqlalchemy/engine/characteristics.py,sha256=DrhLcmpnkMpmgo_kgQpcujoD4nW81vTt-GkuWqW9QaY,1873 | |||
sqlalchemy/engine/create.py,sha256=lMQRneFu5OcwkQNxmOgonrgwU-9E1oGh0h7ZlmKk_IQ,31143 | |||
sqlalchemy/engine/cursor.py,sha256=B3rcfKd1WHfOQtxkIUCVWZaKFT6AFxKqfNLZHbPYBuU,69686 | |||
sqlalchemy/engine/default.py,sha256=WhPeP06ZwFzR6TECsP7AKDhDt2ABOJN1eH017p1m2eA,66314 | |||
sqlalchemy/engine/events.py,sha256=Hv0GAy-w8m9xdq8E6vZz0fSuLgbZ_9uXMVO3N-HavN4,33483 | |||
sqlalchemy/engine/interfaces.py,sha256=h0i-LWMoBq5f2PFDG1qYQTt87TSAzl4BvIypVgq_MLc,60760 | |||
sqlalchemy/engine/mock.py,sha256=eXuMRQawEZFJWpdTELQcljPq5guokWSW9koqySGL-90,3743 | |||
sqlalchemy/engine/reflection.py,sha256=dRuXqeVrQXa-24YA45ZuiHDPprdr0d-kGNnt4WZp_v8,39755 | |||
sqlalchemy/engine/result.py,sha256=jJ3QGGPeINyfbEnYkaRSvm7e5UArvWaw_u3dYlxVKto,54923 | |||
sqlalchemy/engine/row.py,sha256=J0ku18YCc8_DAu-B8oFTTdeLj-5AbylRSrN7eY16AGo,18799 | |||
sqlalchemy/engine/strategies.py,sha256=Qqx7Nw6TPJe6KzM58oPHavzbSqaVST4DQGrhTO42R14,430 | |||
sqlalchemy/engine/url.py,sha256=kpLkdISaFyNChYyUViXS05hg5m4SYx6vrqj3LEkeClc,26200 | |||
sqlalchemy/engine/util.py,sha256=R2fGBk_tpc5LR05Q-mIauF5mGgPDm5IJ9TBl5Brhitg,7875 | |||
sqlalchemy/event/__init__.py,sha256=UEArBlnnF0If5n_aohWAmYx3Jjoym-8bBgyZ0Fp7hMI,533 | |||
sqlalchemy/event/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/event/__pycache__/api.cpython-39.pyc,, | |||
sqlalchemy/event/__pycache__/attr.cpython-39.pyc,, | |||
sqlalchemy/event/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/event/__pycache__/legacy.cpython-39.pyc,, | |||
sqlalchemy/event/__pycache__/registry.cpython-39.pyc,, | |||
sqlalchemy/event/api.py,sha256=zmVEc1OZ2IHUHxRk7QBIQj12NKkXA1_tedtPq1xWpu4,6994 | |||
sqlalchemy/event/attr.py,sha256=W_Yy6A5oChf1S1cafSm_lKflMjfxYtZbjEQNTDHU03Y,15092 | |||
sqlalchemy/event/base.py,sha256=uL2Vvau-A6b5W9IREO2_jfSz78aP_QH8cjglIbaTBNY,11280 | |||
sqlalchemy/event/legacy.py,sha256=spFIf45jAL4hi4ah9_ttIbj0hzpgq5bJlv4lpoA7eRs,6454 | |||
sqlalchemy/event/registry.py,sha256=p1ixAawLN7Lssif73SjTsPKHNU6fhTJOwrVtCrSfifE,8567 | |||
sqlalchemy/events.py,sha256=08BdPP_ASWqos10aJ_grM8qKKsjKFIupUIwqt3kaH-c,480 | |||
sqlalchemy/exc.py,sha256=EzLFC6lCWPchAYYfGFLWCXkNhqxtH7n_FovNx9qgmG8,20959 | |||
sqlalchemy/ext/__init__.py,sha256=FFnko4I2iMY2OaeAIJdsu200D68cAfubuqC_2Eeg8BM,332 | |||
sqlalchemy/ext/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/associationproxy.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/automap.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/baked.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/compiler.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/horizontal_shard.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/hybrid.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/indexable.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/instrumentation.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/mutable.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/orderinglist.cpython-39.pyc,, | |||
sqlalchemy/ext/__pycache__/serializer.cpython-39.pyc,, | |||
sqlalchemy/ext/associationproxy.py,sha256=QoEz-UR5j43ZnqNl13gZp-cMpdBS7ldv1Wtay-EkTNo,51568 | |||
sqlalchemy/ext/asyncio/__init__.py,sha256=D_PoNbVNTdnK6h7keS-ppBSFcjXFs9WhmyuOyvx9EBU,798 | |||
sqlalchemy/ext/asyncio/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/engine.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/exc.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/result.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/scoping.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/__pycache__/session.cpython-39.pyc,, | |||
sqlalchemy/ext/asyncio/base.py,sha256=DQjKnvQPq6d_WwCbks3NSRVt9mcU2u8xojaV3E60Zno,2291 | |||
sqlalchemy/ext/asyncio/engine.py,sha256=g1rq30UYH54G9LnXX8xxtmNbtaHgzsGQM-EF8gDCNgY,23751 | |||
sqlalchemy/ext/asyncio/events.py,sha256=mXQgkDLsnS6qkQeB_GV-i6VhtmNAve85B-jIGs7cRyg,1270 | |||
sqlalchemy/ext/asyncio/exc.py,sha256=0gqT7n-U-p7rLbkzAQKfzQ6_jBZxHweK-2mXFWVYvec,659 | |||
sqlalchemy/ext/asyncio/result.py,sha256=aYLMEM5TNsmyAWG4659wyperZrDttKUlToxqo_eOHkE,20531 | |||
sqlalchemy/ext/asyncio/scoping.py,sha256=WaTlSFO_J7RNPF7pKVgVZs84D6MmDMZThrFVlyk9P0g,2947 | |||
sqlalchemy/ext/asyncio/session.py,sha256=6G4_B-gnbIyMlSaoBNQN_KpUasIwVVGa0lATEpwt0fY,15392 | |||
sqlalchemy/ext/automap.py,sha256=s0hAWEawAv94ETxRhXqvAwrKUc3bGBX1PEFEcVv2wbU,46422 | |||
sqlalchemy/ext/baked.py,sha256=Yc9t2UY5c8Fu4v_yDWInPFZBeLi657uwXVpGr8g8dwo,20616 | |||
sqlalchemy/ext/compiler.py,sha256=Xfq_ONWDQ_mhHNSHH_AY5eIhDF4OEQwqc5018l9fQxU,18496 | |||
sqlalchemy/ext/declarative/__init__.py,sha256=4lGjX9yq22BJ3K7ZGvFF_46oWoYStN9pkIKypXNavNQ,1905 | |||
sqlalchemy/ext/declarative/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/ext/declarative/__pycache__/extensions.cpython-39.pyc,, | |||
sqlalchemy/ext/declarative/extensions.py,sha256=hwtcP7O8i9le8Lhg_nVH1lDnRxE0psG-oRoq2Kov-kU,16866 | |||
sqlalchemy/ext/horizontal_shard.py,sha256=qREdIj09TeY5axbuWsFfrfCZuk9zgjDzcqREd-DxoAo,8990 | |||
sqlalchemy/ext/hybrid.py,sha256=MKlGMqD2-7uyYZx05Zq3znS0pCpToyTN-ScQRNE4uek,43102 | |||
sqlalchemy/ext/indexable.py,sha256=7GhAsHMFk_q4YiCAbMU0J9_jbQeJa73E-iVzDNB9DNU,11606 | |||
sqlalchemy/ext/instrumentation.py,sha256=kx2zn8mN30F-CbWqiBxb7HgnMSJChLcvQhJ8Tb8VIXo,14802 | |||
sqlalchemy/ext/mutable.py,sha256=cuiyl1bgu6DSCMMCZcQIHObul1BLUh-jSTXGtZUgwm4,32947 | |||
sqlalchemy/ext/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
sqlalchemy/ext/mypy/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/apply.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/decl_class.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/infer.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/names.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/plugin.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/__pycache__/util.cpython-39.pyc,, | |||
sqlalchemy/ext/mypy/apply.py,sha256=AWjlXxc1ZSEKs-KpJfPZ60gGDOzdinls2cc6keW3pxI,9296 | |||
sqlalchemy/ext/mypy/decl_class.py,sha256=LUzP227RsiT_Em2wQas-mLdrRxg0Mzqn7bXQcw8hiMY,17040 | |||
sqlalchemy/ext/mypy/infer.py,sha256=r9Ceg7FiaUL1HGQCvZRK7RHmGrkmCvFVba_TWLLPwGo,17690 | |||
sqlalchemy/ext/mypy/names.py,sha256=Z8tpYE8i6xGBkuRXpme7Yd58wryMILd_TAAWHKy0OFQ,7902 | |||
sqlalchemy/ext/mypy/plugin.py,sha256=bjxzxej4w80N315Md3Y_gJECXqaYhN3RwN1jwfNLoNs,9955 | |||
sqlalchemy/ext/mypy/util.py,sha256=U5IzfJart5sqq2eM9zhFQQHxoA4w9XJXQmWSImVX_ak,6236 | |||
sqlalchemy/ext/orderinglist.py,sha256=sa2PZ06PH8Cs6Zwcgzog3vUg6WjUbGxdGkGkoMCpJxc,14262 | |||
sqlalchemy/ext/serializer.py,sha256=rae10NTl3_fm9I_SrXflEioL8GNQnShlH7cUxfSUnds,6132 | |||
sqlalchemy/future/__init__.py,sha256=uXl3ElTaXdjRoOBshDEitc07u6IGLfCzLONWerWRF88,542 | |||
sqlalchemy/future/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/future/__pycache__/engine.cpython-39.pyc,, | |||
sqlalchemy/future/engine.py,sha256=2Qc97YYmaKSp0jyOF4X6S6efF4btcsuj3c0Wpu1PlNU,16993 | |||
sqlalchemy/future/orm/__init__.py,sha256=_g7j2aIWEydf4JHJuJDetdAVACyheROjqXmBkKb2OaQ,298 | |||
sqlalchemy/future/orm/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/inspection.py,sha256=vfF9qC0gJSRzn4JLu9CjNENzqCtDdzAIthoLxl8rW50,3143 | |||
sqlalchemy/log.py,sha256=MWkG0aStnbomwsE9wqkuQqwQiRyTykirq9_oY2032tg,6994 | |||
sqlalchemy/orm/__init__.py,sha256=-IMaSfF-yrtmMGrlFYkXjcA8iAnEAR6UkROHHAXYSpU,10769 | |||
sqlalchemy/orm/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/attributes.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/clsregistry.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/collections.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/context.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/decl_api.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/decl_base.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/dependency.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/descriptor_props.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/dynamic.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/evaluator.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/exc.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/identity.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/instrumentation.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/interfaces.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/loading.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/mapper.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/path_registry.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/persistence.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/properties.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/query.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/relationships.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/scoping.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/session.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/state.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/strategies.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/strategy_options.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/sync.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/unitofwork.cpython-39.pyc,, | |||
sqlalchemy/orm/__pycache__/util.cpython-39.pyc,, | |||
sqlalchemy/orm/attributes.py,sha256=wGWhtVsCdcev3nl_ucxsAIS7w_iV5_pAccf-iBxHmCM,77884 | |||
sqlalchemy/orm/base.py,sha256=JR1bHf9tmjd5Ucb_b4-Yx20p210hkeklUjYeA0ea_XY,15473 | |||
sqlalchemy/orm/clsregistry.py,sha256=T_cR_8J6_k8zBAtISYPnjWpKbMKQAbzREdPhBDzG6Z8,13731 | |||
sqlalchemy/orm/collections.py,sha256=WxqkreJpyfguYOZtbIqKgx01pdL3ihmNzNNprnUobl8,56416 | |||
sqlalchemy/orm/context.py,sha256=ujp5554a0aM-NI6tw99tw03M6DKbMPNRSO_YH74UxwM,106564 | |||
sqlalchemy/orm/decl_api.py,sha256=Lbj6w87SXY2q8dzoWFYgZbdStVZ0Ordnw9O6yXH6nuk,35949 | |||
sqlalchemy/orm/decl_base.py,sha256=BR85kxbPUf0CDzbiF-_tgfqMIafC0Esl-4B8OTzQcMk,43849 | |||
sqlalchemy/orm/dependency.py,sha256=HPQE5POiLq8yUPuFtQ-IrMS9jPw67Z1-05c7xuZbm4Y,48268 | |||
sqlalchemy/orm/descriptor_props.py,sha256=S0vw_wnNFB0p3lBM-0RRGcxvyzgGoDYXK4kb4xn_FUo,26701 | |||
sqlalchemy/orm/dynamic.py,sha256=INcHvTXxXb17gGW_3HbSuQ53VVUPRANexuUn79g-X0k,16306 | |||
sqlalchemy/orm/evaluator.py,sha256=ymKsLcqOwf7OZ98PZINfgp2WUlB-Hv1pAXuoAbWITHU,7092 | |||
sqlalchemy/orm/events.py,sha256=MCsdnTPUnhW4ORFAZDrBk4pvGZw6Lr1l8h2jJOLVKtY,113098 | |||
sqlalchemy/orm/exc.py,sha256=XQNh69fkGLyeZ3apPiTTRwSO6y_ULbVOBLUACOfWNFc,6735 | |||
sqlalchemy/orm/identity.py,sha256=9D0FTwPOsUQ21mTlOkzdMSoIKYPcyn1gvbxee6MqHyI,7040 | |||
sqlalchemy/orm/instrumentation.py,sha256=tE5A13NbKUfNvpOEaJuHFbh4BrrQ9JmqA14SKVXBNdA,20998 | |||
sqlalchemy/orm/interfaces.py,sha256=Fn0Q-aojEwBlFiad5moTR8OkAgYsHAVO1bIngxqRoGE,29347 | |||
sqlalchemy/orm/loading.py,sha256=WNkS0444FA49IzPEvoejbW9DZ6W-pmSz07yzHWfKFCk,50987 | |||
sqlalchemy/orm/mapper.py,sha256=Hxn0jmpxhgk_yOlHcUzUVP32nqKHIolcFYpaDh5JW34,139805 | |||
sqlalchemy/orm/path_registry.py,sha256=Qe86D6vzluH4rkfnmb3ZpHnTCt7eBri5PtyuhlcCbUQ,15588 | |||
sqlalchemy/orm/persistence.py,sha256=rhqAtyFKgJMin6hGFgTAdLgK2kpMowAfBiytkERurkg,81401 | |||
sqlalchemy/orm/properties.py,sha256=H0cSlyMOIDvaizxmCoWeKdQWiqImyQb5VLd9I4Sy3pc,15319 | |||
sqlalchemy/orm/query.py,sha256=gIAWefHFhHJqfuofCGb6RaJMVm-a-S7Sy1XRPVUk6q8,125217 | |||
sqlalchemy/orm/relationships.py,sha256=PHsSUNrlqjrz95pu36DhC10ZHx884nRiDlLXkJR6dls,146477 | |||
sqlalchemy/orm/scoping.py,sha256=GPFT5NinEnV49r0gidhRxdzc3LcFWx52VNFZqz-SGQs,6880 | |||
sqlalchemy/orm/session.py,sha256=vuX_VvIBp5Enx-a1h7lSSlSOlPiYd0m1ILy-lZjyGJ8,159850 | |||
sqlalchemy/orm/state.py,sha256=9jv6AlV8RwoEBkN6Mti3Z84C0hHSTBfHX4Hh8VZEyl8,34431 | |||
sqlalchemy/orm/strategies.py,sha256=Cr0PC-PG8X3_L2K3Ieu_EZMOofeZ8OePf-bA1J_1vxc,109896 | |||
sqlalchemy/orm/strategy_options.py,sha256=09iyh4ILS7yBxYK8IZWsFuYYWpnYdwALPyqyZY7se8g,63532 | |||
sqlalchemy/orm/sync.py,sha256=3WNF_rv2bvq-8w-Umo6WPPMpZR81CCC6lR0LVsdUyyQ,5990 | |||
sqlalchemy/orm/unitofwork.py,sha256=XZdTDFw3CHBZstRU1jWDtZ-op0h-Sh_UZUx7h8moQZc,27873 | |||
sqlalchemy/orm/util.py,sha256=DZAiAIKYeGtoa8IWS75W7Te4p2v2WvNy9YzFzzEdLFU,70601 | |||
sqlalchemy/pool/__init__.py,sha256=vPypHYNtKMNIc2Yrgw6qyVWHvvisQfIC0Gn3AhKi654,1658 | |||
sqlalchemy/pool/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/pool/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/pool/__pycache__/dbapi_proxy.cpython-39.pyc,, | |||
sqlalchemy/pool/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/pool/__pycache__/impl.cpython-39.pyc,, | |||
sqlalchemy/pool/base.py,sha256=BoVrinbry7_706Y6z5HuCUeTevH3tZF6d91JGQRaabY,36657 | |||
sqlalchemy/pool/dbapi_proxy.py,sha256=EECXJ-pyG1436lAs5H02gN3ByZIRd54yeVG6EInHmQU,4375 | |||
sqlalchemy/pool/events.py,sha256=e9pXO_HEZzsg-8V6jdtV-u6BjW4GCvdvSIJYeNYh8GU,8942 | |||
sqlalchemy/pool/impl.py,sha256=ebFDPqQEggH7W43Ld13wd2UV3geMkJEDD66EruvmF1k,16284 | |||
sqlalchemy/processors.py,sha256=S-h949YV8k_f3HMoV2ChfwZE5L-e1sDPYTko5M1Gj_o,5920 | |||
sqlalchemy/schema.py,sha256=ntWzaOocNzjjFTTGcH2W-OHElZYiAxLFcWUhxVQJ-oE,2471 | |||
sqlalchemy/sql/__init__.py,sha256=Ie0LsqfpzMNZN621dtp3LFeF0ySw-FJmMoLrqrL81Z8,4810 | |||
sqlalchemy/sql/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/annotation.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/base.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/coercions.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/compiler.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/crud.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/ddl.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/default_comparator.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/dml.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/elements.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/events.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/expression.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/functions.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/lambdas.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/naming.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/operators.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/roles.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/schema.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/selectable.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/sqltypes.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/traversals.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/type_api.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/util.cpython-39.pyc,, | |||
sqlalchemy/sql/__pycache__/visitors.cpython-39.pyc,, | |||
sqlalchemy/sql/annotation.py,sha256=EvDBXH-wt9RRqHNY-8hlXiXYJfl9antb8M3IvB91cqM,11592 | |||
sqlalchemy/sql/base.py,sha256=Aue1owXMTXOzO3WXF_QcMtlkBtEJCvRputH7WjbYQnY,56651 | |||
sqlalchemy/sql/coercions.py,sha256=PcuTab2Rs91JX3qZQixKjmmTT-oj_A-HIjbmdw_4CrA,33560 | |||
sqlalchemy/sql/compiler.py,sha256=BtiVfBp-T7V8FQEmG6EASPwaD_b8EtO9Nz2RcjuqeXg,176837 | |||
sqlalchemy/sql/crud.py,sha256=dkdesuCs9Lt5QanQg3vvVT8glavy-b5LK5ABYFm3Dfo,35833 | |||
sqlalchemy/sql/ddl.py,sha256=uvUIePaU1oObVGquGcEdrqebIQ8DLz6qstns1Ag5_R0,45336 | |||
sqlalchemy/sql/default_comparator.py,sha256=7iC7YGjoXyICcnxjovGA37T_smTSSnMlsf4RJGprF2U,11233 | |||
sqlalchemy/sql/dml.py,sha256=lDzS--PzSyEldp0zjjZMbNhUiGy9jjkH5AmefyrsZTg,52695 | |||
sqlalchemy/sql/elements.py,sha256=AdCKqNXv2zjCYH3i9HjwkON7LM8T0YiGn_LTpMBkK4Q,175679 | |||
sqlalchemy/sql/events.py,sha256=pQJPAeybf1jel2LMq59CU5cYe-_duV9pkUGbDxkSelc,13412 | |||
sqlalchemy/sql/expression.py,sha256=xA7Kg_G_oobzVANzXaXRC9Ms96U0g80UxgxH2GrPdmo,9105 | |||
sqlalchemy/sql/functions.py,sha256=l9RCbwROk-KtEpzTUsOI72xxO1saJtbNRWx502IEU0E,48502 | |||
sqlalchemy/sql/lambdas.py,sha256=kC56163Xqy_FPpZcMUQQ89rJuEN0cGeV6lMOzg2SAuY,44237 | |||
sqlalchemy/sql/naming.py,sha256=frPyvaq5BALvRCUcaH7s30e8lTZMoWEBHLkZILUIdi4,6995 | |||
sqlalchemy/sql/operators.py,sha256=MexbaWdAztb_Xd6dCLU3oFbe-imrWS96izD8iSVxsKw,49446 | |||
sqlalchemy/sql/roles.py,sha256=eiVyxFCACcmCnxf4z5dXxhIHgZLRuETY8xV1zd8fCYc,5625 | |||
sqlalchemy/sql/schema.py,sha256=aouTvkn9-Zs7gRPyRDklmidF-4K8RLqa0GRW_BHpugg,191714 | |||
sqlalchemy/sql/selectable.py,sha256=2YPclquuN66CXtuD9d9Dcf1EU1j3ww6h1yGmuT7jy9k,224427 | |||
sqlalchemy/sql/sqltypes.py,sha256=-0di1pjJubEtr7G5fbiRQoiMxFC4rF979N5EI9dqA3U,113934 | |||
sqlalchemy/sql/traversals.py,sha256=eTRuqYptAJ33ihgLPizlc_S5m9zvKqC3V2t2YYtE6Fo,50825 | |||
sqlalchemy/sql/type_api.py,sha256=ChLSlTQAeN2beCz7XQeoKkZfvYEBM4_-RlGJoMve-1I,59372 | |||
sqlalchemy/sql/util.py,sha256=UhOSuPJ4yGVN8Qal2tDvDMNMd9eOI05DGVUcACmZ8bo,35520 | |||
sqlalchemy/sql/visitors.py,sha256=-Yuc-yAKUZBf9XjJ6bvOP8Sy5Zv7mB-gdXKo9JOzHLQ,28063 | |||
sqlalchemy/testing/__init__.py,sha256=XCdyR7e5mC5m4fhcmPgjxAGsIe2Vgca7rygudyUryJY,2851 | |||
sqlalchemy/testing/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/assertions.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/assertsql.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/asyncio.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/config.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/engines.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/entities.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/exclusions.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/fixtures.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/mock.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/pickleable.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/profiling.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/provision.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/requirements.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/schema.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/util.cpython-39.pyc,, | |||
sqlalchemy/testing/__pycache__/warnings.cpython-39.pyc,, | |||
sqlalchemy/testing/assertions.py,sha256=s2UhwsBzCPa75W8UQRxlR3gfWm9WIfTksdG-zWPtOYg,24466 | |||
sqlalchemy/testing/assertsql.py,sha256=2UQGJYRLD4IgFzYm1IwdUDoeJgIDIIeJIcrOit-XGLE,14689 | |||
sqlalchemy/testing/asyncio.py,sha256=4qUnZPDR7omIo3FLoRWy6hBJbne1KbyMELbdIWEZddk,3800 | |||
sqlalchemy/testing/config.py,sha256=IxwIEAW7_1b88yUOX_wjivjuS9PvlCJVEpIScmtQh7Y,6751 | |||
sqlalchemy/testing/engines.py,sha256=TU32-pY1rHRiWR3zrXr6_sRXYMuh1CkF9AyoPCbNm8s,13098 | |||
sqlalchemy/testing/entities.py,sha256=BzhnwvfZ_NkNn4xtvFbLzPvQw2T9gEBNc7hMay2cG5s,3363 | |||
sqlalchemy/testing/exclusions.py,sha256=2X5m5QCLO0W0D6GmI7cw6BuMIclsBoMnnjaqAY2Hclc,13793 | |||
sqlalchemy/testing/fixtures.py,sha256=DyIAvYvavTI3Qs3oYtHT8TGqwFaFevEguc4gNApUGi0,25977 | |||
sqlalchemy/testing/mock.py,sha256=krEfc7Vz1EEjkPb1D07yRZXX1ehaCCT2uFoQiXz9EOM,925 | |||
sqlalchemy/testing/pickleable.py,sha256=5Dlu3OP7s5DKAI1c4XP6UCz_17MOJsM3E0zqQWesZFA,2847 | |||
sqlalchemy/testing/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
sqlalchemy/testing/plugin/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/testing/plugin/__pycache__/bootstrap.cpython-39.pyc,, | |||
sqlalchemy/testing/plugin/__pycache__/plugin_base.cpython-39.pyc,, | |||
sqlalchemy/testing/plugin/__pycache__/pytestplugin.cpython-39.pyc,, | |||
sqlalchemy/testing/plugin/__pycache__/reinvent_fixtures_py2k.cpython-39.pyc,, | |||
sqlalchemy/testing/plugin/bootstrap.py,sha256=0104b_dYFUT5WsZU-NL44wlMo1LrKByBtPQYaFt6CTQ,1738 | |||
sqlalchemy/testing/plugin/plugin_base.py,sha256=t0PKr1XE2GiH5zb6Z5lXV_abu3rZva6v8DLQglTTF00,22349 | |||
sqlalchemy/testing/plugin/pytestplugin.py,sha256=Tj-wscMJ9yuPsS74U1AiJ-4UTrxNT-ZI89qHAAcv0-Y,24973 | |||
sqlalchemy/testing/plugin/reinvent_fixtures_py2k.py,sha256=b9fWp5RXdePykrNviZPXaGDIjOEOfovchez2Ovr4IRQ,3400 | |||
sqlalchemy/testing/profiling.py,sha256=K4Kn3o4GMbdb-1YMu1E4tPkpuHxbnJIWEqypsv_nY2s,10900 | |||
sqlalchemy/testing/provision.py,sha256=J9PWi7i7Xmr-sALBrmK4OTXH9ur4rpFXKHhnhrjcQcs,12461 | |||
sqlalchemy/testing/requirements.py,sha256=-69hbEEuVSCVdNC3KiHJL2xC7fbSguoL66f_li1Nq50,42209 | |||
sqlalchemy/testing/schema.py,sha256=2MNf-qPPUqEtxtCfVjZpwaoOBZEToUOHfW-egM2Nov4,6761 | |||
sqlalchemy/testing/suite/__init__.py,sha256=u3lEc0j47s7Dad_2SVWOZ6EU2aOMRWqE_WrQ17HmBsA,489 | |||
sqlalchemy/testing/suite/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_cte.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_ddl.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_deprecations.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_dialect.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_insert.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_reflection.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_results.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_rowcount.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_select.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_sequence.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_types.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_unicode_ddl.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/__pycache__/test_update_delete.cpython-39.pyc,, | |||
sqlalchemy/testing/suite/test_cte.py,sha256=shi2WJZpzAzDCdkmzx0IDEu-URsLLBsdyFdzDqsfpyw,6387 | |||
sqlalchemy/testing/suite/test_ddl.py,sha256=BZuYkKaG_tNUkZcFLNd6o1qnfbzU0IYiedCw_NhOJBg,12143 | |||
sqlalchemy/testing/suite/test_deprecations.py,sha256=0LUmXIiK8hHUr6tY8cJJC7VErOj9YNGNN-c324k08Dw,5204 | |||
sqlalchemy/testing/suite/test_dialect.py,sha256=XpwZxIXlMVsZlP74khuPW2wZskinT0IOT9S6PM5PyE8,11256 | |||
sqlalchemy/testing/suite/test_insert.py,sha256=QlMovNeDU-GB5UvTEumce3LLK94PAduKlWe2TqCcLF4,11501 | |||
sqlalchemy/testing/suite/test_reflection.py,sha256=kZI4xcVR7_Ft_8kYYF58FjM7IIeuFzS0yXDj7lVfwbA,56815 | |||
sqlalchemy/testing/suite/test_results.py,sha256=qa_V37VKFRfi2xoI8d5bW9EzB_E_oPFhShBo9VPjCss,14396 | |||
sqlalchemy/testing/suite/test_rowcount.py,sha256=M6E-d4JuoVVfbBC-z59hB1accmoh4yARRJsD4yVFP60,4944 | |||
sqlalchemy/testing/suite/test_select.py,sha256=hZfNo0bTFQodHg2PB4_dqdnJ2mnXq3Fs_mdp17409uk,54167 | |||
sqlalchemy/testing/suite/test_sequence.py,sha256=2KBcs0FtoL3gk37IN2PnRZSnQwt7RKkShAbYQHFTBcw,8713 | |||
sqlalchemy/testing/suite/test_types.py,sha256=kiVqATGP79gKi3LNvjCFpWF2qFNCjvy8svv68peQU8E,45445 | |||
sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=T9Bkkj7Cm2mIQW5BQFU2NnJVnvBhZyEQXcuHRO3AhKc,6937 | |||
sqlalchemy/testing/suite/test_update_delete.py,sha256=q3AoCPMKhxYVUi4n7YBjf8v8nb9obXmUXqnFsVxpZLY,1646 | |||
sqlalchemy/testing/util.py,sha256=pF1e_qH8eH1LVN4xB0hgL3XNfsbb5A2iRvNG8c_IgVc,12960 | |||
sqlalchemy/testing/warnings.py,sha256=n7poYJsx6YspiD9RIp2QiYxWbnWG7OQMLkjrmWqn85g,6010 | |||
sqlalchemy/types.py,sha256=xd4i1Yi0zY9lb6jZuy70TOkdKwP_deLpB20IQ3nx_zw,2997 | |||
sqlalchemy/util/__init__.py,sha256=Eklvf318BEPscpatTBry6K7hQU9JfragXEX_clr-Fm0,6434 | |||
sqlalchemy/util/__pycache__/__init__.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/_collections.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/_concurrency_py3k.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/_preloaded.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/compat.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/concurrency.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/deprecations.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/langhelpers.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/queue.cpython-39.pyc,, | |||
sqlalchemy/util/__pycache__/topological.cpython-39.pyc,, | |||
sqlalchemy/util/_collections.py,sha256=vQ5XrglAq0tVxIQtay9WVuQSgnKJ-L_bF4bRflNgEew,30227 | |||
sqlalchemy/util/_concurrency_py3k.py,sha256=iE8ZnXzkIVXWIwR7In5bwIK1esv_vrlP2Nm2fhBose8,6728 | |||
sqlalchemy/util/_preloaded.py,sha256=B7sQrjHOamdgOWZ1EAFWPOvlXH59ose5KoOwFMkhFe0,2463 | |||
sqlalchemy/util/compat.py,sha256=S4vHlw295cr9gH4dmUYxCjKjCh9poB7e7-5hlF1Mwc8,18786 | |||
sqlalchemy/util/concurrency.py,sha256=tdD998NG1XOOC4m8Ml0mB2xuHzHy9UlVGMpNftMelbk,1826 | |||
sqlalchemy/util/deprecations.py,sha256=oz5oLKUYL7WOMq8WudNdr4olB9KJycR1B88FuyN_BFU,11894 | |||
sqlalchemy/util/langhelpers.py,sha256=5eFZacBOGQoWvnBjVU5ItoOgkWjz7Q05PSMi0vbLDSk,58174 | |||
sqlalchemy/util/queue.py,sha256=SoUrtd6cw5ncTUk2FN1-YEvetBHcZzo5Zbr2l-9VJGw,9583 | |||
sqlalchemy/util/topological.py,sha256=w9_UvLP0Gf8wsCjpBxNwspXdoll_7kqO-rYVb-I5AU8,2957 |
@@ -0,0 +1,5 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: false | |||
Tag: cp39-cp39-win_amd64 | |||
@@ -0,0 +1 @@ | |||
sqlalchemy |
@@ -0,0 +1 @@ | |||
pip |
@@ -0,0 +1,28 @@ | |||
Copyright 2007 Pallets | |||
Redistribution and use in source and binary forms, with or without | |||
modification, are permitted provided that the following conditions are | |||
met: | |||
1. Redistributions of source code must retain the above copyright | |||
notice, this list of conditions and the following disclaimer. | |||
2. Redistributions in binary form must reproduce the above copyright | |||
notice, this list of conditions and the following disclaimer in the | |||
documentation and/or other materials provided with the distribution. | |||
3. Neither the name of the copyright holder nor the names of its | |||
contributors may be used to endorse or promote products derived from | |||
this software without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | |||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@@ -0,0 +1,128 @@ | |||
Metadata-Version: 2.1 | |||
Name: Werkzeug | |||
Version: 2.0.1 | |||
Summary: The comprehensive WSGI web application library. | |||
Home-page: https://palletsprojects.com/p/werkzeug/ | |||
Author: Armin Ronacher | |||
Author-email: armin.ronacher@active-4.com | |||
Maintainer: Pallets | |||
Maintainer-email: contact@palletsprojects.com | |||
License: BSD-3-Clause | |||
Project-URL: Donate, https://palletsprojects.com/donate | |||
Project-URL: Documentation, https://werkzeug.palletsprojects.com/ | |||
Project-URL: Changes, https://werkzeug.palletsprojects.com/changes/ | |||
Project-URL: Source Code, https://github.com/pallets/werkzeug/ | |||
Project-URL: Issue Tracker, https://github.com/pallets/werkzeug/issues/ | |||
Project-URL: Twitter, https://twitter.com/PalletsTeam | |||
Project-URL: Chat, https://discord.gg/pallets | |||
Platform: UNKNOWN | |||
Classifier: Development Status :: 5 - Production/Stable | |||
Classifier: Environment :: Web Environment | |||
Classifier: Intended Audience :: Developers | |||
Classifier: License :: OSI Approved :: BSD License | |||
Classifier: Operating System :: OS Independent | |||
Classifier: Programming Language :: Python | |||
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content | |||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI | |||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application | |||
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware | |||
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks | |||
Requires-Python: >=3.6 | |||
Description-Content-Type: text/x-rst | |||
Requires-Dist: dataclasses ; python_version < "3.7" | |||
Provides-Extra: watchdog | |||
Requires-Dist: watchdog ; extra == 'watchdog' | |||
Werkzeug | |||
======== | |||
*werkzeug* German noun: "tool". Etymology: *werk* ("work"), *zeug* ("stuff") | |||
Werkzeug is a comprehensive `WSGI`_ web application library. It began as | |||
a simple collection of various utilities for WSGI applications and has | |||
become one of the most advanced WSGI utility libraries. | |||
It includes: | |||
- An interactive debugger that allows inspecting stack traces and | |||
source code in the browser with an interactive interpreter for any | |||
frame in the stack. | |||
- A full-featured request object with objects to interact with | |||
headers, query args, form data, files, and cookies. | |||
- A response object that can wrap other WSGI applications and handle | |||
streaming data. | |||
- A routing system for matching URLs to endpoints and generating URLs | |||
for endpoints, with an extensible system for capturing variables | |||
from URLs. | |||
- HTTP utilities to handle entity tags, cache control, dates, user | |||
agents, cookies, files, and more. | |||
- A threaded WSGI server for use while developing applications | |||
locally. | |||
- A test client for simulating HTTP requests during testing without | |||
requiring running a server. | |||
Werkzeug doesn't enforce any dependencies. It is up to the developer to | |||
choose a template engine, database adapter, and even how to handle | |||
requests. It can be used to build all sorts of end user applications | |||
such as blogs, wikis, or bulletin boards. | |||
`Flask`_ wraps Werkzeug, using it to handle the details of WSGI while | |||
providing more structure and patterns for defining powerful | |||
applications. | |||
.. _WSGI: https://wsgi.readthedocs.io/en/latest/ | |||
.. _Flask: https://www.palletsprojects.com/p/flask/ | |||
Installing | |||
---------- | |||
Install and update using `pip`_: | |||
.. code-block:: text | |||
pip install -U Werkzeug | |||
.. _pip: https://pip.pypa.io/en/stable/quickstart/ | |||
A Simple Example | |||
---------------- | |||
.. code-block:: python | |||
from werkzeug.wrappers import Request, Response | |||
@Request.application | |||
def application(request): | |||
return Response('Hello, World!') | |||
if __name__ == '__main__': | |||
from werkzeug.serving import run_simple | |||
run_simple('localhost', 4000, application) | |||
Donate | |||
------ | |||
The Pallets organization develops and supports Werkzeug and other | |||
popular packages. In order to grow the community of contributors and | |||
users, and allow the maintainers to devote more time to the projects, | |||
`please donate today`_. | |||
.. _please donate today: https://palletsprojects.com/donate | |||
Links | |||
----- | |||
- Documentation: https://werkzeug.palletsprojects.com/ | |||
- Changes: https://werkzeug.palletsprojects.com/changes/ | |||
- PyPI Releases: https://pypi.org/project/Werkzeug/ | |||
- Source Code: https://github.com/pallets/werkzeug/ | |||
- Issue Tracker: https://github.com/pallets/werkzeug/issues/ | |||
- Website: https://palletsprojects.com/p/werkzeug/ | |||
- Twitter: https://twitter.com/PalletsTeam | |||
- Chat: https://discord.gg/pallets | |||
@@ -0,0 +1,111 @@ | |||
Werkzeug-2.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 | |||
Werkzeug-2.0.1.dist-info/LICENSE.rst,sha256=O0nc7kEF6ze6wQ-vG-JgQI_oXSUrjp3y4JefweCUQ3s,1475 | |||
Werkzeug-2.0.1.dist-info/METADATA,sha256=8-W33EMnGqnCCi-d8Dv63IQQuyELRIsXhwOJNXbNgL0,4421 | |||
Werkzeug-2.0.1.dist-info/RECORD,, | |||
Werkzeug-2.0.1.dist-info/WHEEL,sha256=OqRkF0eY5GHssMorFjlbTIq072vpHpF60fIQA6lS9xA,92 | |||
Werkzeug-2.0.1.dist-info/top_level.txt,sha256=QRyj2VjwJoQkrwjwFIOlB8Xg3r9un0NtqVHQF-15xaw,9 | |||
werkzeug/__init__.py,sha256=_CCsfdeqNllFNRJx8cvqYrwBsQQQXJaMmnk2sAZnDng,188 | |||
werkzeug/__pycache__/__init__.cpython-39.pyc,, | |||
werkzeug/__pycache__/_internal.cpython-39.pyc,, | |||
werkzeug/__pycache__/_reloader.cpython-39.pyc,, | |||
werkzeug/__pycache__/datastructures.cpython-39.pyc,, | |||
werkzeug/__pycache__/exceptions.cpython-39.pyc,, | |||
werkzeug/__pycache__/filesystem.cpython-39.pyc,, | |||
werkzeug/__pycache__/formparser.cpython-39.pyc,, | |||
werkzeug/__pycache__/http.cpython-39.pyc,, | |||
werkzeug/__pycache__/local.cpython-39.pyc,, | |||
werkzeug/__pycache__/routing.cpython-39.pyc,, | |||
werkzeug/__pycache__/security.cpython-39.pyc,, | |||
werkzeug/__pycache__/serving.cpython-39.pyc,, | |||
werkzeug/__pycache__/test.cpython-39.pyc,, | |||
werkzeug/__pycache__/testapp.cpython-39.pyc,, | |||
werkzeug/__pycache__/urls.cpython-39.pyc,, | |||
werkzeug/__pycache__/user_agent.cpython-39.pyc,, | |||
werkzeug/__pycache__/useragents.cpython-39.pyc,, | |||
werkzeug/__pycache__/utils.cpython-39.pyc,, | |||
werkzeug/__pycache__/wsgi.cpython-39.pyc,, | |||
werkzeug/_internal.py,sha256=_QKkvdaG4pDFwK68c0EpPzYJGe9Y7toRAT1cBbC-CxU,18572 | |||
werkzeug/_reloader.py,sha256=B1hEfgsUOz2IginBQM5Zak_eaIF7gr3GS5-0x2OHvAE,13950 | |||
werkzeug/datastructures.py,sha256=KahVPSLOapbNbKh1ppr9K8_DgWJv1EGgA9DhTEGMHcg,97886 | |||
werkzeug/datastructures.pyi,sha256=5DTPF8P8Zvi458eK27Qcj7eNUlLM_AC0jBNkj6uQpds,33774 | |||
werkzeug/debug/__init__.py,sha256=CUFrPEYAaotHRkmjOieqd3EasXDii2JVC1HdmEzMwqM,17924 | |||
werkzeug/debug/__pycache__/__init__.cpython-39.pyc,, | |||
werkzeug/debug/__pycache__/console.cpython-39.pyc,, | |||
werkzeug/debug/__pycache__/repr.cpython-39.pyc,, | |||
werkzeug/debug/__pycache__/tbtools.cpython-39.pyc,, | |||
werkzeug/debug/console.py,sha256=E1nBMEvFkX673ShQjPtVY-byYatfX9MN-dBMjRI8a8E,5897 | |||
werkzeug/debug/repr.py,sha256=QCSHENKsChEZDCIApkVi_UNjhJ77v8BMXK1OfxO189M,9483 | |||
werkzeug/debug/shared/FONT_LICENSE,sha256=LwAVEI1oYnvXiNMT9SnCH_TaLCxCpeHziDrMg0gPkAI,4673 | |||
werkzeug/debug/shared/ICON_LICENSE.md,sha256=DhA6Y1gUl5Jwfg0NFN9Rj4VWITt8tUx0IvdGf0ux9-s,222 | |||
werkzeug/debug/shared/console.png,sha256=bxax6RXXlvOij_KeqvSNX0ojJf83YbnZ7my-3Gx9w2A,507 | |||
werkzeug/debug/shared/debugger.js,sha256=dYbUmFmb3YZb5YpWpYPOQArdrN7NPeY0ODawL7ihzDI,10524 | |||
werkzeug/debug/shared/less.png,sha256=-4-kNRaXJSONVLahrQKUxMwXGm9R4OnZ9SxDGpHlIR4,191 | |||
werkzeug/debug/shared/more.png,sha256=GngN7CioHQoV58rH6ojnkYi8c_qED2Aka5FO5UXrReY,200 | |||
werkzeug/debug/shared/source.png,sha256=RoGcBTE4CyCB85GBuDGTFlAnUqxwTBiIfDqW15EpnUQ,818 | |||
werkzeug/debug/shared/style.css,sha256=vyp1RnB227Fuw8LIyM5C-bBCBQN5hvZSCApY2oeJ9ik,6705 | |||
werkzeug/debug/shared/ubuntu.ttf,sha256=1eaHFyepmy4FyDvjLVzpITrGEBu_CZYY94jE0nED1c0,70220 | |||
werkzeug/debug/tbtools.py,sha256=TfReusPbM3yjm3xvOFkH45V7-5JnNqB9x1EQPnVC6Xo,19189 | |||
werkzeug/exceptions.py,sha256=CUwx0pBiNbk4f9cON17ekgKnmLi6HIVFjUmYZc2x0wM,28681 | |||
werkzeug/filesystem.py,sha256=JS2Dv2QF98WILxY4_thHl-WMcUcwluF_4igkDPaP1l4,1956 | |||
werkzeug/formparser.py,sha256=GIKfzuQ_khuBXnf3N7_LzOEruYwNc3m4bI02BgtT5jg,17385 | |||
werkzeug/http.py,sha256=oUCXFFMnkOQ-cHbUY_aiqitshcrSzNDq3fEMf1VI_yk,45141 | |||
werkzeug/local.py,sha256=WsR6H-2XOtPigpimjORbLsS3h9WI0lCdZjGI2LHDDxA,22733 | |||
werkzeug/middleware/__init__.py,sha256=qfqgdT5npwG9ses3-FXQJf3aB95JYP1zchetH_T3PUw,500 | |||
werkzeug/middleware/__pycache__/__init__.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/dispatcher.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/http_proxy.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/lint.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/profiler.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/proxy_fix.cpython-39.pyc,, | |||
werkzeug/middleware/__pycache__/shared_data.cpython-39.pyc,, | |||
werkzeug/middleware/dispatcher.py,sha256=Fh_w-KyWnTSYF-Lfv5dimQ7THSS7afPAZMmvc4zF1gg,2580 | |||
werkzeug/middleware/http_proxy.py,sha256=HE8VyhS7CR-E1O6_9b68huv8FLgGGR1DLYqkS3Xcp3Q,7558 | |||
werkzeug/middleware/lint.py,sha256=yMzMdm4xI2_N-Wv2j1yoaVI3ltHOYS6yZyA-wUv1sKw,13962 | |||
werkzeug/middleware/profiler.py,sha256=G2JieUMv4QPamtCY6ibIK7P-piPRdPybav7bm2MSFvs,4898 | |||
werkzeug/middleware/proxy_fix.py,sha256=uRgQ3dEvFV8JxUqajHYYYOPEeA_BFqaa51Yp8VW0uzA,6849 | |||
werkzeug/middleware/shared_data.py,sha256=eOCGr-i6BCexDfL7xdPRWMwPJPgp0NE2B416Gl67Q78,10959 | |||
werkzeug/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
werkzeug/routing.py,sha256=FDRtvCfaZSmXnQ0cUYxowb3P0y0dxlUlMSUmerY5sb0,84147 | |||
werkzeug/sansio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | |||
werkzeug/sansio/__pycache__/__init__.cpython-39.pyc,, | |||
werkzeug/sansio/__pycache__/multipart.cpython-39.pyc,, | |||
werkzeug/sansio/__pycache__/request.cpython-39.pyc,, | |||
werkzeug/sansio/__pycache__/response.cpython-39.pyc,, | |||
werkzeug/sansio/__pycache__/utils.cpython-39.pyc,, | |||
werkzeug/sansio/multipart.py,sha256=bJMCNC2f5xyAaylahNViJ0JqmV4ThLRbDVGVzKwcqrQ,8751 | |||
werkzeug/sansio/request.py,sha256=aA9rABkWiG4MhYMByanst2NXkEclsq8SIxhb0LQf0e0,20228 | |||
werkzeug/sansio/response.py,sha256=HSG6t-tyPZd3awzWqr7qL9IV4HYAvDgON1c0YPU2RXw,24117 | |||
werkzeug/sansio/utils.py,sha256=V5v-UUnX8pm4RehP9Tt_NiUSOJGJGUvKjlW0eOIQldM,4164 | |||
werkzeug/security.py,sha256=gPDRuCjkjWrcqj99tBMq8_nHFZLFQjgoW5Ga5XIw9jo,8158 | |||
werkzeug/serving.py,sha256=_RG2dCclOQcdjJ2NE8tzCRybGePlwcs8kTypiWRP2gY,38030 | |||
werkzeug/test.py,sha256=EJXJy-b_JriHrlfs5VNCkwbki8Kn_xUDkOYOCx_6Q7Q,48096 | |||
werkzeug/testapp.py,sha256=f48prWSGJhbSrvYb8e1fnAah4BkrLb0enHSdChgsjBY,9471 | |||
werkzeug/urls.py,sha256=3o_aUcr5Ou13XihSU6VvX6RHMhoWkKpXuCCia9SSAb8,41021 | |||
werkzeug/user_agent.py,sha256=WclZhpvgLurMF45hsioSbS75H1Zb4iMQGKN3_yZ2oKo,1420 | |||
werkzeug/useragents.py,sha256=G8tmv_6vxJaPrLQH3eODNgIYe0_V6KETROQlJI-WxDE,7264 | |||
werkzeug/utils.py,sha256=WrU-LbwemyGd8zBHBgQyLaIxing4QLEChiP0qnzr2sc,36771 | |||
werkzeug/wrappers/__init__.py,sha256=-s75nPbyXHzU_rwmLPDhoMuGbEUk0jZT_n0ZQAOFGf8,654 | |||
werkzeug/wrappers/__pycache__/__init__.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/accept.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/auth.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/base_request.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/base_response.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/common_descriptors.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/cors.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/etag.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/json.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/request.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/response.cpython-39.pyc,, | |||
werkzeug/wrappers/__pycache__/user_agent.cpython-39.pyc,, | |||
werkzeug/wrappers/accept.py,sha256=_oZtAQkahvsrPRkNj2fieg7_St9P0NFC3SgZbJKS6xU,429 | |||
werkzeug/wrappers/auth.py,sha256=rZPCzGxHk9R55PRkmS90kRywUVjjuMWzCGtH68qCq8U,856 | |||
werkzeug/wrappers/base_request.py,sha256=saz9RyNQkvI_XLPYVm29KijNHmD1YzgxDqa0qHTbgss,1174 | |||
werkzeug/wrappers/base_response.py,sha256=q_-TaYywT5G4zA-DWDRDJhJSat2_4O7gOPob6ye4_9A,1186 | |||
werkzeug/wrappers/common_descriptors.py,sha256=v_kWLH3mvCiSRVJ1FNw7nO3w2UJfzY57UKKB5J4zCvE,898 | |||
werkzeug/wrappers/cors.py,sha256=c5UndlZsZvYkbPrp6Gj5iSXxw_VOJDJHskO6-jRmNyQ,846 | |||
werkzeug/wrappers/etag.py,sha256=XHWQQs7Mdd1oWezgBIsl-bYe8ydKkRZVil2Qd01D0Mo,846 | |||
werkzeug/wrappers/json.py,sha256=HM1btPseGeXca0vnwQN_MvZl6h-qNsFY5YBKXKXFwus,410 | |||
werkzeug/wrappers/request.py,sha256=0zAkCUwJbUBzioGy2UKxE6XpuXPAZbEhhML4WErzeBo,24818 | |||
werkzeug/wrappers/response.py,sha256=95hXIysZTeNC0bqhvGB2fLBRKxedR_cgI5szZZWfyzw,35177 | |||
werkzeug/wrappers/user_agent.py,sha256=Wl1-A0-1r8o7cHIZQTB55O4Ged6LpCKENaQDlOY5pXA,435 | |||
werkzeug/wsgi.py,sha256=7psV3SHLtCzk1KSuGmIK5uP2QTDXyfCCDclyqCmIUO4,33715 |
@@ -0,0 +1,5 @@ | |||
Wheel-Version: 1.0 | |||
Generator: bdist_wheel (0.36.2) | |||
Root-Is-Purelib: true | |||
Tag: py3-none-any | |||
@@ -0,0 +1 @@ | |||
werkzeug |
@@ -0,0 +1,128 @@ | |||
import sys | |||
import os | |||
import re | |||
import importlib | |||
import warnings | |||
is_pypy = '__pypy__' in sys.builtin_module_names | |||
warnings.filterwarnings('ignore', | |||
r'.+ distutils\b.+ deprecated', | |||
DeprecationWarning) | |||
def warn_distutils_present(): | |||
if 'distutils' not in sys.modules: | |||
return | |||
if is_pypy and sys.version_info < (3, 7): | |||
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning | |||
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250 | |||
return | |||
warnings.warn( | |||
"Distutils was imported before Setuptools, but importing Setuptools " | |||
"also replaces the `distutils` module in `sys.modules`. This may lead " | |||
"to undesirable behaviors or errors. To avoid these issues, avoid " | |||
"using distutils directly, ensure that setuptools is installed in the " | |||
"traditional way (e.g. not an editable install), and/or make sure " | |||
"that setuptools is always imported before distutils.") | |||
def clear_distutils(): | |||
if 'distutils' not in sys.modules: | |||
return | |||
warnings.warn("Setuptools is replacing distutils.") | |||
mods = [name for name in sys.modules if re.match(r'distutils\b', name)] | |||
for name in mods: | |||
del sys.modules[name] | |||
def enabled(): | |||
""" | |||
Allow selection of distutils by environment variable. | |||
""" | |||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'stdlib') | |||
return which == 'local' | |||
def ensure_local_distutils(): | |||
clear_distutils() | |||
distutils = importlib.import_module('setuptools._distutils') | |||
distutils.__name__ = 'distutils' | |||
sys.modules['distutils'] = distutils | |||
# sanity check that submodules load as expected | |||
core = importlib.import_module('distutils.core') | |||
assert '_distutils' in core.__file__, core.__file__ | |||
def do_override(): | |||
""" | |||
Ensure that the local copy of distutils is preferred over stdlib. | |||
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401 | |||
for more motivation. | |||
""" | |||
if enabled(): | |||
warn_distutils_present() | |||
ensure_local_distutils() | |||
class DistutilsMetaFinder: | |||
def find_spec(self, fullname, path, target=None): | |||
if path is not None: | |||
return | |||
method_name = 'spec_for_{fullname}'.format(**locals()) | |||
method = getattr(self, method_name, lambda: None) | |||
return method() | |||
def spec_for_distutils(self): | |||
import importlib.abc | |||
import importlib.util | |||
class DistutilsLoader(importlib.abc.Loader): | |||
def create_module(self, spec): | |||
return importlib.import_module('setuptools._distutils') | |||
def exec_module(self, module): | |||
pass | |||
return importlib.util.spec_from_loader('distutils', DistutilsLoader()) | |||
def spec_for_pip(self): | |||
""" | |||
Ensure stdlib distutils when running under pip. | |||
See pypa/pip#8761 for rationale. | |||
""" | |||
if self.pip_imported_during_build(): | |||
return | |||
clear_distutils() | |||
self.spec_for_distutils = lambda: None | |||
@staticmethod | |||
def pip_imported_during_build(): | |||
""" | |||
Detect if pip is being imported in a build script. Ref #2355. | |||
""" | |||
import traceback | |||
return any( | |||
frame.f_globals['__file__'].endswith('setup.py') | |||
for frame, line in traceback.walk_stack(None) | |||
) | |||
DISTUTILS_FINDER = DistutilsMetaFinder() | |||
def add_shim(): | |||
sys.meta_path.insert(0, DISTUTILS_FINDER) | |||
def remove_shim(): | |||
try: | |||
sys.meta_path.remove(DISTUTILS_FINDER) | |||
except ValueError: | |||
pass |
@@ -0,0 +1 @@ | |||
__import__('_distutils_hack').do_override() |
@@ -0,0 +1,8 @@ | |||
__all__ = ["__version__"] | |||
try: | |||
from ._version import version as __version__ | |||
except ImportError: | |||
# broken installation, we don't even try | |||
# unknown only works because we do poor mans version compare | |||
__version__ = "unknown" |
@@ -0,0 +1,117 @@ | |||
"""Allow bash-completion for argparse with argcomplete if installed. | |||
Needs argcomplete>=0.5.6 for python 3.2/3.3 (older versions fail | |||
to find the magic string, so _ARGCOMPLETE env. var is never set, and | |||
this does not need special code). | |||
Function try_argcomplete(parser) should be called directly before | |||
the call to ArgumentParser.parse_args(). | |||
The filescompleter is what you normally would use on the positional | |||
arguments specification, in order to get "dirname/" after "dirn<TAB>" | |||
instead of the default "dirname ": | |||
optparser.add_argument(Config._file_or_dir, nargs='*').completer=filescompleter | |||
Other, application specific, completers should go in the file | |||
doing the add_argument calls as they need to be specified as .completer | |||
attributes as well. (If argcomplete is not installed, the function the | |||
attribute points to will not be used). | |||
SPEEDUP | |||
======= | |||
The generic argcomplete script for bash-completion | |||
(/etc/bash_completion.d/python-argcomplete.sh) | |||
uses a python program to determine startup script generated by pip. | |||
You can speed up completion somewhat by changing this script to include | |||
# PYTHON_ARGCOMPLETE_OK | |||
so the python-argcomplete-check-easy-install-script does not | |||
need to be called to find the entry point of the code and see if that is | |||
marked with PYTHON_ARGCOMPLETE_OK. | |||
INSTALL/DEBUGGING | |||
================= | |||
To include this support in another application that has setup.py generated | |||
scripts: | |||
- Add the line: | |||
# PYTHON_ARGCOMPLETE_OK | |||
near the top of the main python entry point. | |||
- Include in the file calling parse_args(): | |||
from _argcomplete import try_argcomplete, filescompleter | |||
Call try_argcomplete just before parse_args(), and optionally add | |||
filescompleter to the positional arguments' add_argument(). | |||
If things do not work right away: | |||
- Switch on argcomplete debugging with (also helpful when doing custom | |||
completers): | |||
export _ARC_DEBUG=1 | |||
- Run: | |||
python-argcomplete-check-easy-install-script $(which appname) | |||
echo $? | |||
will echo 0 if the magic line has been found, 1 if not. | |||
- Sometimes it helps to find early on errors using: | |||
_ARGCOMPLETE=1 _ARC_DEBUG=1 appname | |||
which should throw a KeyError: 'COMPLINE' (which is properly set by the | |||
global argcomplete script). | |||
""" | |||
import argparse | |||
import os | |||
import sys | |||
from glob import glob | |||
from typing import Any | |||
from typing import List | |||
from typing import Optional | |||
class FastFilesCompleter: | |||
"""Fast file completer class.""" | |||
def __init__(self, directories: bool = True) -> None: | |||
self.directories = directories | |||
def __call__(self, prefix: str, **kwargs: Any) -> List[str]: | |||
# Only called on non option completions. | |||
if os.path.sep in prefix[1:]: | |||
prefix_dir = len(os.path.dirname(prefix) + os.path.sep) | |||
else: | |||
prefix_dir = 0 | |||
completion = [] | |||
globbed = [] | |||
if "*" not in prefix and "?" not in prefix: | |||
# We are on unix, otherwise no bash. | |||
if not prefix or prefix[-1] == os.path.sep: | |||
globbed.extend(glob(prefix + ".*")) | |||
prefix += "*" | |||
globbed.extend(glob(prefix)) | |||
for x in sorted(globbed): | |||
if os.path.isdir(x): | |||
x += "/" | |||
# Append stripping the prefix (like bash, not like compgen). | |||
completion.append(x[prefix_dir:]) | |||
return completion | |||
if os.environ.get("_ARGCOMPLETE"): | |||
try: | |||
import argcomplete.completers | |||
except ImportError: | |||
sys.exit(-1) | |||
filescompleter: Optional[FastFilesCompleter] = FastFilesCompleter() | |||
def try_argcomplete(parser: argparse.ArgumentParser) -> None: | |||
argcomplete.autocomplete(parser, always_complete_options=False) | |||
else: | |||
def try_argcomplete(parser: argparse.ArgumentParser) -> None: | |||
pass | |||
filescompleter = None |
@@ -0,0 +1,22 @@ | |||
"""Python inspection/code generation API.""" | |||
from .code import Code | |||
from .code import ExceptionInfo | |||
from .code import filter_traceback | |||
from .code import Frame | |||
from .code import getfslineno | |||
from .code import Traceback | |||
from .code import TracebackEntry | |||
from .source import getrawcode | |||
from .source import Source | |||
__all__ = [ | |||
"Code", | |||
"ExceptionInfo", | |||
"filter_traceback", | |||
"Frame", | |||
"getfslineno", | |||
"getrawcode", | |||
"Traceback", | |||
"TracebackEntry", | |||
"Source", | |||
] |