-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
112 lines (101 loc) · 2.94 KB
/
Copy pathpyproject.toml
File metadata and controls
112 lines (101 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
[tool.poetry]
name = "signupflow-api"
version = "1.0.0"
description = "AI-powered volunteer scheduling and sign-up management API"
authors = ["SignUpFlow Team"]
readme = "README.md"
packages = [{include = "api"}]
[tool.poetry.dependencies]
python = ">=3.11,<3.14" # Python 3.14 has multiprocessing compatibility issues with uvicorn
fastapi = "^0.141.1"
uvicorn = {extras = ["standard"], version = "^0.27.0"}
pydantic = {extras = ["email"], version = "^2.5.0"}
pydantic-settings = "^2.0.0"
click = "^8.1.0"
pyyaml = "^6.0.1"
ics = "^0.7.2"
icalendar = "^6.0.1"
python-dateutil = "^2.8.2"
sqlalchemy = "^2.0.43"
python-multipart = "^0.0.32"
httpx = "^0.26.0"
alembic = "^1.16.5"
reportlab = "^4.4.4"
cryptography = "^50.0.1"
pyjwt = "^2.14.0"
passlib = {extras = ["bcrypt"], version = "^1.7.4"}
twilio = "^9.8.4"
celery = "^5.5.3"
redis = "^7.0.0"
stripe = "^11.3.0"
psycopg2-binary = "^2.9.9"
python-dotenv = "^1.0.0"
sendgrid = "^6.11.0"
jinja2 = "^3.1.2"
sentry-sdk = {extras = ["fastapi"], version = "^1.40.0"}
[tool.poetry.group.dev.dependencies]
pytest = "^8.2.0"
pytest-asyncio = "^0.24.0"
ruff = "^0.1.7"
black = "^23.12.0"
mypy = "^1.7.1"
types-pyyaml = "^6.0.12"
types-python-dateutil = "^2.8.19"
types-passlib = "^1.7.7.20260211"
pytest-cov = "^7.0.0"
pytest-xdist = "^3.8.0"
# Browser tests only. Kept out of `dev` because Playwright ships glibc wheels
# alone, so the Alpine dev image installs `--without e2e`.
[tool.poetry.group.e2e.dependencies]
playwright = "^1.60.0"
[tool.poetry.scripts]
roster-api = "api.main:start"
signupflow = "api.cli.main:main"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.ruff]
line-length = 100
target-version = "py311"
select = ["E", "F", "I", "N", "W", "UP"]
# E501: Black is the source of truth for line length; Ruff flags lines Black can't break (URLs, strings).
# E402: tests intentionally set env vars before importing api.* modules.
# N806: SQLAlchemy uses CapCase for sessionmakers (e.g., SessionLocal); the convention is intentional.
ignore = ["E501", "E402", "N806"]
[tool.black]
line-length = 100
target-version = ['py311']
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
[[tool.mypy.overrides]]
module = "ics.*"
ignore_missing_imports = true
# Third-party libs without published type stubs.
[[tool.mypy.overrides]]
module = [
"celery",
"celery.*",
"icalendar.*",
"reportlab.*",
"redis.*",
"stripe.*",
"twilio.*",
"sendgrid.*",
]
ignore_missing_imports = true
# Disabled feature stacks (Stripe billing, SMS) are out-of-scope for the
# strict step. PR 4.7 strict-checks the active surface of api/utils only;
# these modules stay on the advisory mypy api step until their features
# are re-enabled.
[[tool.mypy.overrides]]
module = [
"api.utils.stripe_client",
"api.utils.stripe_error_handler",
"api.utils.cost_tracker",
"api.utils.sms_rate_limiter",
]
ignore_errors = true