[project] name = "feedecho" dynamic = [ "version" ] description = "Self-hosted RSS feed cross-poster — route feed items to Mastodon, Bluesky, micro.blog, Matrix, Discord, Telegram, generic webhooks, or email" requires-python = ">=3.12" license = "MIT" license-files = ["LICENSE"] dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.34.0", "jinja2>=3.1.0", "python-multipart>=0.0.18", "feedparser>=6.0.11", "httpx>=0.28.0", "apscheduler>=3.10.4", "cryptography>=42.0.0", "pillow>=11.0.0", "nh3>=0.2.20", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-asyncio>=0.24.0", ] postgres = [ "psycopg[binary]>=3.2", ] [build-system] requires = [ "hatchling" ] build-backend = "hatchling.build" # One place to bump the Python-side version (issue #8): _version.py. [tool.hatch.version] path = "_version.py" [tool.pytest.ini_options] markers = [ "multi: tests exercising multi-tenant mode (FEEDECHO_MODE=multi)", "pg: tests requiring a live Postgres (FEEDECHO_TEST_PG_URL); skipped otherwise", ] [tool.hatch.build.targets.wheel] # Flat-layout: the project dir IS the package. Include templates and static # so the installed wheel is self-contained (Docker, Nix, etc.). packages = [ "." ] artifacts = [ "templates/*.html", "static/**/*", "resources/*", ] exclude = [ "tests", "nix", "dist", "uv.lock", ".github", ".dockerignore", "Dockerfile", "docker-compose.yml", "flake.nix", ]