[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "gatpack"
version = "0.0.4"
description = "A PDF and website templating tool"
authors = [
  { name = "Gatlen Culp" },
]
license = { file = "LICENSE" } 
readme = {file = "README.md", content-type = "text/markdown"}
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
]
requires-python = ">=3.10"

dependencies = [
    "loguru>=0.7.3", # Better logging
    "plotly>=5.24.1", # Interactive plotting
    "pydantic>=2.10.3", # Data validation
    "rich>=13.9.4", # Rich terminal output
    "numpy>=1.26.4", # Numerical computing # Load .env into environment vars
    "python-dotenv>=1.0.0",
    "typer>=0.15.1",
    "cookiecutter>=2.6.0",
    "jinja2>=3.1.5",
    "pypdf>=5.2.0",
    "reportlab>=4.3.0",
    "orjson>=3.10.15",
]

[project.scripts]
gatpack = "gatpack.cli:app"

[dependency-groups]
ai-apps = [  # AI application development packages
    "ell-ai>=0.0.15",        # AI toolkit
    "langchain>=0.3.12",     # LLM application framework
    # "megaparse>=0.0.45",     # Advanced text parsing (TODO: Requires Python 3.10+)
]
cli = [  # Command-line interface tools
    "typer>=0.15.1",           # CLI builder
]
config = [  # Configuration management
    "cookiecutter>=2.6.0",     # Project templating
    "gin-config>=0.5.0",       # Config management
    "jinja2>=3.1.4",           # Template engine
]
data = [  # Data processing and storage
    "dagster>=1.9.5",          # Data orchestration
    "duckdb>=1.1.3",           # Embedded analytics database
    # "lancedb>=0.17.0",         # Vector database (TODO: Figure out install error)
    "networkx>=3.4.2",         # Graph operations
    "orjson>=3.10.12",         # Fast JSON parsing
    "pillow>=10.4.0",          # Image processing
    "polars>=1.17.0",          # Fast dataframes
    "pandera>=0.22.1",         # Typing dataframs
    # "pygwalker>=0.4.9.13",   # Data visualization (TODO: Figure out install error)
    "sqlmodel>=0.0.22",        # SQL ORM
    "tomli>=2.0.1",            # TOML parsing
]
dev = [ # Development tools
    "better-exceptions>=0.3.3", # Improved error messages
    "commitizen>=4.1.1", # Standardized commit messages
    "cruft>=2.15.0", # Project template management
    "faker>=33.1.0", # Fake data generation
    "hypothesis>=6.122.3", # Property-based testing
    "pip>=24.3.1", # Package installer
    "pre-commit>=4.1.0", # Git pre-commit hooks
    "polyfactory>=2.18.1", # Test data factory
    "pyinstrument>=5.0.0", # Profiler
    # "pyprojectsort>=0.3.0",  # pyproject.toml sorter (TODO: Find replacement)
    "pyright>=1.1.390", # Static type checker
    "pytest-cases>=3.8.6", # Parametrized testing
    "pytest-cov>=6.0.0", # Coverage reporting
    "pytest-icdiff>=0.9", # Improved diffs
    "pytest-mock>=3.14.0", # Mocking
    "pytest-playwright>=0.6.2", # Browser testing
    "pytest-profiling>=1.8.1", # Test profiling
    "pytest-random-order>=1.1.1", # Randomized test order
    "pytest-shutil>=1.8.1", # File system testing
    "pytest-split>=0.10.0", # Parallel testing
    "pytest-sugar>=1.0.0", # Test progress visualization
    "pytest-timeout>=2.3.1", # Test timeouts
    "pytest>=8.3.4", # Testing framework
    "ruff>=0.8.3", # Fast Python linter
    # "taplo>=0.9.3",            # TOML toolkit (Requires Rust)
    "tox>=4.23.2", # Test automation
    "uv>=0.5.7", # Fast pip replacement
]
dev-doc = [  # Documentation tools
    "mdformat>=0.7.19",        # Markdown formatter
    "mkdocs-material>=9.5.48", # Documentation theme
    "mkdocs>=1.6.1",           # Documentation generator
]
gui = [  # Graphical interface tools
    "streamlit>=1.41.1",       # Web app framework
]
misc = [  # Miscellaneous utilities
    "boltons>=24.1.0",         # Python utilities
    "cachetools>=5.5.0",       # Caching utilities
    "wrapt>=1.17.0",           # Decorator utilities
]
web = [  # Web development and scraping
    "beautifulsoup4>=4.12.3",  # HTML parsing
    "fastapi>=0.115.6",        # Web framework
    "playwright>=1.49.1",      # Browser automation
    "requests>=2.32.3",        # HTTP client
    "scrapy>=2.12.0",          # Web scraping
    "uvicorn>=0.33.0",         # ASGI server
    # "zrok>=0.4.42",          # Tunnel service (# TODO: Requires 3.10+)
]

[tool.uv]
default-groups = [
    # "dev", "dev-doc", "nb", # Typical
]

[project.urls]
# Homepage = "https://.github.io/GatPack/"
Repository = "https://github.com/GatlenCulp/GatPack"
# Documentation = "https://.github.io/GatPack/"

[tool.ruff]
cache-dir = ".cache/ruff"
line-length = 100

[tool.ruff.lint]
# TODO: Different groups of linting styles depending on code use.
select = ["ALL"]
ignore = [] # Add ignores as needed


[tool.ruff.lint.isort]
known-first-party = ["gatpack"]
force-sort-within-sections = true

[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"] # Allow unused imports in __init__.py

[tool.ruff.lint.mccabe]
max-complexity = 10

[tool.ruff.lint.pycodestyle]
max-doc-length = 99

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

[tool.ruff.format]
quote-style = "double"
indent-style = "space"

[tool.pytest.ini_options]
addopts = """
--tb=long
--code-highlight=yes
"""

testpaths = ["tests"]
log_file = "./logs/pytest.log"


[tool.pydoclint]
style = "google"
arg-type-hints-in-docstring = false
check-return-types = true
exclude = '\.venv'

[tool.pyright]
include = ["."]
