[tool.poetry]
name = "activate_account"
version = "0.16.0"
description = ""
authors = [ ]
readme = "README.md"
package-mode = false

  [[tool.poetry.source]]
  name = "uis-devops"
  url = "https://gitlab.developers.cam.ac.uk/api/v4/groups/5/-/packages/pypi/simple"
  priority = "explicit"

  [tool.poetry.dependencies]
  python = "^3.11"
  django = ">=4.2.0,<4.3.0"
  django-cors-headers = "^4.1.0"
  django-crispy-forms = "^2.0"
  django-filter = "^23.2"
  django-structlog = "^5.1.0"
  djangorestframework = "^3.14.0"
  djangorestframework-camel-case = "^1.4.2"
  drf-spectacular = "^0.26.3"
  gunicorn = "^23.0.0"
  pyyaml = "^6.0"
  proxyprefix = "^0.1.3"
  whitenoise = "^6.5.0"
  setuptools = "^73.0.1"
  factory-boy = "^3.3.1"
  django-rest-knox = "^5.0.2"
  requests = "^2.32.3"
  requests-mock = "^1.12.1"
  tenacity = "^9.0.0"

    [tool.poetry.dependencies.externalsettings]
    version = "^1.0.2"
    source = "uis-devops"

    [tool.poetry.dependencies.psycopg]
    extras = [ "binary" ]
    version = "^3.1.9"

[tool.poetry.group.dev.dependencies]
better-exceptions = "^0.3.3"
django-debug-toolbar = "^4.1.0"
faker = "^18.11.1"
ipython = "^8.14.0"
pre-commit = "^3.3.3"
pytest = "^7.4.0"
pytest-django = "^4.5.2"
pytest-docker-tools = "^3.1.3"
pytest-env = "^0.8.2"
tox = "4.14.1"
openapi-spec-validator = "^0.7.1"
pyyaml = "^6.0.2"

  [tool.poetry.group.dev.dependencies.coverage]
  extras = [ "toml" ]
  version = "^7.2.7"

[tool.poetry.group.docs.dependencies]
mkdocs = "^1.6.1"
mkdocs-material = "^9.5.47"
mkdocs-gen-files = "^0.5.0"
mkdocs-literate-nav = "^0.6.1"
gitignorefile = "^1.1.2"
black = "^24.10.0"
mkdocs-section-index = "^0.3.9"

  [tool.poetry.group.docs.dependencies.mkdocstrings]
  extras = [ "python" ]
  version = "^0.27.0"

[tool.poe.tasks.up]
help = "Start the application in local development mode"
cmd = "docker compose up --build"

  [tool.poe.tasks.up.env]
  COMPOSE_PROFILES = "development"

[tool.poe.tasks.fix]
help = "Run pre-commit checks to fix formatting errors"
cmd = "pre-commit run --all-files"

[tool.poe.tasks.tox]
help = "Run the Python test suite via tox"
cmd = "docker compose run --build --rm tox"

[tool.poe.tasks.down]
help = "Stop any running containers"
cmd = "docker compose down"

  [tool.poe.tasks.down.env]
  COMPOSE_PROFILES = "development,production,utilities"

[tool.poe.tasks.manage]
help = "Run Django management commands"
cmd = "docker compose run --build --rm manage"

[tool.poe.tasks.init-mock-data]
help = "Initialize mock data using factory-boy"
cmd = "docker compose run --build --rm manage init_mock_data"

[tool.poe.tasks."up:production"]
help = "Start the application running in the production container"
cmd = "docker compose up --build"

  [tool.poe.tasks."up:production".env]
  COMPOSE_PROFILES = "production"

[tool.poe.tasks."down:hard"]
help = "Stop any running containers, remove any dangling containers and remove any persistent data volumes"
cmd = "docker compose down --remove-orphans --volumes"

  [tool.poe.tasks."down:hard".env]
  COMPOSE_PROFILES = "development,production,utilities"

[tool.poe.tasks."compose:build"]
help = "Build or rebuild all container images"
cmd = "docker compose build"

  [tool.poe.tasks."compose:build".env]
  COMPOSE_PROFILES = "development,production,utilities"

[tool.poe.tasks."compose:pull"]
help = "Pull any upstream container images"
cmd = "docker compose pull --ignore-buildable --ignore-pull-failures"

  [tool.poe.tasks."compose:pull".env]
  COMPOSE_PROFILES = "development,production,utilities"

[tool.poe.tasks."tox:local"]
help = "Run the Python test suite via tox using the locally installed Python version"
cmd = "tox"

[tool.poe.tasks."pytest:local"]
help = "Run the Python test suite via pytest using the locally installed Python version"
cmd = "pytest"

[tool.poe.tasks.generate-schema]
help = "Generate OpenAPI schema using drf-spectacular"
cmd = "docker compose run --build --rm manage spectacular --fail-on-warn --file openapi.yaml"

[tool.pytest.ini_options]
env = [
  "DJANGO_SETTINGS_MODULE=activate_account_project.settings.testing",
  "D:R:EXTERNAL_SETTING_DATABASES={\"default\":{}}",
  "D:EXTERNAL_SETTING_SECRET_KEY=fake-secret-key",
  "D:EXTERNAL_SETTING_DATA_MANAGER_ENABLED=1",
  "D:EXTERNAL_SETTING_DATA_MANAGER_READ_ONLY=0",
  "D:EXTERNAL_SETTING_PASSWORD_APP_RESET_TOKEN_URL=http://placeholder/",
  "D:EXTERNAL_SETTING_PASSWORD_APP_TOKEN=fake",
  "D:DANGEROUS_DISABLE_HTTPS_REDIRECT=1"
]
python_files = "tests.py test_*.py *_tests.py"
filterwarnings = [
  "ignore:.*pkg_resources.*:DeprecationWarning",
  "ignore::DeprecationWarning:.*google.*"
]

[tool.mypy]
ignore_missing_imports = true

  [[tool.mypy.overrides]]
  module = [ "requests.*" ]
  ignore_missing_imports = true

[tool.black]
line-length = 99

[tool.coverage.run]
omit = [
  ".tox/*",
  "setup.py",
  "manage.py",
  "gunicorn.conf.py",
  "*/test/*",
  "*/tests/*",
  "*/migrations/*",
  "activate_account_project/settings/*",
  "activate_account_project/wsgi.py"
]

[tool.isort]
profile = "black"

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