Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions book/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Markdown>=3.11,<4
Markdown>=3.11.1,<4
Pygments>=2.21.0,<3
PyYAML>=6,<7
WeasyPrint>=70.0,<71
pymdown-extensions>=12.1,<13
pymdown-extensions>=12.3,<13
CairoSVG>=2.9.1,<3
pdfplumber>=0.11.9,<0.12
pdfplumber>=0.11.10,<0.12
58 changes: 29 additions & 29 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
"pydantic>=2.13.5",
"pydantic>=2.14.1",
"pyyaml>=6.0.3",
]

Expand All @@ -40,12 +40,12 @@ Issues = "https://github.com/fireflyframework/fireflyframework-pyfly/issues"
templates = ["jinja2>=3.1.6"]
webapp = ["pyfly[web,templates,security]"]
web = [
"starlette>=1.7.0",
"starlette>=1.8.0",
"uvicorn[standard]>=0.54.0",
"python-multipart>=0.0.32",
]
data-relational = [
# Requires SQLAlchemy >= 2.0.50 (2.0.49 broke pool pre-ping on the MySQL/MariaDB async drivers, C089) and is
# Requires SQLAlchemy >= 2.1.5 (2.0.49 broke pool pre-ping on the MySQL/MariaDB async drivers, C089) and is
# tested on the 2.0 and 2.1 lines: the lock holds the latest release, and CI runs the suite on the newest 2.0
# release too (test-sqlalchemy-2-0). No upper bound; what differs between the lines is bridged in
# pyfly.data.relational.sqlalchemy.compat.
Expand All @@ -54,7 +54,7 @@ data-relational = [
"aiosqlite>=0.22.1",
]
testing = [
"jsonpath-ng>=1.8.0",
"jsonpath-ng>=1.11.0",
]
argon2 = [
"argon2-cffi>=25.1.0", # Argon2PasswordEncoder (OWASP-preferred password hashing)
Expand All @@ -67,25 +67,25 @@ data-document = [
"beanie>=2.2.0",
]
postgresql = [
"asyncpg>=0.31.0",
"asyncpg>=0.32.0",
]
mysql = [
# MySQL and MariaDB (mysql+asyncmy:// and mariadb+asyncmy://). asyncmy rather than aiomysql: aiomysql
# always installs PyMySQL, and with PyMySQL >= 1.2 next to SQLAlchemy 2.0.49 every other pre-pinged
# checkout raised TypeError (C089); asyncmy's pre-ping worked there and works on every later 2.0.x.
# 0.2.11 is the oldest release the MySQL/MariaDB lanes were run on (with SQLAlchemy 2.0.50) and the
# oldest with wheels for Python 3.12 and 3.13.
"asyncmy>=0.2.11",
"asyncmy>=0.2.16",
]
eda = [
"aiokafka>=0.14.0",
"aio-pika>=10.0.4",
"aio-pika>=10.1.1",
]
fastapi = [
"fastapi>=0.141.1",
"fastapi>=0.143.3",
]
granian = [
"granian>=2.8.3",
"granian>=2.8.4",
]
hypercorn = [
"hypercorn>=0.18.0",
Expand All @@ -94,7 +94,7 @@ kafka = [
"aiokafka>=0.14.0",
]
rabbitmq = [
"aio-pika>=10.0.4",
"aio-pika>=10.1.1",
]
redis = [
"redis[hiredis]>=8.1.0",
Expand All @@ -109,17 +109,17 @@ client = [
feature-flags = [
# OpenFeature SDK + flagd's reference in-process evaluator (FlagdCore, spec D3); httpx serves the http source.
"openfeature-sdk>=0.10.0",
"openfeature-flagd-core>=1.0.0",
"openfeature-flagd-core>=2.0.0",
"httpx>=0.28",
]
config-server-git = [
"GitPython>=3.1.62",
"GitPython>=3.2.1",
]
grpc = [
"grpcio>=1.84.0",
]
websocket = [
"websockets>=17.1",
"websockets>=17.2",
]
idp-azure = [
"httpx>=0.28.1",
Expand All @@ -128,19 +128,19 @@ idp-keycloak = [
"httpx>=0.28.1",
]
idp-cognito = [
"boto3>=1.43.103",
"boto3>=1.43.114",
]
ecm-aws = [
"boto3>=1.43.103",
"boto3>=1.43.114",
]
ecm-azure = [
"azure-storage-blob>=12.30.3",
"azure-storage-blob>=12.31.0",
]
observability = [
"prometheus-client>=0.26.0",
"opentelemetry-api>=1.45.0",
"opentelemetry-sdk>=1.45.0",
"opentelemetry-instrumentation-starlette>=0.66b0",
"opentelemetry-api>=1.45.1",
"opentelemetry-sdk>=1.45.1",
"opentelemetry-instrumentation-starlette>=0.66b1",
"structlog>=26.1.0",
]
scheduling = [
Expand All @@ -152,9 +152,9 @@ pii = [
"presidio-anonymizer @ git+https://github.com/data-privacy-stack/presidio.git@5e2fcea990aa3b99660d2aea9121d0ba74a8940b#subdirectory=presidio-anonymizer",
]
security = [
"pyjwt[crypto]>=2.15.0",
"pyjwt[crypto]>=2.15.1",
"bcrypt>=5.0.0",
"cryptography>=50.0.1",
"cryptography>=50.0.2",
"pyotp>=2.10.0",
]
notifications = [
Expand All @@ -171,33 +171,33 @@ shell = [
]
web-fast = [
"pyfly[web,granian]",
"uvloop>=0.22.1; sys_platform != 'win32'",
"uvloop>=0.23.0; sys_platform != 'win32'",
]
web-fastapi = [
"pyfly[fastapi,granian]",
"uvloop>=0.22.1; sys_platform != 'win32'",
"uvloop>=0.23.0; sys_platform != 'win32'",
]
full = [
"pyfly[web,templates,data-relational,data-document,postgresql,mysql,eda,cache,client,grpc,websocket,ecm-aws,ecm-azure,observability,security,scheduling,cli,shell,kafka,rabbitmq,redis,granian,fastapi,hypercorn,idp-azure,idp-keycloak,idp-cognito,notifications,config-server-git,feature-flags]",
]

[dependency-groups]
browser = ["playwright>=1.63.0"]
browser = ["playwright>=1.64.0"]
dev = [
"pytest>=9.1.1",
"pytest-asyncio>=1.4.0",
"pytest-cov>=7.1.0",
"coverage[toml]>=7.16.1",
"mypy>=2.3.1",
"ruff>=0.16.9",
"jsonpath-ng>=1.8.0",
"coverage[toml]>=7.16.2",
"mypy>=2.4.0",
"ruff>=0.17.1",
"jsonpath-ng>=1.11.0",
"respx>=0.23.1",
"aiosmtpd>=1.4.6",
# The OTLP exporter is the DEFAULT tracing exporter (auto_configuration selects it as soon as an
# endpoint is configured), yet it appears in no extra, so nothing in CI ever imported it and the
# whole OTLP path — including how the endpoint is built — went unexercised. It is a dev dependency
# rather than a new runtime one: applications choose their exporter and pay for it deliberately.
"opentelemetry-exporter-otlp-proto-http>=1.45.0",
"opentelemetry-exporter-otlp-proto-http>=1.45.1",
# The second MySQL/MariaDB async driver the docs name (mysql+aiomysql://). The integration lanes run
# pool pre-ping through both drivers, so neither can regress unseen (C089).
"aiomysql>=0.3.2",
Expand Down
Loading