Private
Public Access
WNS (Windows/Edge push) has required an X-WNS-Cache-Policy header since April 2024; the production venv was likely still on the old pywebpush 2.0.x installed when the app was first deployed, which predates the library's fix. Floored the dependency at 2.4.0 (current latest) so the next deploy picks it up. Also logs response body and headers on any non-410/404 push failure, not just body text -- WNS's own 400s carry their actual reason in a header, which the old body-only logging would still have missed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
1.4 KiB
TOML
53 lines
1.4 KiB
TOML
[project]
|
|
name = "ds-chat"
|
|
version = "1.0.0"
|
|
description = "DS Chat backend service"
|
|
license = { text = "AGPL-3.0-or-later" }
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"fastapi>=0.115",
|
|
"uvicorn[standard]>=0.32",
|
|
"sqlalchemy>=2.0.36",
|
|
"asyncpg>=0.30",
|
|
"alembic>=1.14",
|
|
"pydantic>=2.9",
|
|
"pydantic[email]>=2.9",
|
|
"pydantic-settings>=2.6",
|
|
"argon2-cffi>=23.1",
|
|
"itsdangerous>=2.2",
|
|
# #56: >=2.0 let the production venv sit on an old 2.0.x that predates
|
|
# the fix for web-push-libs/pywebpush#162 -- WNS (Windows/Edge push)
|
|
# has required an X-WNS-Cache-Policy header since April 2024, and an
|
|
# old pywebpush that never sends it gets a bodyless 400 on every send.
|
|
# Floored at the actual latest release (merged/shipped 2026-01 through
|
|
# 2026-08) rather than pinning to whichever exact point release first
|
|
# included the fix, since that wasn't independently confirmed.
|
|
"pywebpush>=2.4.0",
|
|
"redis>=5.0",
|
|
"httpx>=0.27",
|
|
"gunicorn>=23.0",
|
|
"Pillow>=10.0",
|
|
"python-multipart>=0.0.9",
|
|
"aiosmtplib>=3.0",
|
|
"cryptography>=43.0",
|
|
]
|
|
|
|
[project.scripts]
|
|
ds-chat-create-user = "app.cli:main"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest>=8",
|
|
"pytest-asyncio>=0.24",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["app"]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|