Several 0.3.8 PRs are being developed in parallel. If each one appended to ## [Unreleased], every merge would put the others in conflict. Those PRs therefore leave CHANGELOG.md alone. Instead, each PR description has a CHANGELOG entry section with the exact text to add.
Before 0.3.8 is released, one PR copies those entries into CHANGELOG.md, in Keep a Changelog order. tests/test_changelog_release.py must pass.
PRs whose entries are pending
(Checked once the entry is in CHANGELOG.md.)
feat: export CacheXError, BackendNotFoundError and RequestNotFoundError #207 (Export CacheXError, BackendNotFoundError and RequestNotFoundError from the package #160 ): Added
fix(session): clear inactive sessions and batch session sweeps #208 (clear_expired_sessions() skips expired and invalidated records; batch the deletes #165 ): Fixed
fix(session): vary on the headers read to find the session token #209 (Add Vary: Cookie only when the session travels in a cookie #168 ): Fixed
refactor(manager): encode the JSON content once in CacheManager._encode #210 (CacheManager._encode encodes the JSON string twice #183 ): no entry (internal refactor)
perf(redis): delete each SCAN page as it arrives in clear operations #211 (Redis clear operations: delete page by page and drop the extra EXISTS #172 ): Changed
perf(redis): fetch get_cache_data in chunked, non-transactional pipelines #212 (Redis get_cache_data: use a non-transactional, chunked pipeline #171 ): Changed
fix(release): release from master only, split jobs, ship LICENSE #272 (release.yml: refuse to release from a branch other than master, and isolate the publish step #231 , Ship the LICENSE file in the wheel and sdist #232 ): Security, Fixed
perf(memcached): one worker call per operation; delete_many counts removals #273 (Memcached: override delete_many with a batched delete #174 , Memcached: run each multi-step operation in one worker call #176 ): Changed
feat(proxy): one locked get_or_create for lazy defaults; CacheBackend falls back #274 (Unify lazy get-or-create for the proxies; CacheBackend and get_state_manager lack fallback and locking #112 ): Changed
feat(session): add require_user_session and warn about short JWT HMAC keys #275 (Add a dependency that requires a session with a user #114 , Warn when the JWT HMAC secret is shorter than the hash output #116 ): Added, Security
refactor(cache): build the key only where the backend is used; report media_type #276 (Monitoring routes: report media_type and rename the key-split constants #184 , @cache wrapper: build the key lazily and tidy the request check #182 ): Added, Changed
chore(tooling): anchor coverage excludes, fix pre-commit hooks, tidy ruff ignores #277 (Coverage: anchor the exclude_lines patterns #190 , pre-commit: remove the duplicate hook, stop upgrading the lock, fix mypy deps #191 , Ruff: drop stale ignores and scope the rest #192 ): no entry (tooling)
test(state): make the state manager tests deterministic and say what they test #278 (Tests: clean up the state manager tests #186 ): no entry (test-only)
perf(session): write on lookup only when sliding expiration renews #279 (Session lookups write to the backend on every request #115 ): Changed
test(session): define the shared config/manager fixtures once in conftest.py #281 (Tests: move shared session fixtures to tests/session/conftest.py #187 ): no entry (test-only)
ci: give only the badge deploy write access; drop the duplicate tox run #282 (CI: scope coverage.yml write permission, reduce test/tox overlap #193 ): no entry (CI only)
test(session): exercise the deprecated SessionMiddleware over HTTP #283 (Tests: exercise the deprecated SessionMiddleware through its public API #188 ): no entry (test-only)
build(deps): declare lower bounds and test them with a lowest-direct resolution #284 (Declare lower bounds for runtime dependencies #194 ): Changed
Tests: control time instead of sleeping for TTLs #185 : expected no entry (test-only, not yet merged)
Tests: tighten the pytest configuration #189 : expected no entry (test-only, not yet merged)
Collected in #286 .
Several 0.3.8 PRs are being developed in parallel. If each one appended to
## [Unreleased], every merge would put the others in conflict. Those PRs therefore leaveCHANGELOG.mdalone. Instead, each PR description has a CHANGELOG entry section with the exact text to add.Before 0.3.8 is released, one PR copies those entries into
CHANGELOG.md, in Keep a Changelog order.tests/test_changelog_release.pymust pass.PRs whose entries are pending
(Checked once the entry is in
CHANGELOG.md.)CacheBackendandget_state_managerlack fallback and locking #112): ChangedCollected in #286.