content: [tool.poetry]
  name = "app"
  version = "0.1.0"
  description = ""
  authors = ["Muhammad Junaid <mr.junaidshaukat@gmail.com>"]
  readme = "README.md"
  
  [tool.poetry.dependencies]
  python = "^3.11"
  uvicorn = {extras = ["standard"], version = "^0.27.1"}
  sqlmodel = "^0.0.16"
  
  python-multipart = "^0.0.9"
  email-validator = "^2.1.1"
  passlib = {extras = ["bcrypt"], version = "^1.7.4"}
  tenacity = "^8.2.3"
  pydantic = "^2.6.4"
  emails = "^0.6"
  
  gunicorn = "^21.2.0"
  jinja2 = "^3.1.3"
  alembic = "^1.13.1"
  python-jose = {extras = ["cryptography"], version = "^3.3.0"}
  httpx = "^0.27.0"
  behave = "^1.2.6"
  
  
  # Pin bcrypt until passlib supports the latest
  bcrypt = "4.0.1"
  pydantic-settings = "^2.2.1"
  sentry-sdk = {extras = ["fastapi"], version = "^1.42.0"}
  aiokafka = "^0.10.0"
  requests = "^2.32.2"
  protobuf = "^5.27.0"
  confluent-kafka = {extras = ["protobuf"], version = "^2.4.0"}
  openai = "^1.31.1"
  psycopg = {extras = ["binary"], version = "^3.1.18"}
  stripe = "^10.1.0"
  validate-email-address = "^1"
  py3dns = "^4.0.2"
  apitally = {extras = ["fastapi"], version = "^0.11.1"}
  
  [tool.poetry.group.dev.dependencies]
  pytest = "^8.1.1"
  mypy = "^1.9.0"
  ruff = "^0.3.2"
  pre-commit = "^3.6.2"
  types-python-jose = "^3.3.4.20240106"
  types-passlib = "^1.7.7.20240311"
  coverage = "^7.4.3"
  
  [tool.isort]
  multi_line_output = 3
  include_trailing_comma = true
  force_grid_wrap = 0
  line_length = 88
  [build-system]
  requires = ["poetry>=1.8.2"]
  build-backend = "poetry.masonry.api"
  
  [tool.mypy]
  strict = true
  exclude = ["venv", "alembic"]
  
  [tool.ruff]
  target-version = "py311"
  
  [tool.ruff.lint]
  select = [
      "E",  # pycodestyle errors
      "W",  # pycodestyle warnings
      "F",  # pyflakes
      "I",  # isort
      "B",  # flake8-bugbear
      "C4",  # flake8-comprehensions
      "UP",  # pyupgrade
  ]
  ignore = [
      "E501",  # line too long, handled by black
      "B008",  # do not perform function calls in argument defaults
      "W191",  # indentation contains tabs
      "B904",  # Allow raising exceptions without from e, for HTTPException
  ]
  
  [tool.ruff.lint.pyupgrade]
  # Preserve types, even if a file imports `from __future__ import annotations`.
  keep-runtime-typing = true
  