This release includes significant refactor in code organization, removal and/or deprecation of old modules, and visual enhancement in the user interface regarding menus and modular form fragments. It also includes new PGVector related macros, with a newly organized macro registry.
New Features
SQL — Automatic NOTIFY on table changes:
adapter.notify()now automatically triggers PostgreSQL NOTIFY on table modifications. (#663, #664)gnrstring — cleanRst() utility: New
cleanRst()function added to the gnrstring module for cleaning RST-formatted strings. (#665)XML Transform service: New
xmltransformservice for converting XML to HTML via XSLT stylesheets. (#656)SQL — Complete addMacro registry: All SQL macros are now registered in the addMacro registry. (#617, #650)
SQL — pgvector macros: Added
VECQUERYandVECRANKmacros for pgvector similarity search. (#584)Menu — iconClass support and improved tree arrows: Menu component now supports
iconClassand has improved tree arrow rendering. (#615)Menu — empty branch visual feedback and badge improvements: Visual feedback for empty menu branches and enhanced badge display. (#641)
Grouplet system: New grouplet system for modular form fragments, including topic grids, wizard, panel and template auto-discovery, and mobile app connection. (#560, #587)
Grouplet — dedicated folder and mobile app connection: Component moved to dedicated folder with mobile app support added.
Multidomain Workspace Mode: Isolated tenant support under a single instance. (#426)
Dependencies — replace webob with werkzeug exceptions: Migrated from
webobtowerkzeugfor HTTP exception handling. (#612)Web — apphandler split into sub-package:
apphandler.pyrefactored into a class-based sub-package. (#543)GnrApp — db_attrs parameter: New
db_attrsparameter added toGnrApp.init(). (#553)Auto-GIN index for TSV columns: Migration system now automatically creates GIN indexes for TSV (full-text search) columns. (#629)
Bug Fixes
Migration — clear error on unreachable DB server: Error state is now cleared when the database server becomes reachable again. (#654, #655)
Migration packages bugs: Applied fixes for bugs in migration packages. (#508, #534)
SQL — macro registry premature copy: Removed premature copy of macro registry to expander. (#617)
SQLite adapter: Suppressed deprecation warnings via timestamp converter; added no-op
setLocalemethod.SQL — RE_SQL_PARAMS skips PostgreSQL cast syntax: Parameter regex no longer incorrectly matches
::cast notation. (#586)SQL — BETWEEN macro renamed to IN_RANGE:
#BETWEENmacro renamed to#IN_RANGEfor clarity. (#644)SQL — guessPkey method restored: Method lost during
gnrsqltablesplit has been restored. (#568)SQLite — IS NOT TRUE rewrite: NULL values are now handled correctly. (#550)
Formbuilder — spurious labeledbox wrapper: Removed unwanted labeledbox wrapper in formlet mode. (#639)
phonelink — cosmetic fixes: Style and
__info__pattern alignment improvements.Menu — tableBranch badge fallthrough: Prevented badge from falling through to RPC path on dbchanges. (#657)
Menu — whitespace preservation in tree search highlight: Fixed inline-flex labels losing whitespace in highlighted search results. (#646)
Menu — menuLineBadge propagation: Badge now correctly propagates to package branches. (#645)
Menu — badge sizing, alignment and shape: Multiple fixes for circular badge rendering, spacing, border, and vertical stretching on mobile. (#various)
Thread-safe relation tree: Relation tree now uses
currentEnvcache for thread safety. (#578)Locale handling: Unknown or invalid locales are now handled gracefully. (#566, #581)
quickDialog — rootNode scoping issue: Fixed scoping issue in
close_action. (#582)Unique constraint on composite primary key columns: Unique constraint is now correctly preserved. (#576, #580)
required_columns for pyColumns: Resolved resolution of required columns for
th_hiddencolumns. (#577, #579)CKEditor — disabled when no layout area selected: CKEditor is now properly disabled in this scenario. (#10, #573)
Page max age increased: Default
page_max_ageincreased from 120s to 600s. (#569, #570)dbo — hardcoded table reference removed: Removed hardcoded
srvy.questionreference in hierarchical update trigger. (#561)USER-DEFINED type mapping in migrator: Resolved mapping error for USER-DEFINED column types. (#556, #558)
adm — email formlet hidden from user preferences. (#559)
S3 — inject client instead of session. (#554)
DOM — guard against undefined headers in scrollableTable. (#555)
attachmanager — fit-to-container mode for image preview. (#545)
Parametric query dialog interference in nested forms: Fixed dialog interfering with nested form state. (#505)
Email message column: Removed incorrect
indexed=Truefromemail.messageto_addresscolumn. (#503)
Refactoring
SQL sub-packages: Split
gnrsql.py,gnrsqlmodel.py,gnrsqltable.py,gnrsqldata.py, andgnrsqlmigration.pyinto class-based sub-packages for improved maintainability. (#490, #501, #502, #506, #528)Typing — TYPE_CHECKING base classes: Added
TYPE_CHECKINGbase classes for mixin modules. (#635, #637)Removed legacy modules: Removed modules related to
suds,gnrpdf,reportlab, andplatypus. (#574)Removed 4D references: All references to the 4D database system have been removed from the framework. (#562, #575)
Removed uWSGI support: uWSGI support has been deprecated and removed. (#423, #500)
btcmail — dead code removed: Removed dead code referencing non-existing
adm.doctemplate. (#640)Test code duplication refactor: Reduced duplication across test modules. (#571)
Tests
SQL compiler coverage: Coverage raised to 92% with dead code annotations. (#647)
SQL model structural tests: 162 exhaustive tests for gnrsqlmodel structure. (#552)
SQL compiler coverage suite: 252-test suite covering partition, subtable, and staff scenarios. (#551)
Test teardown improvements: Improved test teardown and pytest configuration. (#533)
pytest plugins: Added missing pytest plugins and configured
asyncio_default_fixture_loop_scope.
Project / Infrastructure
chardet pinned: Pinned
chardetto version 5.2.0 to avoid test breakage.
