[project] name = "rss-platform" version = "0.1.0" description = "模块化、工业化、AI 驱动的 RSS 信息处理平台" requires-python = ">=3.12" dependencies = [ "fastapi==0.115.0", "uvicorn[standard]==0.30.0", "sqlalchemy[asyncio]==2.0.31", "asyncpg==0.29.0", "alembic==1.13.2", "psycopg2-binary==2.9.9", "pydantic==2.8.2", "pydantic-settings==2.3.4", "python-jose[cryptography]==3.3.0", "passlib[bcrypt]==1.7.4", "cryptography==42.0.8", "python-multipart==0.0.9", "httpx==0.27.0", "feedparser==6.0.11", "beautifulsoup4==4.12.3", "lxml==5.2.2", "redis==5.0.7", "celery==5.4.0", "langdetect==1.0.9", "prometheus-client==0.20.0", "sentry-sdk==2.7.0", ] [project.optional-dependencies] dev = [ "pytest==8.2.2", "pytest-asyncio==0.23.7", "aiosqlite==0.20.0", "ruff==0.5.0", "black==24.4.2", ] [build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [tool.setuptools] py-modules = [] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] select = [ "E", # pycodestyle errors "F", # Pyflakes "I", # isort "N", # pep8-naming "W", # pycodestyle warnings ] [tool.ruff.format] quote-style = "double" indent-style = "space" [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] pythonpath = ["."] [tool.black] line-length = 120 target-version = ["py312"]