[project]
name = "ows-royalties"
version = "1.0.0"
description = "ows-royalties"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
    "abacus-common-data~=0.8.2",
    "abacus-common-logic~=5.13",
    "annotated-types~=0.7.0",
    "anyio~=4.10.0",
    "backoff~=2.2.1",
    "blinker~=1.9.0",
    "bloom-filter2~=2.0.0",
    "boto3~=1.40.22",
    "botocore~=1.40.22",
    "bytecode~=0.16.2",
    "cachelib~=0.13.0",
    "certifi~=2025.8.3",
    "charset-normalizer~=3.4.3",
    "click~=8.2.1",
    "confluent-kafka~=2.11.1",
    "datadog>=0.52.2",
    "ddtrace~=3.15.0",
    "Deprecated~=1.2.18",
    "docopt~=0.6.2",
    "envier~=0.6.1",
    "Flask~=3.1.3",
    "flask-compress==1.24",
    "flask-limiter==4.1.1",
    "flask-marshmallow~=1.2.1",
    "Flask-SQLAlchemy~=3.0.5",
    "future~=1.0.0",
    "greenlet~=3.1.1",
    "h11~=0.16.0",
    "httpcore~=1.0.9",
    "httpx~=0.27.2",
    "idna~=3.10",
    "importlib_metadata~=8.7.0",
    "itsdangerous~=2.2.0",
    "Jinja2~=3.1.6",
    "jmespath~=1.0.1",
    "jwtauth~=0.2.0",
    "limits>=5.8.0",
    "MarkupSafe~=2.1.5",
    "marshmallow~=3.26.1",
    "marshmallow-sqlalchemy~=1.0.0",
    "mmh3cffi~=0.2.1",
    "opentelemetry-api~=1.36.0",
    "owsclient~=0.7.0",
    "owslogger~=4.3.0",
    "owsrequest~=2.10.0",
    "owsresponse~=3.0.4",
    "packaging~=25.0",
    "protobuf~=6.33",
    "pycparser~=2.22",
    "pydantic~=2.11.7",
    "pydantic_core~=2.33.2",
    "PyMySQL~=1.1.2",
    "python-common-apispec~=0.2.0",
    "python-dateutil~=2.9.0.post0",
    "python-dotenv~=1.2.2",
    "python-json-logger~=3.3.0",
    "python-pdp-sdk~=5.3.0",
    "pythonfeatures~=5.0.0",
    "pytz~=2025.2",
    "PyYAML~=6.0.2",
    "redis>=8.0.1",
    "requests~=2.33.0",
    "requests-futures~=1.0.2",
    "respx~=0.21.1",
    "retrying~=1.4.2",
    "s3transfer~=0.14.0",
    "secrets_manager~=1.4.6",
    "sentry-sdk~=2.39.0",
    "setuptools~=80.9.0",
    "six~=1.17.0",
    "sniffio~=1.3.1",
    "splitio_client~=10.5.0",
    "SQLAlchemy~=1.4.54",
    "typing-extensions~=4.15.0",
    "typing-inspection~=0.4.1",
    "urllib3~=2.7.0",
    "uwsgi~=2.0.30",
    "Werkzeug~=3.1.3",
    "wheel~=0.47",
    "wrapt~=1.17.3",
    "xmltodict~=1.0.2",
    "zipp~=3.23.0",
]

[dependency-groups]
dev = [
    "factory-boy~=3.3.3",
    "flasgger~=0.9.7.1",
    "freezegun~=1.5.5",
    "ipdb~=0.13.13",
    "ipython~=9.5.0",
    "moto~=5.1.1",
    "mypy>=2.1.0",
    "pytest~=9.0.3",
    "pytest-cov~=7.1.0",
    "pytest-jira~=0.3.22",
    "pytest-mock~=3.15.1",
    "ruff~=0.14",
]
integration = [
    {include-group = "dev"},
    "mysql-connector-python~=9.1",
    "qa-utils-grass==0.6.1"
]

[[tool.uv.index]]
name = "the-orchard-registry"
url = "https://pypi.theorchard.io/pypi/"

[tool.ruff]
line-length = 88
indent-width = 4

[tool.ruff.lint]
select = [
    # pycodestyle
    "E",
    "W",
    # pydocstyle
    "D",
    # isort
    "I",
    # builtins
    "A",
    # quotes
    "Q"
]
ignore = [
    # missing-blank-line-after-last-section
    "D413",
    # incorrect-blank-line-before-class, conflicts with D211
    "D203",
    # multi-line-summary-second-line, conflicts with D212
    "D213",
    # line-too-long, the formatter makes a best-effort at wrapping lines
    "E501",
]

[tool.ruff.lint.isort]
combine-as-imports = true
forced-separate = ["tests"]

[tool.ruff.lint.flake8-quotes]
inline-quotes = "single"

[tool.ruff.format]
quote-style = "single"

[tool.mypy]
# Adopted per the org convention (cf. theorchard/ows-abacus-state#241). Grows one fully-typed
# module at a time: list each here as it gains annotations, rather than one big strict flip.
# `make typecheck` runs mypy with no path so this `files` list is the single source of truth
# (non-blocking; not wired into the lint gate yet).
files = ["core/hardening", "abacus_contract/utils/format_response.py"]
exclude = ["core/hardening/tests/"]
explicit_package_bases = true
strict = true
# Scope errors to the hardening package: follow first-party imports for type info, but don't
# report errors inside those (largely un-annotated) modules like core/config.py.
follow_imports = "silent"
# Disabled because of untyped third-party libraries (matches the org baseline).
ignore_missing_imports = true
disallow_subclassing_any = false
disallow_untyped_decorators = false
no_implicit_reexport = false
