Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: script that discovers minimum tested versions #9418

Closed
wants to merge 11 commits into from
188 changes: 188 additions & 0 deletions min_compatible_versions.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
This file was generated by scripts/min_compatible_versions.py
pkg_name,min_version
Flask-Cache,0.13.1
Jinja2,2.11.0
SQLAlchemy,2.0.22
WebTest,0
Werkzeug,1.0
ai21,0
aiobotocore,1.4.2
aiofiles,0
aiohttp,3.7
aiohttp_jinja2,1.5.0
aiomysql,0.1.0
aiopg,0.16.0
aiosqlite,0
algoliasearch,2.5
anyio,3.4.0
aredis,0
asgiref,3.0.0
astunparse,0
async_generator,1.10
asyncpg,0.22.0
asynctest,0.13.0
attrs,20
austin-python,1.0
blinker,0
boto3,0
botocore,1.13
bottle,0.12
bytecode,0
emmettbutler marked this conversation as resolved.
Show resolved Hide resolved
cassandra-driver,3.24.0
cattrs,23.1.1
celery,4.4
cfn-lint,0.53.1
channels,3.0
cherrypy,17
click,7.1.2
cohere,0
confluent-kafka,1.9.2
coverage,0
cryptography,39
daphne,0
databases,0
datadog-lambda,4.66.0
ddsketch,3.0.0
django,2.2
django-pylibmc,0.6
django-q,0
django-redis,4.5
django_hosts,4.0
djangorestframework,3.11
docker,0
dogpile.cache,0.9
dramatiq,0
elasticsearch,7.13.0
elasticsearch1,1.10.0
elasticsearch2,2.5.0
elasticsearch5,5.5.0
elasticsearch6,6.8.0
elasticsearch7,7.13.0
elasticsearch7[async],0
elasticsearch8,8.0.1
elasticsearch[async],0
envier,0.5.1
exceptiongroup,0
falcon,3.0.0
fastapi,0.64.0
flask,0.12.0
flask-caching,1.10.0
flask-login,0.6.2
gevent,20.12.0
git+https://github.com/gnufede/pytest-memray.git@24a3c0735db99eedf57fb36c573680f9bab7cd73,0
emmettbutler marked this conversation as resolved.
Show resolved Hide resolved
googleapis-common-protos,0
graphene,3.0.0
graphql-core,3.2.0
graphql-relay,0
greenlet,1.0.0
grpcio,1.34.0
gunicorn,20.0.4
gunicorn[gevent],0
httpretty,1.1
httpx,0.17.0
huggingface-hub,0
hypothesis,6.45.1
importlib-metadata,0
importlib_metadata,5.0
itsdangerous,2.0
jinja2,2.11.0
kombu,4.2.0
langchain,0.0.192
langchain-community,0.0.14
langchain-core,0.1.27
langchain-openai,0.0.8
langchain-pinecone,0.0.3
langchain_experimental,0.0.47
langsmith,0.1.9
logbook,1.0.0
loguru,0.4.0
mako,1.1.0
mariadb,1.0.0
markupsafe,2.0
mock,0
molten,1.0
mongoengine,0.23
more_itertools,8.11.0
moto,1.0
moto[all],5.0
msgpack,1.0.0
mysql-connector-python,8.0.5
mysqlclient,2.0
numexpr,0
openai,0.26.5
openai[datalib],1.30.1
"openai[embeddings,datalib]",0.27.2
opensearch-py,0
opensearch-py[async],0
opensearch-py[requests],1.1.0
opentelemetry-api,1.0.0
opentelemetry-instrumentation-flask,0.37b0
opentracing,2.0.0
peewee,0
pillow,0
pinecone-client,2.2.4
pony,0
protobuf,3
psutil,0
psycopg,3.0.18
psycopg2-binary,2.8.0
py-cpuinfo,8.0.0
pycryptodome,0
pyfakefs,0
pylibmc,1.6.2
pymemcache,3.4.2
pymongo,3.11
pymysql,0.10
pynamodb,5.0
pyodbc,4.0.31
pyramid,1.10
pysqlite3-binary,0
pytest,4.0
pytest-aiohttp,0
pytest-asyncio,0.21.1
pytest-bdd,4.0
pytest-benchmark,3.1.0
pytest-cov,2.9.0
pytest-django,3.10.0
pytest-mock,2.0.0
pytest-randomly,0
pytest-sanic,1.6.2
python-consul,1.1
python-json-logger,2.0.7
python-memcached,0
redis,2.0
redis-py-cluster,2.0
reno,0
requests,2.20.0
requests-mock,1.4
responses,0.16.0
rich,0
rq,1.8.0
ruamel.yaml,0
sanic,20.12
sanic-testing,0.8.3
scikit-learn,1.0.2
setuptools,67.6.0
simplejson,0
six,1.12.0
snowflake-connector-python,2.3.0
sqlalchemy,1.2.18
starlette,0.14.0
structlog,20.2.0
tests/contrib/pyramid/pserve_app,0
tiktoken,0
tornado,4.5.0
tortoise-orm,0
typing-extensions,0
typing_extensions,0
urllib3,1.0
uwsgi,0
vcrpy,4.2.1
vertica-python,0.6.0
websockets,11.0
webtest,0
werkzeug,1.0
emmettbutler marked this conversation as resolved.
Show resolved Hide resolved
wheel,0
xmltodict,0.12
yaaredis,2.0.0
yarl,1.0
59 changes: 59 additions & 0 deletions scripts/min_compatible_versions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import csv
import pathlib
import sys
from typing import Dict
from typing import Set

from packaging.version import parse as parse_version


sys.path.append(str(pathlib.Path(__file__).parent.parent.resolve()))
import riotfile # noqa:E402


OUT_FILENAME = "min_compatible_versions.csv"


def _format_version_specifiers(spec: Set[str]) -> Set[str]:
return set([part.strip("~<>==") for v in [v.split(",") for v in spec if v] for part in v if "!=" not in part])
emmettbutler marked this conversation as resolved.
Show resolved Hide resolved


def tree_pkgs_from_riot() -> Dict[str, Set[str]]:

return _tree_pkgs_from_riot(riotfile.venv)


def _tree_pkgs_from_riot(node: riotfile.Venv) -> Dict[str, Set]:
result = {pkg: _format_version_specifiers(set(versions)) for pkg, versions in node.pkgs.items()}
for child_venv in node.venvs:
child_pkgs = _tree_pkgs_from_riot(child_venv)
for pkg_name, versions in child_pkgs.items():
if pkg_name in result:
result[pkg_name] = result[pkg_name].union(versions)
else:
result[pkg_name] = versions
return result


def write_out(all_pkgs: Dict[str, Set[str]]) -> None:
with open(OUT_FILENAME, "w") as csvfile:
csv_writer = csv.writer(csvfile, delimiter=",")
csv_writer.writerow(["This file was generated by scripts/min_compatible_versions.py"])
csv_writer.writerow(["pkg_name", "min_version"])
for pkg, versions in sorted(all_pkgs.items()):
min_version = "0"
if versions:
min_version = str(min((parse_version(v) for v in versions))).strip()
print("%s\n\tTested versions: %s\n\tMinimum: %s" % (pkg, sorted(list(versions)), min_version))
csv_writer.writerow([pkg, min_version])


def main():
"""Discover the minimum version of every package referenced in the riotfile

Writes to stdout and min_versions.csv
"""
write_out(tree_pkgs_from_riot())


main()
Loading