[tool.poetry]
name = "ows-collaborator"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"

[[tool.poetry.source]]
name = "theorchard"
url = "https://pypi.theorchard.io/simple/"
priority = "supplemental"

[tool.poetry.dependencies]
python = "^3.11,<3.12"

auditlogger = { version = "0.4.1", source = "theorchard" }
boto3 = "^1.42.22"
ddtrace = "^4.4.0"
flask = "^3.1.3"
oto = "1.0.1"
owsresponse = { version = "3.0.4", source = "theorchard" }
owslogger = { version = "^4.3.1", extras = ["http"], source = "theorchard" }
owsrequest = { version = "^2.9.0", source = "theorchard" }
pycryptodome = "^3.19.1"
pymysql = "^1.1.1"
python-dotenv = "1.2.2"
snowflake-sqlalchemy = "^1.9.0"
sqlalchemy = "^2.0"
datadog = ">=0.48.0, <1.0.0"
cachetools = "4.2.4"
pythonfeatures = { version = "3.1.2", source = "theorchard" }
sentry-sdk = { version = "^2.15.0", extras = ["flask"] }
cryptography = "^48.0.1"
uwsgi = "^2.0.23"
bloom-filter2 = "2.0.0"
owsclient = { version = "^0.12.0", source = "theorchard" }
pydantic = "^2.12.5"
flask-pydantic = "^0.14.0"
numpy = "<2.0"
requests = "^2.33.0"

[tool.poetry.group.dev.dependencies]
ruff = "^0.15.18"
flasgger = "^0.9.7.1"
mypy = "^1.17.0"
pytest-cov = "^7.1.0"
pytest-mock = "^3.15.1"
pytest = "^9.0.3"
types-cachetools = ">=5.2.1"
types-pymysql = ">=1.1.0.1"
types-python-dateutil = ">=2.8.19"
types-requests = ">=2.28.10"
types-boto3 = { version = "^1.40.61", extras = ["lambda", "s3", "ses", "sqs"] }
pydantic-settings = "^2.13.1"


[tool.poetry.group.scripts.dependencies]
pandas = "^2.2.0"
openpyxl = "^3.1.2"
pydantic-settings = "^2.13.1"

[tool.ruff]
target-version = "py311"

[tool.ruff.lint]
select = ["F", "E", "W", "B", "A", "Q", "I", "D"]
ignore = [
    "B006", # mutable default argument
    "E203", # whitespace before ':' — intentional: conflicts with `ruff format`
    "D417", # require full params in docstrings
]

[tool.ruff.lint.pycodestyle]
max-line-length = 96

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.ruff.lint.isort]
known-first-party = ["collaborator", "scripts", "tests"]
force-sort-within-sections = true

[tool.mypy]
ignore_missing_imports = true
check_untyped_defs = false
disallow_any_generics = false
disallow_incomplete_defs = false
disallow_subclassing_any = false
disallow_untyped_calls = false
disallow_untyped_decorators = false
disallow_untyped_defs = false
no_implicit_optional = true
no_implicit_reexport = true
warn_redundant_casts = true
warn_return_any = false
warn_unused_configs = true
warn_unused_ignores = true

[tool.pytest.ini_options]
filterwarnings = [
    # SQLite doesn't support Decimal natively but MySQL does, so this is expected and not indicative of a problem
    "ignore:Dialect sqlite\\+pysqlite does \\*not\\* support Decimal:sqlalchemy.exc.SAWarning",
]

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
