Files
Pygentic-AI/pyproject.toml
Francis Secada a11e0c65fe refactor: migrate to uv + pyproject.toml dependency management
BREAKING CHANGE: Removed pip-style requirements files

Migration Details:
- Removed core_requirements.{in,txt} and dev_requirements.in
- Consolidated all dependencies into pyproject.toml
- Added platform markers for Windows-specific packages:
  - pywin32>=311 (sys_platform == 'win32')
  - win32-setctime>=1.2.0 (sys_platform == 'win32')
  - hypercorn (Windows ASGI server)
  - gunicorn (Unix WSGI server)

CI/CD Changes:
- Updated .github/workflows/test.yml to use 'uv sync --group test'
- Simplified installation: no more manual pip install steps
- Uses 'uv run pytest' for test execution with PYTHONPATH

Benefits:
-  Fixes pywin32 installation failure on Ubuntu CI runners
-  Single source of truth for dependencies (pyproject.toml)
-  Faster resolution with uv lockfile
-  Modern Python packaging (PEP 621)
-  Proper dependency groups (dev, test)
-  Platform-aware installation

New Workflow:
- Production: uv sync
- With tests: uv sync --group test
- With dev tools: uv sync --group dev
- All groups: uv sync --all-groups

Added MIGRATION_UV.md with full migration guide for developers.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 16:07:14 -05:00

173 lines
3.5 KiB
TOML

[tool.ruff]
fix = true
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".hg",
".mypy_cache",
".nox",
".pants.d",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"node_modules",
"venv",
"migrations",
]
line-length = 80
[tool.ruff.lint]
preview = true
select = ["E", "F", "B"]
#select = ["E", "F", "I", "PL", "I", "B"]
ignore = ["B008", "E501"] # black will take care of line-length violations
ignore-init-module-imports = true
unfixable = []
[tool.ruff.lint.mccabe]
max-complexity = 10
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F403", "F405", "E501"]
"consts.py" = ["E501"]
[tool.black]
line-length = 80
target-version = ['py39', 'py310', 'py311', 'py312', 'py313']
extend-exclude = '''
/(
# The following are specific to Black, you probably don't want those.
| blib2to3
| tests/data
| profiling
)/
'''
[tool.isort]
profile = "black"
line_length = 80
[tool.uv.sources]
fastapi-debug-toolbar = { git = "https://github.com/fsecada01/fastapi-debug-toolbar.git", rev = "patch-2" }
#multi_line_output = 3
#include_trailing_comma = true
#force_grid_wrap = 0
[project]
name = "strategiq"
authors = [
{ name = "Francis Secada", email = "francis.secada@gmail.com" }
]
readme = "README.md"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
version = "1.0.0b0"
requires-python = ">=3.13"
dependencies = [
# Core async I/O
"aiofiles>=24.1.0",
"aiomysql>=0.3.2",
# Web framework
"fastapi>=0.128.1",
"fastapi-restful>=0.6.0",
"fastcrud>=0.21.0",
"uvicorn>=0.40.0",
# WSGI/ASGI servers (platform-specific)
"gunicorn>=25.0.1 ; sys_platform != 'win32'",
"hypercorn>=0.18.0 ; sys_platform == 'win32'",
# Task queue
"celery>=5.6.2",
"flower>=2.0.1",
"redis>=7.1.0",
# Database
"psycopg>=3.3.2",
"sqlalchemy>=2.0.37",
"sqlalchemy-mixins>=2.0.5",
"sqlmodel>=0.0.22",
"sqlmodel-crud-utilities",
"greenlet>=3.1.1",
# HTTP clients
"httpx[socks]>=0.28.1",
"httpx-html>=0.11.0.dev0",
# HTML/XML parsing
"html5lib>=1.1",
"lxml[html-clean]>=6.0.2",
"beautifulsoup4>=4.14.3",
# Templating
"jinjax>=0.63",
"jinja2>=3.1.6",
# AI/LLM
"openai>=2.16.0",
"pydantic-ai[examples]>=0.4.3",
"anthropic>=0.77.1",
"tavily-python>=0.7.21",
# Reddit API
"praw>=7.8.1",
# PDF generation
"reportlab>=4.4.9",
# Configuration
"pydantic>=2.10.5",
"pydantic-settings>=2.12.0",
"python-decouple>=3.8",
"python-dotenv>=1.0.1",
# Utilities
"loguru>=0.7.3",
"python-dateutil>=2.9.0.post0",
"python-slugify>=8.0.4",
"pytz>=2025.2",
"itsdangerous>=2.2.0",
"typing-inspect>=0.9.0",
# Serialization
"simplejson>=3.20.2",
"xmljson>=0.2.1",
"xmltodict>=1.0.2",
# Windows-specific dependencies (mark as platform-specific)
"pywin32>=311 ; sys_platform == 'win32'",
"win32-setctime>=1.2.0 ; sys_platform == 'win32'",
]
[dependency-groups]
dev = [
"alembic>=1.18.3",
"black>=26.1.0",
"fastapi-debug-toolbar",
"isort>=7.0.0",
"jupyterlab>=4.5.3",
"jupyterlab-code-formatter>=3.0.2",
"pre-commit>=4.5.1",
"ruff>=0.14.14",
]
test = [
"pytest>=9.0.2",
"pytest-asyncio>=1.3.0",
"pytest-cov>=7.0.0",
"httpx>=0.28.1", # For TestClient
]