content: # Copyright (C) 2022-2025 Intel Corporation
  # LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE
  [project]
  name = "onboarding-service"
  version = "1.0.0"
  description = "Onboarding service for Geti"
  requires-python = ">=3.10, <3.11"
  
  dependencies = [
      "boto3==1.40.37",
      "urllib3>=2.5.0", # Lower bound due to CVEs
      "fastapi==0.117.1",
      "starlette>=0.47.2", # Lower bound due to CVEs
      "googleapis-common-protos~=1.59.1",
      "httpx==0.26.*",
      "iso3166==2.1.1",
      "uvicorn==0.22.0",
      "PyJWT==2.8.0",
      "geti-telemetry-tools[grpc,telemetry]",
      "grpc_interfaces[account-service]",
  ]
  
  [tool.uv.sources]
  geti-telemetry-tools = { path = "../../../libs/telemetry_tools", editable = true }
  grpc_interfaces = { path = "../../../libs/grpc_interfaces", editable = true }
  
  [dependency-groups]
  dev = [
      "pytest~=8.3",
      "ruff~=0.11.2",
      "pre-commit~=4.1",
      "mypy~=1.15",
      "pytest-cov==2.11.1",
      "click==8.1.7",
      "pytest-html~=4.0.0",
      "httpx~=0.23",
      "cryptography==44.0.1",
      "pytest-asyncio~=0.19.0",
      "pytest-mock~=3.14",
  ]
  
  [tool.ruff]
  target-version = "py310"
  line-length = 120
  
  exclude = [
      ".venv*",
      "app/alembic/*.py",
  ]
  src = ["app"]
  
  [tool.ruff.lint]
  select = ["ARG", "E", "F", "I", "N", "UP", "YTT", "ASYNC", "S", "COM", "C4", "FA", "PIE", "PYI", "Q", "RSE", "RET", "SIM",
      "TID", "TC", "PL", "RUF", "C90", "D103", "ANN001", "ANN201", "ANN205", "FAST"]
  
  ignore = ["N801", "N805","N806","N807", "N818", "COM812", "RET503", "SIM108", "SIM105", "PLR2004",
      "RUF010", "TC001",  "RUF012"]
  
  fixable = ["ALL"]
  dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = ["E402"]
  
  # Covers any pytest
  "*test*.py" = ["E741", "E402", "E501",
      "S",
      "RET",
      "PL",
      "RUF",
      "SIM",
      "D103",
      "ARG",
      "PYI024",
      "ANN"]
  
  # Covers BDD tests
  "*features*.py" = ["E741", "E402", "E501",
      "S",
      "RET",
      "PL",
      "RUF",
      "SIM",
      "D103",
      "ARG",
      "PYI024",
      "ANN"]
  
  [tool.ruff.lint.isort]
  # First-party = self-contained packages defined within Geti
  known-first-party = [
      "geti_logger_tools", "datumaro_helper", "jobs_common",
      "k8s_custom_resources", "load_tests", "microservices", "nodes_resource",
      "platform_models", "iai_core", "geti_telemetry_tools", "users_handler", "account_service_client", "migration", "geti_kafka_tools"
  ]
  # Local folder = Geti folder that often appears as base in import statements, but that doesn't qualify as a package logically
  known-local-folder = [
      "application", "common", "communication", "config", "job", "migration_job", "tests", "platform_cleaner", "weights_uploader"
  ]
  # Third-party = self-contained packages defined and maintained outside Geti
  known-third-party = ["grpc", "kafka", "kubernetes", "kubernetes_asyncio", "minio", "otx", "starlette", "sqlalchemy"]
  split-on-trailing-comma = false
  
  [tool.ruff.lint.pylint]
  max-args=7
  
  [tool.mypy]
  python_version = "3.10"
  ignore_missing_imports = true
  exclude = "^.*/tests/.*\\.py|app/alembic/.*\\.py"
  
  show_error_codes = true
  
  [tool.mypy-torch]
  follow_imports = "skip"
  follow_imports_for_stubs = true
  