[project]
name = "earnings-transfer"
version = "1.0.0"
description = "Lambda function for processing earnings transfer workbooks"
readme = "README.md"
requires-python = "~=3.13.0"
dependencies = [
    "abacus-common-logic~=5.15.0",
    "anyio~=4.12.0",
    "async-timeout~=5.0.1",
    "boto3~=1.42.93",
    "Deprecated~=1.2.18",
    "datadog-lambda~=6.106.0",
    "greenlet~=3.2.2",
    "h11~=0.16",
    "lambdacommon~=6.0.3",
    "openpyxl~=3.1.5",
    "owsclient~=0.7.0",
    "pydantic~=2.13",
    "python-dotenv~=1.2",
    "requests-futures~=1.0.2",
    "secrets_manager~=1.4.6",
    "sentry-sdk~=2.14.0",
    "snowflake-connector-etl~=1.2",
    "pyjwt==2.13.0",
    "pyopenssl>=26.3.0",
    "cryptography>=48.0.1",
]

[project.urls]
Repository = "https://github.com/theorchard/lambda-abacus"

[dependency-groups]
dev = [
    "pytest~=9.0",
    "pytest-cov~=6.3",
    "pytest-html~=4.1",
    "pytest-jira~=0.3",
    "pytest-mock~=3.14.1",
    "mypy~=1.20",
    "ruff~=0.15",
    "yamllint~=1.38",
]
integration = [
    {include-group = "dev"},
    "boto3~=1.42.48",
    "botocore~=1.42.48",
    "qa-testing-utils~=3.1.1",
    "py>=1.11.0",
]

[tool.coverage.run]
omit = [
  "tests/*",
]

[tool.mypy]
python_version = "3.13"
disable_error_code = ["index","return"]
warn_unused_configs = true
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
exclude = ["(^|/)\\.venv/"]
explicit_package_bases = true
plugins = ["pydantic.mypy"]

[tool.pydantic-mypy]
init_forbid_extra = true
init_typed = true
warn_required_dynamic_aliases = true

[tool.pytest.ini_options]
pythonpath = [
    "."
]
testpaths = ["tests"]
norecursedirs = ["env/*"]
markers = [
    "integration: integration tests requiring Docker environment",
]

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

[tool.ruff.lint]
select = [
    "A",
    "D",
    "E",
    "F",
    "I",
    "Q",
    "W",
]
ignore = [
    "D413",
    "D203",
    "D213",
    "E501",
]

[tool.ruff.lint.per-file-ignores]
"tests/**" = ["D102"]
"**/__init__.py" = ["D104"]
"src/types.py" = ["A005"]

[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.uv]
override-dependencies = [
    "cryptography>=48.0.1",
]
constraint-dependencies = [
    "ujson>=5.13.0",
]

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