5.17.0 — 2026-10-20¶
← 5.18.0 | 5.16.1 → | ↑ 5.x series
Added¶
Adapters - gRPC¶
- In-memory Rate Limit Stores - Added SQLite-backed rate-limit stores that need no Redis.
- Added
InMemoryRateLimitStoreandAsyncInMemoryRateLimitStore, which satisfy theRateLimitStoreports - Opt in through the
storeargument of the interceptor; the Redis default is unchanged
- Added
Changed¶
Adapters - SQLAlchemy¶
- Base Adapter Modules - Split
archipy/adapters/base/sqlalchemy/adapters.pyinto focused modules with no behavior change.- Added
mixins.py,query_helpers.py,sync_adapter.pyandasync_adapter.py adapters.pyre-exports every name, so existing import paths keep working
- Added
Configs¶
- Config Section Modules - Moved the config classes out of
config_template.pyinto per-section modules underarchipy/configs/sections/.config_template.pyre-exports every class, sofrom archipy.configs.config_template import Xkeeps working without a deprecation warning- Fields, defaults and validators are unchanged
Helpers - OpenTelemetry¶
- OtelRuntime Modules - Split
OtelRuntimeinto focused private modules for process state, provider builders, adoption, publication, flush and shutdown, and the logging handler.OtelRuntimekeeps every method as a thin delegate, soOtelUtilsis unchanged
Models - Types¶
- Precise Types - Replaced
Anyin the Vault lease DTO and the Keycloak lookup cache.VaultLeaseDTO.datais nowdict[str, JsonValue]- Cached Keycloak lookups are generic over the fetched value
Fixed¶
Adapters - Kafka¶
- Unreachable Broker -
validate_connectionnow reports an unreachable broker asUnavailableErrorinstead ofInternalError.
Adapters - ScyllaDB¶
- CQL Error Mapping - CQL syntax errors now map to
InvalidArgumentError.RequestValidationExceptionwas not caught by theexceptclauses ofexecute
Configs¶
- PostgreSQL DSN Port - The port is now taken from a PostgreSQL DSN such as
postgresql+psycopg://u:p@host:6432/dbwhenPORTwas not set.PORTdefaults to 5432, which previously overrode the DSN port
Models - DTOs¶
- Decimal Range Values - A non-numeric decimal range value is now reported as
InvalidArgumentError.Decimal("abc")raisesdecimal.InvalidOperation, which the validator did not catch
Tests¶
Tests - Adapters¶
- Adapter Coverage - Added BDD scenarios for Kafka, Redis, ScyllaDB, SQLAlchemy, Vault and email adapters.
- Kafka: unreachable brokers, invalid settings, topics
- Redis: hash reads, set scans and pops, multi-key exists
- ScyllaDB: CRUD round trips, missing tables, invalid CQL
- SQLAlchemy:
get_by_uuid,delete,bulk_delete, wrong session manager configuration, lazy default session manager - Vault: incomplete auth settings and token file
- Elasticsearch Stability - Refresh the index before scanning it and treat an already existing index as created.
- Container Readiness - Elasticsearch and Kafka test containers wait for readiness and poll.
- Mailpit - Stopped Mailpit from waiting 20 seconds on every SMTP connection.
Tests - Helpers¶
- Helper Coverage - Added scenarios for JWT token types, version and subject extraction, config validation, gRPC trusted proxy chains and the native
TrustedHostand HTTPS redirect middleware.
Chore¶
Chore - CI¶
- Parallel Behave Runner - Added
scripts/behave_parallel.py, which runs one Behave process per feature file, with the Behave workflow using it. - CI Logs - Features log in plain format so failures keep their trace, and the hidden
.behave-logsfolder is uploaded. - Docs Check - Added
make docs-check(mkdocs build --strict) with a pull request workflow, and fixed four broken links. - Lint Scope -
make lintnow includespackages/.
Chore - Coverage¶
- Coverage Target - Added
make coverage, which runs Behave under coverage, and coverage now measures the adapter packages.
Chore - Docs¶
- Package READMEs - Documented install, usage and the config section in each package README.
Dependencies¶
- Raised Lower Bounds -
fastapi>=0.146.0,httpx2>=2.14.0(core,parsian-ipg,saman-ipg),coverage>=7.16.2andimport-linter>=2.15.