mirror of https://github.com/astral-sh/uv
261 lines
6.0 KiB
TOML
261 lines
6.0 KiB
TOML
[project]
|
|
name = "warehouse"
|
|
version = "1.0.0"
|
|
requires-python = "==3.11.*"
|
|
dependencies = [
|
|
"alembic>=0.7.0",
|
|
"alembic-postgresql-enum",
|
|
"Automat",
|
|
"argon2-cffi",
|
|
"b2sdk",
|
|
"Babel",
|
|
"bcrypt",
|
|
"boto3",
|
|
"celery[sqs]>=5.2.2,<5.3.2",
|
|
"celery-redbeat",
|
|
"certifi",
|
|
"click",
|
|
"cryptography",
|
|
"datadog>=0.19.0",
|
|
"disposable-email-domains",
|
|
"elasticsearch>=7.0.0,<7.11.0",
|
|
"elasticsearch_dsl>=7.0.0,<8.0.0",
|
|
"first",
|
|
"forcediphttpsadapter",
|
|
"github-reserved-names>=1.0.0",
|
|
"google-cloud-bigquery",
|
|
"google-cloud-storage",
|
|
"hiredis",
|
|
"html5lib",
|
|
"humanize",
|
|
"itsdangerous",
|
|
"Jinja2>=2.8",
|
|
"kombu[sqs]<5.3.2", # https://github.com/jazzband/pip-tools/issues/1577
|
|
"limits",
|
|
"linehaul",
|
|
"lxml",
|
|
"mistune",
|
|
"msgpack",
|
|
"natsort",
|
|
"orjson",
|
|
"packaging>=23.2",
|
|
"packaging_legacy",
|
|
"paginate>=0.5.2",
|
|
"paginate_sqlalchemy",
|
|
"passlib>=1.6.4",
|
|
"premailer",
|
|
"psycopg[c]",
|
|
"pycurl",
|
|
"pydantic",
|
|
"pyqrcode",
|
|
"pyramid>=2.0",
|
|
"pymacaroons",
|
|
"pyramid_jinja2>=2.5",
|
|
"pyramid_mailer>=0.14.1",
|
|
"pyramid_openapi3>=0.17.1",
|
|
"pyramid_retry>=0.3",
|
|
"pyramid_rpc>=0.7",
|
|
"pyramid_services>=2.1",
|
|
"pyramid_tm>=0.12",
|
|
"python-slugify",
|
|
"pytz",
|
|
"PyJWT[crypto]>=2.8.0",
|
|
"readme-renderer[md]>=36.0",
|
|
"requests",
|
|
"requests-aws4auth",
|
|
"redis>=2.8.0,<6.0.0",
|
|
"rfc3986",
|
|
"sentry-sdk",
|
|
"setuptools",
|
|
"sqlalchemy[asyncio]>=2.0,<3.0",
|
|
"stdlib-list",
|
|
"stripe",
|
|
"structlog",
|
|
"transaction",
|
|
"trove-classifiers",
|
|
"ua-parser",
|
|
"urllib3<2", # See https://github.com/pypi/warehouse/issues/14671,
|
|
"webauthn>=1.0.0,<3.0.0",
|
|
"whitenoise",
|
|
"WTForms[email]>=2.0.0",
|
|
"zope.sqlalchemy",
|
|
"zxcvbn",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
deploy = [
|
|
"gunicorn==22.0.0",
|
|
"ddtrace==2.8.5"
|
|
]
|
|
|
|
[tool.uv]
|
|
dev-dependencies = [
|
|
"Sphinx",
|
|
"asyncudp>=0.7",
|
|
"black==24.4.2",
|
|
"cairosvg",
|
|
"celery-types",
|
|
"coverage",
|
|
"curlylint",
|
|
"doc8>=1.1.0",
|
|
"factory_boy",
|
|
"flake8",
|
|
"freezegun",
|
|
"furo",
|
|
"hupper>=1.9",
|
|
"isort>=5.13.1",
|
|
"mkdocs",
|
|
"mkdocs-macros-plugin",
|
|
"mkdocs-material",
|
|
"mkdocs-rss-plugin",
|
|
"msgpack-types",
|
|
"mypy",
|
|
"mypy-zope",
|
|
"myst-parser",
|
|
"pep8-naming",
|
|
"pillow",
|
|
"pip-api",
|
|
"pip-tools>=1.0",
|
|
"pretend",
|
|
"pyramid_debugtoolbar>=2.5",
|
|
"pytest-icdiff",
|
|
"pytest-postgresql>=3.1.3,<7.0.0",
|
|
"pytest-randomly",
|
|
"pytest-socket",
|
|
"pytest>=3.0.0",
|
|
"pytz",
|
|
"pyupgrade",
|
|
"repository-service-tuf",
|
|
"responses>=0.5.1",
|
|
"sphinx-autobuild",
|
|
"sphinxcontrib-httpdomain",
|
|
"sphinxcontrib-mermaid",
|
|
"types-WTForms",
|
|
"types-WebOb",
|
|
"types-babel",
|
|
"types-boto3",
|
|
"types-certifi",
|
|
"types-first",
|
|
"types-html5lib",
|
|
"types-itsdangerous",
|
|
"types-passlib",
|
|
"types-python-slugify",
|
|
"types-pytz",
|
|
"types-redis",
|
|
"types-requests==2.31.0.6", # See https://github.com/pypi/warehouse/issues/14671
|
|
"types-setuptools",
|
|
"types-stripe",
|
|
"types-zxcvbn",
|
|
"webtest",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
# Avoid a dependency on `pg_config`
|
|
[[tool.uv.dependency-metadata]]
|
|
name = "psycopg-c"
|
|
version = "3.2.1"
|
|
requires-dist = []
|
|
|
|
[tool.coverage.run]
|
|
branch = true
|
|
dynamic_context = "test_function"
|
|
source = ["warehouse"]
|
|
omit = [
|
|
# We don't want to get coverage information for our migrations.
|
|
"warehouse/migrations/*",
|
|
# We don't want to actually cover our __main__.py file because it is hard
|
|
# to cover and it really just acts as a tiny shim to a function.
|
|
"warehouse/__main__.py",
|
|
# Again, tiny shim code that we don't actually need to test and trying to
|
|
# do so would just get in the way.
|
|
"warehouse/wsgi.py",
|
|
# And again, tiny shim code.
|
|
"warehouse/celery.py",
|
|
]
|
|
|
|
[tool.coverage.report]
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"class \\w+\\(Interface\\):",
|
|
"if (typing\\.)?TYPE_CHECKING:",
|
|
]
|
|
|
|
# Don't show us anything that's already 100% covered.
|
|
skip_covered = true
|
|
|
|
[tool.curlylint]
|
|
include = '\.(html|jinja|txt)$'
|
|
# For jinja's i18n extension:
|
|
template_tags = [['trans', 'pluralize', 'endtrans']]
|
|
|
|
[tool.isort]
|
|
profile = 'black'
|
|
lines_between_types = 1
|
|
combine_as_imports = true
|
|
known_first_party = ['warehouse', 'tests']
|
|
|
|
[tool.mypy]
|
|
python_version = "3.11"
|
|
warn_unused_configs = true
|
|
warn_unused_ignores = true
|
|
plugins = ["mypy_zope:plugin"]
|
|
exclude = ["warehouse/locale/.*", "warehouse/migrations/versions.*"]
|
|
cache_dir = "dev/.mypy_cache"
|
|
|
|
[[tool.mypy.overrides]]
|
|
# These modules do not yet have types available.
|
|
module = [
|
|
"alembic_postgresql_enum.*",
|
|
"automat.*",
|
|
"bpython.*", # https://github.com/bpython/bpython/issues/892
|
|
"b2sdk.*", # https://github.com/Backblaze/b2-sdk-python/issues/148
|
|
"celery.app.backends.*",
|
|
"celery.backends.redis.*",
|
|
"elasticsearch_dsl.*", # https://github.com/elastic/elasticsearch-dsl-py/issues/1533
|
|
"github_reserved_names.*",
|
|
"google.cloud.*",
|
|
"forcediphttpsadapter.*",
|
|
"IPython.*", # has types, but only installed in dev
|
|
"linehaul.*",
|
|
"packaging_legacy.*",
|
|
"paginate.*",
|
|
"paginate_sqlalchemy.*",
|
|
"premailer.*",
|
|
"pymacaroons.*", # https://github.com/ecordell/pymacaroons/issues/41
|
|
"pyramid.*", # https://github.com/Pylons/pyramid/issues/2638
|
|
"pyramid_jinja2.*",
|
|
"pyramid_mailer.*",
|
|
"pyramid_retry.*",
|
|
"pyramid_rpc.*",
|
|
"pyqrcode.*",
|
|
"requests_aws4auth.*", # https://github.com/tedder/requests-aws4auth/issues/53
|
|
"rfc3986.*",
|
|
"transaction.*",
|
|
"ua_parser.*", # https://github.com/ua-parser/uap-python/issues/110
|
|
"venusian.*",
|
|
"whitenoise.*",
|
|
"zope.sqlalchemy.*",
|
|
]
|
|
ignore_missing_imports = true
|
|
|
|
[tool.pytest.ini_options]
|
|
addopts = [
|
|
"--disable-socket",
|
|
"--allow-hosts=localhost,::1,notdatadog,stripe",
|
|
"--durations=20",
|
|
]
|
|
cache_dir = "dev/.pytest_cache"
|
|
norecursedirs = ['build', 'dist', 'node_modules', '*.egg-info', '.state requirements']
|
|
markers = [
|
|
'unit: Quick running unit tests which test small units of functionality.',
|
|
'functional: Slower running tests which test the entire system is functioning.',
|
|
]
|
|
filterwarnings = [
|
|
'ignore::warehouse.admin.services.InsecureStorageWarning',
|
|
'ignore::warehouse.utils.exceptions.InsecureOIDCPublisherWarning',
|
|
'ignore::warehouse.packaging.services.InsecureStorageWarning',
|
|
]
|