[project]
name = "financial-advisor"
version = "0.1.0"
description = "Real-time multimodal Financial Advisor starter pack."
authors = [{name = "Developer", email = "developer@example.com"},]
requires-python = ">=3.12"
license = "Apache License 2.0"
readme = "README.md"

dependencies = [
    "anyio==4.9.0",
    "fastapi==0.115.12",
    "starlette==0.46.2",
    "uvicorn==0.34.2",
    "websockets==15.0.1",
    "python-multipart==0.0.20",
    "httpx==0.28.1",
    # Google Cloud & AI
    "google-auth==2.40.0",
    "google-cloud-aiplatform==1.104.0",
    "google-cloud-discoveryengine==0.13.9",
    "google-cloud-firestore==2.20.2",
    "google-cloud-logging==3.12.1",
    "google-cloud-secret-manager==2.23.3",
    "google-cloud-storage==2.19.0",
    "google-genai==1.25.0",
    "google-adk==1.8.0",
    # Utilities
    "pydantic==2.11.4",
    "pydantic-settings==2.9.1",
    "python-dotenv==1.1.0",
    "python-json-logger==3.3.0",
    "pyyaml==6.0.2",
    "tenacity==8.5.0",
    "rich", # Added based on previous analysis
    "typer", # Added based on previous analysis
    # Telemetry
    "opentelemetry-api==1.32.1",
    "opentelemetry-sdk==1.32.1",
    "opentelemetry-exporter-gcp-trace==1.9.0",
    "opentelemetry-instrumentation-fastapi==0.53b1",
    "opentelemetry-instrumentation-logging==0.53b1",
    "pyright>=1.1.407",
]

[project.scripts]
enable-api = "src.scripts.utils.enable_api:main"
create-service-account-and-assign-roles = "src.scripts.utils.create_service_account_and_assign_roles:main"
manage-service-account-keys = "src.scripts.utils.manage_service_account_keys:main"

[dependency-groups]
dev = [
    "pytest>=8.3.4",
    "pytest-cov>=6.0.0",
    "pytest-mock>=3.14.0",
    "pytest-asyncio>=0.25.3",
    "ipykernel>=6.29.5",
    "ruff>=0.14.7",
]

##############################
#     COMMITIZEN SETTINGS    #
##############################
[tool.commitizen]
major_version_zero = true
name = "cz_conventional_commits"
tag_format = "v$version"
update_changelog_on_bump = true
version_provider = "pep621"
version_scheme = "semver2"

##############################
#      PYRIGHT SETTINGS      #
##############################
[tool.pyright]
reportMissingImports = "error"

##############################
#       PYTEST SETTINGS      #
##############################
[tool.pytest.ini_options]
pythonpath = [
    "src/"
]
testpaths = [
    "src/tests"
]
addopts = "--cov=src/backend --cov-report=xml:.coverage/coverage.xml --junit-xml=.coverage/pytest.xml"
asyncio_default_fixture_loop_scope = "session"

##############################
#     COVERAGE SETTINGS      #
##############################
[tool.coverage.run]
data_file = '.coverage/coverage'
omit = ["**/tests/*"]

##############################
#        RUFF SETTINGS       #
##############################
[tool.ruff]
line-length = 120

[tool.ruff.format]
indent-style = "space"
line-ending = "auto"
quote-style = "double"
skip-magic-trailing-comma = false

[tool.ruff.lint.isort]
combine-as-imports = true
lines-between-types = 1
section-order = [
    "future",
    "standard-library",
    "third-party",
    "first-party",
    "local-folder",
]
known-first-party = ["api"]

[tool.ruff.lint.pydocstyle]
convention = "google"
