Changelog¶
The authoritative changelog lives in CHANGES.md at the repository root. It is included below so the rendered docs always match the release history.
0.6.4 (2026-04-20)¶
Fix:
_needs_auth_url()no longer issues a PostgreSQL query per image. The old implementation looked upallowed_rolesinobject_statevia a request-scoped pool connection, which saturated the per-pod psycopg pool under cold-cache production load (30 thumbnails per listing page × concurrent anonymous requests = 30 sPoolTimeoutstacks). Replaced with an in-memoryrolesForPermissionOn("View", context)lookup — the plone-pgcatalogallowed_rolescolumn is a cache of exactly this computation, so the SQL was re-asking a question Zope already knew the answer to. Zero DB round-trips, zero pool pressure, no catalog-lag skew vs. live workflow state. Closes #8.Fix:
@thumbor-authREST service now prefers the ZODB storage connection (already held for the request) over the psycopg pool, so per-image auth verification doesn’t contend onpool.getconn(). The SQL query is unchanged — this is strictly a connection-acquisition change, matching the pattern plone-pgcatalog uses in_get_pg_read_connection. Falls back to the pool when no ZODB storage is in scope (tests, scripts). Related to #8.
0.6.3 (2026-04-13)¶
Move
@@imagesout of overrides, it is on a layer.
0.6.2 (2026-04-10)¶
Fix: access-check queries now use the dedicated
allowed_rolesTEXT[] column instead ofidx->'allowedRolesAndUsers'.plone-pgcatalogextractsallowedRolesAndUsersinto its own column, so the old JSONB lookup returnedNULLfor every migrated object — making_needs_auth_url()always returnTrue(broken anonymous images) and@thumbor-authalways return401for 3-segment URLs. Affects both_needs_auth_urlinscaling.pyandThumborAuthServiceinrestapi.py. Closes #5.Docs: the Sphinx reference changelog is now a MyST include of the root
CHANGES.md, removing the stale hand-maintained copy.
0.6.1 (2026-04-03)¶
Fix:
IImageScaleStorageadapter registration now uses*as second discriminator instead ofIPlonePgthumborLayer. The adapter lookup inplone.namedfilepasses amodifiedcallable (not a request), so the layer-based registration never matched — all scales still used the defaultAnnotationStorage. Closes #4.
0.6.0 (2026-04-03)¶
Fix:
ThumborScaleStorageno longer writesScalesDictto ZODB. Thestorageproperty now returns a volatile (non-persistent) dict, eliminating constant write transactions frompre_scale(). Closes #3.
0.5.0 (2026-04-02)¶
Remove
server_url,security_key, andunsafefrom controlpanel and registry. These settings are configured exclusively via environment variables (PGTHUMBOR_SERVER_URL,PGTHUMBOR_SECURITY_KEY,PGTHUMBOR_UNSAFE).Controlpanel now shows env-var configuration hint in the description.
Upgrade step (v2 -> v3) deletes orphaned registry records from existing sites.
Purge button uses alert styling.
Closes #2.
0.4.0 (2026-04-02)¶
Add browser layer
IPlonePgthumborLayerand bind all views, services, and adapter overrides to it. This enables clean uninstall via GenericSetup: removing the layer deactivates all registrations.Add uninstall profile (removes browser layer and control panel configlet).
0.3.0 (2026-03-10)¶
Wire
smart_croppingandparanoid_modefrom env vars / Plone registry into Thumbor URL generation.Add
_scale_urloverride for upcoming plone.namedfilescale_infosupport, with backward compatibility for current releases.Simplify dev setup: run Plone locally, Docker only for postgres/thumbor/nginx.
0.2.0 (2026-03-07)¶
Add
@@thumbor-purge-scalesview andzconsole run -mscript to remove legacy ZODB image scales and reindeximage_scalesmetadata after installation.
0.1.0¶
Initial implementation: Thumbor URL generation for Plone image scales.