ci(ingestion): fix airflow 1 deps for tox (#4083)

This commit is contained in:
Harshal Sheth 2022-02-17 03:33:28 -05:00 committed by GitHub
parent 6f37ddfee2
commit 75d2ec2a39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 120 additions and 733 deletions

View File

@ -0,0 +1,38 @@
#!/bin/bash
set -euo pipefail
HEADER=$(cat <<-EOF
#
# This file helps pip resolve dependencies for Airflow 1.x in a reasonable amount
# of time during testing. Without these constraints, pip will spend hours
# backtracking in an attempt to find a compatible list of versions.
# See https://pip.pypa.io/en/latest/topics/dependency-resolution/#backtracking
# for some explanation of backtracing with the new behavior in pip 20.3+.
#
EOF
)
# Setup a clean virtualenv and install dev deps.
../gradlew clean installDev
# Save a copy of the pip environment.
pip freeze > requirements-dev.txt
# Install Airflow 1.10.15. This will automatically uninstall all incompatible dependencies versions
# and replace them with compatible ones. One minor snag: we need to manually remove the Airflow
# 2.x providers that were split into separate packages, since pip won't remove those automatically.
pip uninstall -y apache-airflow-providers-http apache-airflow-providers-snowflake
pip install -e '.[dev-airflow1-base]'
# Save another copy of the pip environment.
pip freeze > requirements-dev-airflow1.txt
# Add updated dependencies to the constraints file.
# This gets all lines in dev-airflow1.txt that are not in dev.txt.
comm -23 requirements-dev-airflow1.txt requirements-dev.txt > airflow1-constraints-data.txt
# Add a timestamp and comment header to the top of the file.
(echo "# Generated by scripts/airflow1-constraints.sh on $(date)." && echo "$HEADER" && cat airflow1-constraints-data.txt) > tests/airflow1-constraints.txt
# Cleanup.
mv requirements-dev.txt requirements-dev-airflow1.txt airflow1-constraints-data.txt /tmp

View File

@ -243,19 +243,23 @@ dev_requirements = {
"apache-airflow[snowflake]>=2.0.2", # snowflake is used in example dags
"snowflake-sqlalchemy<=1.2.4", # make constraint consistent with extras
}
dev_requirements_airflow_1 = {
*base_dev_requirements,
dev_requirements_airflow_1_base = {
"apache-airflow==1.10.15",
"apache-airflow-backport-providers-snowflake",
"snowflake-sqlalchemy<=1.2.4", # make constraint consistent with extras
"WTForms==2.3.3", # make constraint consistent with extras
}
dev_requirements_airflow_1 = {
*base_dev_requirements,
*dev_requirements_airflow_1_base,
}
full_test_dev_requirements = {
*list(
dependency
for plugin in [
"athena",
# Only include Athena for Python 3.7 or newer.
*(["athena"] if is_py37_or_newer else []),
"druid",
"feast",
"hive",
@ -397,6 +401,7 @@ setuptools.setup(
)
),
"dev": list(dev_requirements),
"dev-airflow1-base": list(dev_requirements_airflow_1_base),
"dev-airflow1": list(dev_requirements_airflow_1),
"integration-tests": list(full_test_dev_requirements),
},

View File

@ -114,12 +114,21 @@ class DatahubRestEmitter:
if retry_max_times:
self._retry_max_times = retry_max_times
retry_strategy = Retry(
total=self._retry_max_times,
status_forcelist=self._retry_status_codes,
backoff_factor=2,
allowed_methods=self._retry_methods,
)
try:
retry_strategy = Retry(
total=self._retry_max_times,
status_forcelist=self._retry_status_codes,
backoff_factor=2,
allowed_methods=self._retry_methods,
)
except TypeError:
# Prior to urllib3 1.26, the Retry class used `method_whitelist` instead of `allowed_methods`.
retry_strategy = Retry(
total=self._retry_max_times,
status_forcelist=self._retry_status_codes,
backoff_factor=2,
method_whitelist=self._retry_methods,
)
adapter = HTTPAdapter(
pool_connections=100, pool_maxsize=100, max_retries=retry_strategy

View File

@ -0,0 +1,49 @@
# Generated by scripts/airflow1-constraints.sh on Fri Feb 11 13:16:30 EST 2022.
#
# This file helps pip resolve dependencies for Airflow 1.x in a reasonable amount
# of time during testing. Without these constraints, pip will spend hours
# backtracking in an attempt to find a compatible list of versions.
# See https://pip.pypa.io/en/latest/topics/dependency-resolution/#backtracking
# for some explanation of backtracing with the new behavior in pip 20.3+.
#
apache-airflow==1.10.15
apache-airflow-backport-providers-snowflake==2021.3.13
apache-airflow-providers-ftp==2.0.1
apache-airflow-providers-imap==2.1.0
apache-airflow-providers-sqlite==2.0.1
apispec==1.3.3
cached-property==1.5.2
chardet==3.0.4
click==7.1.2
click-default-group==1.2.2
colorlog==4.0.2
configparser==3.5.3
croniter==0.3.37
Flask-Admin==1.5.4
Flask-AppBuilder==2.3.4
Flask-Babel==1.0.0
Flask-Caching==1.3.3
flask-swagger==0.2.14
Flask-WTF==0.14.3
funcsigs==1.0.2
idna==2.10
importlib-resources==1.5.0
Jinja2==2.11.3
json-merge-patch==0.2
lazy-object-proxy==1.4.3
Markdown==2.6.11
marshmallow==2.21.0
marshmallow-enum==1.5.1
marshmallow-oneofschema==3.0.1
marshmallow-sqlalchemy==0.23.1
natsort==8.1.0
pendulum==1.4.4
requests==2.23.0
requests-mock==1.9.3
requests-toolbelt==0.9.1
SQLAlchemy-JSONField==0.9.0
tenacity==4.12.0
tzlocal==1.5.1
urllib3==1.25.11
Werkzeug==0.16.1
zope.deprecation==4.4.0

View File

@ -4,12 +4,12 @@
# and then run "tox" from this directory.
[tox]
envlist = py3-quick,{py36,py39}-full,py3-airflow1
envlist = py3-quick,py3-full,py3-airflow1
[gh-actions]
python =
3.6: py36-full
3.9: py39-full
3.6: py3-full, py3-airflow1
3.9: py3-full, py3-airflow1
# Providing optional features that add dependencies from setup.py as deps here
# allows tox to recreate testenv when new dependencies are added to setup.py.
@ -19,14 +19,11 @@ python =
[testenv]
deps =
-rtox_requirements/dev_requirements.txt
.[dev]
commands =
pytest --cov={envsitepackagesdir}/datahub --cov={envsitepackagesdir}/datahub_provider \
py3-quick: -m 'not integration and not slow_integration' --junit-xml=junit.quick.xml \
py36-full: --cov-fail-under 68 --junit-xml=junit.full.xml \
--continue-on-collection-errors \
-vv \
py39-full: --cov-fail-under 70 --junit-xml=junit.full.xml \
py3-quick,py3-airflow1: -m 'not integration and not slow_integration' --junit-xml=junit.quick.xml \
py3-full: --cov-fail-under 65 --junit-xml=junit.full.xml \
--continue-on-collection-errors \
-vv
@ -36,11 +33,9 @@ setenv =
[testenv:py3-airflow1]
deps =
.[dev-airflow1]
-c tests/airflow1-constraints.txt
[testenv:py39-full]
[testenv:py3-full]
deps =
-rtox_requirements/py39-full_requirements.txt
[testenv:py36-full]
deps =
-rtox_requirements/py36-full_requirements.txt
.[dev]
.[integration-tests]

View File

@ -1,75 +0,0 @@
#
# This file is autogenerated by pip-compile with python 3.9
# To update, run:
#
# pip-compile
#
avro==1.10.2
# via
# acryl-datahub (setup.py)
# avro-gen3
avro-gen3==0.7.1
# via acryl-datahub (setup.py)
certifi==2021.10.8
# via requests
charset-normalizer==2.0.11
# via requests
click==8.0.3
# via
# acryl-datahub (setup.py)
# click-default-group
click-default-group==1.2.2
# via acryl-datahub (setup.py)
docker==5.0.3
# via acryl-datahub (setup.py)
entrypoints==0.4
# via acryl-datahub (setup.py)
expandvars==0.7.0
# via acryl-datahub (setup.py)
idna==3.3
# via requests
mypy-extensions==0.4.3
# via
# acryl-datahub (setup.py)
# typing-inspect
progressbar2==4.0.0
# via acryl-datahub (setup.py)
pydantic==1.9.0
# via acryl-datahub (setup.py)
python-dateutil==2.8.2
# via acryl-datahub (setup.py)
python-utils==3.1.0
# via progressbar2
pytz==2021.3
# via avro-gen3
pytz-deprecation-shim==0.1.0.post0
# via tzlocal
pyyaml==6.0
# via acryl-datahub (setup.py)
requests==2.27.1
# via docker
six==1.16.0
# via
# avro-gen3
# python-dateutil
stackprinter==0.2.5
# via acryl-datahub (setup.py)
tabulate==0.8.9
# via acryl-datahub (setup.py)
toml==0.10.2
# via acryl-datahub (setup.py)
typing-extensions==3.10.0.2
# via
# acryl-datahub (setup.py)
# pydantic
# typing-inspect
typing-inspect==0.7.1
# via acryl-datahub (setup.py)
tzdata==2021.5
# via pytz-deprecation-shim
tzlocal==4.1
# via avro-gen3
urllib3==1.26.8
# via requests
websocket-client==1.2.3
# via docker

View File

@ -1,319 +0,0 @@
acryl-PyHive==0.6.11
aenum==3.1.8
aiohttp==3.8.1
aiosignal==1.2.0
alembic==1.7.6
altair==4.1.0
anyio==3.5.0
apache-airflow==2.2.3
apache-airflow-providers-ftp==2.0.1
apache-airflow-providers-http==2.0.2
apache-airflow-providers-imap==2.1.0
apache-airflow-providers-snowflake==2.4.0
apache-airflow-providers-sqlite==2.0.1
apispec==3.3.2
appnope==0.1.2
argcomplete==1.12.3
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
asn1crypto==1.4.0
async-generator==1.10
async-timeout==4.0.2
asynctest==0.13.0
attrs==20.3.0
avro==1.10.2
avro-gen3==0.7.1
Babel==2.9.1
backcall==0.2.0
backports.zoneinfo==0.2.1
bcrypt==3.2.0
black==22.1.0
bleach==4.1.0
blinker==1.4
boto3==1.20.48
boto3-stubs==1.20.48
botocore==1.23.48
botocore-stubs==1.23.48
build==0.7.0
cached-property==1.5.2
cachetools==4.2.4
cattrs==1.0.0
certifi==2021.10.8
cffi==1.15.0
charset-normalizer==2.0.11
click==8.0.3
click-default-group==1.2.2
clickclick==20.10.2
colorama==0.4.4
colorlog==5.0.1
commonmark==0.9.1
confluent-kafka==1.8.2
contextvars==2.4
coverage==6.2
croniter==1.0.15
cryptography==3.4.8
cx-Oracle==8.3.0
dataclasses==0.8
decorator==4.4.2
deepdiff==5.7.0
defusedxml==0.7.1
dill==0.3.4
distlib==0.3.4
distro==1.6.0
dnspython==2.2.0
docker==5.0.3
docker-compose==1.29.2
dockerpty==0.4.1
docopt==0.6.2
docutils==0.16
ecdsa==0.17.0
elasticsearch==7.17.0
email-validator==1.1.3
entrypoints==0.4
expandvars==0.7.0
fastavro==1.4.7
filelock==3.4.1
flake8==4.0.1
flake8-tidy-imports==4.5.0
Flask==1.1.2
Flask-AppBuilder==3.4.4
Flask-Babel==2.0.0
Flask-Caching==1.10.1
Flask-Cors==3.0.10
Flask-JWT-Extended==3.25.1
Flask-Login==0.4.1
Flask-OpenID==1.3.0
Flask-SQLAlchemy==2.5.1
Flask-WTF==0.14.3
flatdict==4.0.1
freezegun==1.1.0
frozenlist==1.2.0
future==0.18.2
GeoAlchemy2==0.10.2
google-api-core==2.5.0
google-auth==2.6.0
google-cloud-appengine-logging==1.1.0
google-cloud-audit-log==0.2.0
google-cloud-bigquery==2.32.0
google-cloud-core==2.2.2
google-cloud-logging==3.0.0
google-crc32c==1.3.0
google-resumable-media==2.1.0
googleapis-common-protos==1.54.0
graphviz==0.19.1
great-expectations==0.14.5
greenlet==1.1.2
grpc-google-iam-v1==0.12.3
grpcio==1.43.0
grpcio-status==1.43.0
gunicorn==20.1.0
h11==0.12.0
httpcore==0.13.7
httpx==0.19.0
idna==3.3
idna-ssl==1.1.0
immutables==0.16
importlib-metadata==4.2.0
importlib-resources==5.4.0
inflection==0.5.1
iniconfig==1.1.1
ipykernel==5.5.6
ipython==7.16.3
ipython-genutils==0.2.0
ipywidgets==7.6.5
iso8601==1.0.2
isodate==0.6.1
isort==5.10.1
itsdangerous==1.1.0
jedi==0.17.2
Jinja2==3.0.3
jmespath==0.10.0
JPype1==1.3.0
jsonpatch==1.32
jsonpickle==2.1.0
jsonpointer==2.2
jsonschema==3.2.0
jupyter-client==7.1.2
jupyter-core==4.9.1
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.2
keyring==23.4.1
lazy-object-proxy==1.7.1
lockfile==0.12.2
looker-sdk==21.6.0
Mako==1.1.6
Markdown==3.3.4
MarkupSafe==2.0.1
marshmallow==3.14.1
marshmallow-enum==1.5.1
marshmallow-oneofschema==3.0.1
marshmallow-sqlalchemy==0.26.1
mccabe==0.6.1
mistune==0.8.4
more-itertools==8.12.0
multidict==5.2.0
mypy==0.910
mypy-boto3-glue==1.20.47
mypy-boto3-s3==1.20.46.post1
mypy-boto3-sagemaker==1.20.46.post1
mypy-extensions==0.4.3
nbclient==0.5.9
nbconvert==6.0.7
nbformat==5.1.3
nest-asyncio==1.5.4
networkx==2.5.1
notebook==6.4.8
numpy==1.19.5
okta==1.7.0
openapi-schema-validator==0.1.6
openapi-spec-validator==0.3.3
ordered-set==4.0.2
oscrypto==1.2.1
packaging==21.3
pandas==1.1.5
pandocfilters==1.5.0
paramiko==2.9.2
parse==1.19.0
parso==0.7.1
pathspec==0.9.0
pendulum==2.1.2
pep517==0.12.0
pep562==1.1
pexpect==4.8.0
pickleshare==0.7.5
pkginfo==1.8.2
platformdirs==2.4.0
pluggy==1.0.0
prison==0.2.1
progressbar2==3.55.0
prometheus-client==0.13.1
prompt-toolkit==3.0.26
proto-plus==1.19.9
protobuf==3.19.4
psutil==5.9.0
psycopg2-binary==2.9.3
ptyprocess==0.7.0
pure-sasl==0.6.2
py==1.11.0
py4j==0.10.9
pyasn1==0.4.8
pyasn1-modules==0.2.8
pybigquery==0.10.2
pycodestyle==2.8.0
pycparser==2.21
pycryptodome==3.14.0
pycryptodomex==3.14.0
pydantic==1.9.0
pydash==5.1.0
pydeequ==1.0.1
pydot==1.4.2
pydruid==0.6.2
pyflakes==2.4.0
Pygments==2.11.2
PyJWT==1.7.1
pymongo==4.0.1
PyMySQL==1.0.2
PyNaCl==1.5.0
pyOpenSSL==20.0.1
pyparsing==2.4.7
pyrsistent==0.16.1
pyspark==3.0.3
pytest==6.2.5
pytest-asyncio==0.16.0
pytest-cov==3.0.0
pytest-docker==0.10.3
python-daemon==2.3.0
python-dateutil==2.8.2
python-dotenv==0.19.2
python-jose==3.3.0
python-ldap==3.4.0
python-nvd3==0.15.0
python-slugify==4.0.1
python-tds==1.11.0
python-utils==3.1.0
python3-openid==3.2.0
pytz==2021.3
pytz-deprecation-shim==0.1.0.post0
pytzdata==2020.1
PyYAML==5.4.1
pyzmq==22.3.0
readme-renderer==32.0
redash-toolbelt==0.1.9
requests==2.27.1
requests-mock==1.9.3
requests-toolbelt==0.9.1
rfc3986==1.5.0
rich==11.1.0
rsa==4.8
ruamel.yaml==0.17.17
ruamel.yaml.clib==0.2.6
s3transfer==0.5.1
sasl3==0.2.11
scipy==1.5.4
Send2Trash==1.8.0
setproctitle==1.2.2
six==1.16.0
sniffio==1.2.0
snowflake-connector-python==2.7.1
snowflake-sqlalchemy==1.2.4
sql-metadata==2.3.0
SQLAlchemy==1.3.24
SQLAlchemy-JSONField==1.0.0
sqlalchemy-pytds==0.3.4
sqlalchemy-redshift==0.8.9
sqlalchemy-stubs==0.4
SQLAlchemy-Utils==0.38.2
sqllineage==1.3.3
sqlparse==0.4.2
stackprinter==0.2.5
swagger-ui-bundle==0.0.9
tabulate==0.8.9
tenacity==8.0.1
termcolor==1.1.0
terminado==0.12.1
testpath==0.5.0
text-unidecode==1.3
texttable==1.6.4
thrift==0.15.0
thrift-sasl==0.4.3
toml==0.10.2
tomli==1.2.3
toolz==0.11.2
tornado==6.1
tox==3.24.5
tqdm==4.62.3
traitlets==4.3.3
trino==0.309.0
twine==3.8.0
typed-ast==1.4.3
types-cachetools==4.2.9
types-click==0.1.12
types-dataclasses==0.6.4
types-freezegun==1.1.6
types-pkg-resources==0.1.3
types-PyMySQL==1.0.13
types-python-dateutil==2.8.9
types-PyYAML==6.0.4
types-requests==2.27.8
types-six==1.16.10
types-tabulate==0.8.5
types-toml==0.10.3
types-urllib3==1.26.9
typing==3.7.4.3
typing-extensions==3.10.0.2
typing-inspect==0.7.1
tzdata==2021.5
tzlocal==4.1
unicodecsv==0.14.1
urllib3==1.26.8
virtualenv==20.13.0
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==0.59.0
Werkzeug==1.0.1
widgetsnbextension==3.5.2
WTForms==2.3.3
xmltodict==0.12.0
yarl==1.7.2
zipp==3.6.0
tableauserverclient==0.17.0

View File

@ -1,315 +0,0 @@
acryl-PyHive==0.6.11
aenum==3.1.8
aiohttp==3.8.1
aiosignal==1.2.0
alembic==1.7.5
altair==4.2.0
anyio==3.5.0
apache-airflow==2.2.3
apache-airflow-providers-ftp==2.0.1
apache-airflow-providers-http==2.0.2
apache-airflow-providers-imap==2.1.0
apache-airflow-providers-snowflake==2.4.0
apache-airflow-providers-sqlite==2.0.1
apispec==3.3.2
appnope==0.1.2
argcomplete==1.12.3
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
asn1crypto==1.4.0
asttokens==2.0.5
async-timeout==4.0.2
attrs==20.3.0
avro==1.10.2
avro-gen3==0.7.1
Babel==2.9.1
backcall==0.2.0
bcrypt==3.2.0
black==22.1.0
bleach==4.1.0
blinker==1.4
boto3==1.20.46
boto3-stubs==1.20.46.post1
botocore==1.23.46
botocore-stubs==1.23.46.post1
build==0.7.0
cachetools==5.0.0
cattrs==1.1.2
certifi==2021.10.8
cffi==1.15.0
charset-normalizer==2.0.11
click==8.0.3
click-default-group==1.2.2
clickclick==20.10.2
colorama==0.4.4
colorlog==5.0.1
commonmark==0.9.1
confluent-kafka==1.8.2
coverage==6.3
croniter==1.0.15
cryptography==3.4.8
cx-Oracle==8.3.0
debugpy==1.5.1
decorator==5.1.1
deepdiff==5.7.0
defusedxml==0.7.1
dill==0.3.4
distlib==0.3.4
distro==1.6.0
dnspython==2.2.0
docker==5.0.3
docker-compose==1.29.2
dockerpty==0.4.1
docopt==0.6.2
docutils==0.16
ecdsa==0.17.0
elasticsearch==7.16.3
email-validator==1.1.3
entrypoints==0.3
executing==0.8.2
expandvars==0.7.0
fastavro==1.4.9
filelock==3.4.2
flake8==4.0.1
flake8-tidy-imports==4.6.0
Flask==1.1.2
Flask-AppBuilder==3.4.4
Flask-Babel==2.0.0
Flask-Caching==1.10.1
Flask-Cors==3.0.10
Flask-JWT-Extended==3.25.1
Flask-Login==0.4.1
Flask-OpenID==1.3.0
Flask-SQLAlchemy==2.5.1
Flask-WTF==0.14.3
flatdict==4.0.1
freezegun==1.1.0
frozenlist==1.3.0
future==0.18.2
GeoAlchemy2==0.10.2
google-api-core==2.4.0
google-auth==2.6.0
google-cloud-appengine-logging==1.1.0
google-cloud-audit-log==0.2.0
google-cloud-bigquery==2.32.0
google-cloud-core==2.2.2
google-cloud-logging==2.7.0
google-crc32c==1.3.0
google-resumable-media==2.1.0
googleapis-common-protos==1.54.0
graphviz==0.19.1
great-expectations==0.14.4
greenlet==1.1.2
grpc-google-iam-v1==0.12.3
grpcio==1.43.0
grpcio-status==1.43.0
gunicorn==20.1.0
h11==0.12.0
httpcore==0.13.7
httpx==0.19.0
idna==3.3
importlib-metadata==4.10.1
inflection==0.5.1
iniconfig==1.1.1
ipykernel==6.7.0
ipython==8.0.1
ipython-genutils==0.2.0
ipywidgets==7.6.5
iso8601==1.0.2
isort==5.10.1
itsdangerous==1.1.0
jedi==0.18.1
Jinja2==3.0.3
jmespath==0.10.0
JPype1==1.3.0
jsonpatch==1.32
jsonpickle==2.1.0
jsonpointer==2.2
jsonschema==3.2.0
jupyter-client==7.1.2
jupyter-core==4.9.1
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.2
keyring==23.5.0
lazy-object-proxy==1.7.1
lkml==1.1.2
lockfile==0.12.2
looker-sdk==21.6.0
Mako==1.1.6
Markdown==3.3.6
MarkupSafe==2.0.1
marshmallow==3.14.1
marshmallow-enum==1.5.1
marshmallow-oneofschema==3.0.1
marshmallow-sqlalchemy==0.26.1
matplotlib-inline==0.1.3
mccabe==0.6.1
mistune==0.8.4
more-itertools==8.12.0
multidict==6.0.2
mypy==0.910
mypy-boto3-glue==1.20.46.post1
mypy-boto3-s3==1.20.46.post1
mypy-boto3-sagemaker==1.20.46.post1
mypy-extensions==0.4.3
nbclient==0.5.10
nbconvert==6.4.1
nbformat==5.1.3
nest-asyncio==1.5.4
networkx==2.6.3
notebook==6.4.8
numpy==1.22.1
okta==1.7.0
openapi-schema-validator==0.2.3
openapi-spec-validator==0.4.0
ordered-set==4.0.2
oscrypto==1.2.1
packaging==21.3
pandas==1.4.0
pandocfilters==1.5.0
paramiko==2.9.2
parse==1.19.0
parso==0.8.3
pathspec==0.9.0
pendulum==2.1.2
pep517==0.12.0
pexpect==4.8.0
pickleshare==0.7.5
pip-tools==6.4.0
pkginfo==1.8.2
platformdirs==2.4.1
pluggy==1.0.0
prison==0.2.1
progressbar2==4.0.0
prometheus-client==0.13.1
prompt-toolkit==3.0.26
proto-plus==1.19.9
protobuf==3.19.4
psutil==5.9.0
psycopg2-binary==2.9.3
ptyprocess==0.7.0
pure-eval==0.2.2
pure-sasl==0.6.2
py==1.11.0
py4j==0.10.9
pyasn1==0.4.8
pyasn1-modules==0.2.8
PyAthena[SQLAlchemy]==2.4.1
pybigquery==0.10.2
pycodestyle==2.8.0
pycparser==2.21
pycryptodome==3.14.0
pycryptodomex==3.14.0
pydantic==1.9.0
pydash==5.1.0
pydeequ==1.0.1
pydot==1.4.2
pydruid==0.6.2
pyflakes==2.4.0
Pygments==2.11.2
PyJWT==1.7.1
pymongo==4.0.1
PyMySQL==1.0.2
PyNaCl==1.5.0
pyOpenSSL==20.0.1
pyparsing==2.4.7
pyrsistent==0.18.1
pyspark==3.0.3
pytest==6.2.5
pytest-asyncio==0.16.0
pytest-cov==3.0.0
pytest-docker==0.10.3
python-daemon==2.3.0
python-dateutil==2.8.2
python-dotenv==0.19.2
python-jose==3.3.0
python-ldap==3.4.0
python-nvd3==0.15.0
python-slugify==4.0.1
python-tds==1.11.0
python-utils==3.1.0
python3-openid==3.2.0
pytz==2021.3
pytz-deprecation-shim==0.1.0.post0
pytzdata==2020.1
PyYAML==5.4.1
pyzmq==22.3.0
readme-renderer==32.0
redash-toolbelt==0.1.9
requests==2.27.1
requests-mock==1.9.3
requests-toolbelt==0.9.1
rfc3986==1.5.0
rich==11.1.0
rsa==4.8
ruamel.yaml==0.17.17
ruamel.yaml.clib==0.2.6
s3transfer==0.5.0
sasl3==0.2.11
scipy==1.7.3
Send2Trash==1.8.0
setproctitle==1.2.2
six==1.16.0
sniffio==1.2.0
snowflake-connector-python==2.7.1
snowflake-sqlalchemy==1.2.4
sql-metadata==2.2.2
SQLAlchemy==1.3.24
SQLAlchemy-JSONField==1.0.0
sqlalchemy-pytds==0.3.4
sqlalchemy-redshift==0.8.9
sqlalchemy-stubs==0.4
SQLAlchemy-Utils==0.38.2
sqllineage==1.3.3
sqlparse==0.4.2
stack-data==0.1.4
stackprinter==0.2.5
swagger-ui-bundle==0.0.9
tabulate==0.8.9
tenacity==8.0.1
termcolor==1.1.0
terminado==0.13.1
testpath==0.5.0
text-unidecode==1.3
texttable==1.6.4
thrift==0.15.0
thrift-sasl==0.4.3
toml==0.10.2
tomli==2.0.0
toolz==0.11.2
tornado==6.1
tox==3.24.5
tqdm==4.62.3
traitlets==5.1.1
trino==0.309.0
twine==3.7.1
types-cachetools==4.2.9
types-click==0.1.12
types-dataclasses==0.6.4
types-freezegun==1.1.6
types-pkg-resources==0.1.3
types-PyMySQL==1.0.13
types-python-dateutil==2.8.9
types-PyYAML==6.0.4
types-requests==2.27.8
types-six==1.16.10
types-tabulate==0.8.5
types-toml==0.10.3
types-urllib3==1.26.8
typing-extensions==3.10.0.2
typing-inspect==0.7.1
tzdata==2021.5
tzlocal==4.1
unicodecsv==0.14.1
urllib3==1.26.8
virtualenv==20.13.0
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==0.59.0
Werkzeug==1.0.1
widgetsnbextension==3.5.2
WTForms==2.3.3
xmltodict==0.12.0
yarl==1.7.2
zipp==3.7.0
tableauserverclient==0.17.0