[project]
name = "text-campaigns-sender"
version = "0.1.0"
description = ""
authors = [{ name = "The Orchard", email = "webdev@theorchard.com" }]
requires-python = ">=3.14.0, <3.15"
readme = "README.md"
dependencies = [
    "pydantic-settings>=2.10.1,<3",
    "fansifter-common[db]>=0.137.0",
    "sqlalchemy>=2.0.51",
    "snowflake-sqlalchemy>=1.11.0",
    "psycopg[binary, pool]>=3.2.9,<4",
    "sentry-sdk>=2.42.1,<3",
    "datadog-lambda>=8.125.0",
    "boto3>=1.28.63,<2",
    "cryptography>=45.0.6",
    "owslogger>=4.3.0",
    "rich>=14.2.0",
    "redis>=7.1.0",
    "boto3>=1.43.42",
    "tzdata>=2024.1",
]

[dependency-groups]
dev = [
    "ty>=0.0.58",
    "ruff>=0.15.21",
    "pytest>=9.1.1",
    "pytest-cov>=6.2.1",
    "pytest-env>=1.2.0",
    "polyfactory==3.3.0",
    "freezegun>=1.5.4",
    "dirty-equals>=0.9.0",
    "fakeredis[json,lua]>=2.32.0",
    "pytest-mock>=3.15.1",
]

[build-system]
requires = ["uv_build>=0.8.5,<0.9.0"]
build-backend = "uv_build"

[tool.uv]

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

[tool.uv.build-backend]
module-name = "app"
module-root = ""

[tool.ty.src]
include = [
    "app/**/*.py",
    "tests/**/*.py",
    "manage.py",
]

[tool.ruff]
line-length = 88

[tool.ruff.lint]
select = ["ARG", "C", "E", "F", "W", "B", "I", "UP", "T20", "TID252", "G"]
ignore = ["E501", "B008", "B009"]

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

[tool.pytest.ini_options]
markers = [
    "db: database marker",
]
addopts = [
    "--strict-config",
    "--strict-markers",
]
xfail_strict = true
junit_family = "xunit2"
filterwarnings = [
    "ignore::UserWarning:ddtrace",
]
env = [
    "Environment = test",
    "APP_DEBUG = true",
    "LOG_FORMAT = console",
    "SENTRY_DSN = ",
    "DD_FLUSH_TO_LOG = true",
    "OWSREQUEST_SERVICE_MAP = {{\"ows-text-campaigns\": \"http://test-ows-text-campaigns/\"}}",
]
