content: [project]
  name = "getgather"
  version = "0.1.0"
  description = "Free your data"
  readme = "README.md"
  requires-python = ">=3.11"
  license = "MIT"
  dependencies = [
    "aiofiles>=24.1.0",
    "nanoid>=2.0.0",
    "pydantic>=2.11.3",
    "pydantic-settings>=2.9.1",
    "pyyaml>=6.0.2",
    "sentry-sdk[fastapi]>=2.29.1",
    "rich>=14.0.0",
    "fastapi>=0.115.12",
    "jinja2>=3.1.6",
    "uvicorn[standard]>=0.34.2",
    # Browser Automation: Locked to specific versions to avoid breaking changes.
    "patchright==1.52.5",
    "requests>=2.32.4",
    "httpx>=0.28.1",
    "browser-use>=0.5.10",
    "beautifulsoup4>=4.13.4",
    "lxml>=6.0.0",
    "python-multipart>=0.0.20",
    "pwinput>=1.0.3",
    "stagehand>=0.5.2",
    "fastmcp>=2.12.2",
    "pytest-asyncio>=1.0.0",
  ]
  
  [dependency-groups]
  dev = [
    "assertpy>=1.1",
    "nanoid>=2.0.0",
    "pyright>=1.1.399",
    "pytest>=8.3.5",
    "pytest-asyncio>=0.23.5",
    "pytest-cov>=4.1.0",
    "pytest-playwright>=0.7.0",
    "pytest-xdist>=3.7.0",
    "ruff>=0.11.6",
    "yamlfix>=1.6.1",
    "python-fasthtml>=0.12.21",
  ]
  
  [tool.ruff]
  src = ["getgather", "tests"]
  exclude = [
    "**/__pycache__",
    "**/.pytest_cache",
    "**/.venv",
    "**/venv",
    "**/htmlcov",
    "**/alembic/versions",
    "**/node_modules",
    "**/*env/*",
    "**/.git",
    "**/*.yaml",
    "**/*.yml",
  ]
  line-length = 100
  preview = true
  
  [tool.ruff.lint]
  select = ["I", "UP045", "UP006", "UP007"]
  
  [tool.ruff.lint.isort]
  combine-as-imports = true
  known-first-party = ["getgather", "tests"]
  
  [tool.yamlfix]
  exclude = ["**/.venv/**"]
  explicit_start = false
  line_length = 120
  whitelines = 1
  