content: [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [project]
  name = "ooniprobe"
  description = ''
  dynamic = ["version"]
  
  dependencies = [
    "fastapi ~= 0.108.0",
    "clickhouse-driver ~= 0.2.6",
    "sqlalchemy ~= 2.0.27",
    "ujson ~= 5.9.0",
    "urllib3 ~= 2.1.0",
    "python-dateutil ~= 2.8.2",
    "pydantic-settings ~= 2.1.0",
    "statsd ~= 4.0.1",
    "uvicorn ~= 0.25.0",
    "psycopg2 ~= 2.9.9",
    "httpx ~= 0.26.0",
    "pyjwt ~= 2.8.0",
    "alembic ~= 1.13.1",
    "prometheus-fastapi-instrumentator ~= 6.1.0",
    "prometheus-client",
    "pem ~= 23.1.0",
    "geoip2 ~= 5.0.1",
    "fastapi-utils[all] ~= 0.8.0",
    "zstd ~= 1.5.7.2",
    "boto3 ~= 1.39.3",
    "boto3-stubs[s3] ~= 1.39.3"
  ]
  
  readme = "README.md"
  requires-python = ">=3.11"
  license = "MPL-2.0"
  keywords = []
  authors = [{ name = "OONI", email = "contact@ooni.org" }]
  classifiers = [
    "Development Status :: 4 - Beta",
    "Programming Language :: Python",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: Implementation :: CPython",
    "Programming Language :: Python :: Implementation :: PyPy",
  ]
  
  [project.urls]
  Documentation = "https://github.com/ooni/backend"
  Issues = "https://github.com/ooni/backend/issues"
  Source = "https://github.com/ooni/backend"
  
  [tool.hatch.version]
  path = "src/ooniprobe/__about__.py"
  
  [tool.hatch.build.targets.sdist]
  include = ["BUILD_LABEL"]
  
  [tool.hatch.build.targets.wheel]
  packages = ["src/ooniprobe"]
  artifacts = ["BUILD_LABEL"]
  
  [tool.hatch.envs.default]
  dependencies = [
    "pytest",
    "pytest-cov",
    "click",
    "black",
    "pytest-postgresql",
    "pytest-asyncio",
    "freezegun",
    "pytest-docker",
  ]
  path = ".venv/"
  
  [tool.hatch.envs.default.scripts]
  test = "pytest {args:tests}"
  test-cov = "pytest -s --full-trace --log-level=INFO  --log-cli-level=INFO -v --setup-show --cov=./ --cov-report=xml --cov-report=html --cov-report=term {args:tests}"
  cov-report = ["coverage report"]
  cov = ["test-cov", "cov-report"]
  
  [tool.pytest.ini_options]
  addopts = ["--import-mode=importlib"]
  
  [tool.coverage.run]
  branch = true
  parallel = true
  source_pkgs = ["ooniprobe", "tests"]
  omit = ["src/ooniprobe/common/*", "src/ooniprobe/__about__.py"]
  
  [tool.coverage.paths]
  ooniprobe = ["src/ooniprobe"]
  tests = ["tests"]
  
  [tool.coverage.report]
  exclude_lines = ["no cov", "if __name__ == .__main__.:", "if TYPE_CHECKING:"]
  