details: https://code.tryton.org/tryton/commit/33139eb55d00
branch: default
user: Cédric Krier <[email protected]>
date: Tue Jun 30 16:49:13 2026 +0200
description:
Add mixin to Database and TableHandler from configuration
diffstat:
trytond-gis/CHANGELOG | 1 +
trytond-gis/trytond_gis/postgis/__init__.py | 6 ++++--
trytond-gis/trytond_gis/postgis/database.py | 6 +++++-
trytond-gis/trytond_gis/postgis/table.py | 6 +++++-
trytond/CHANGELOG | 1 +
trytond/doc/topics/configuration.rst | 17 +++++++++++++++++
trytond/trytond/backend/__init__.py | 22 ++++++++++++++++++++--
7 files changed, 53 insertions(+), 6 deletions(-)
diffs (159 lines):
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond-gis/CHANGELOG
--- a/trytond-gis/CHANGELOG Tue Aug 04 15:56:21 2026 +0200
+++ b/trytond-gis/CHANGELOG Tue Jun 30 16:49:13 2026 +0200
@@ -1,3 +1,4 @@
+* Add mixin for Database and TableHandler
Version 8.0.0 - 2026-04-20
--------------------------
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond-gis/trytond_gis/postgis/__init__.py
--- a/trytond-gis/trytond_gis/postgis/__init__.py Tue Aug 04 15:56:21
2026 +0200
+++ b/trytond-gis/trytond_gis/postgis/__init__.py Tue Jun 30 16:49:13
2026 +0200
@@ -5,13 +5,14 @@
DatabaseOperationalError, DatabaseTimeoutError, dict_row, namedtuple_row,
scalar_row)
-from .database import Database
-from .table import TableHandler
+from .database import Database, DatabaseMixin
+from .table import TableHandler, TableHandlerMixin
__all__ = [
Database,
DatabaseDataError,
DatabaseIntegrityError,
+ DatabaseMixin,
DatabaseOperationalError,
DatabaseTimeoutError,
dict_row,
@@ -19,4 +20,5 @@
scalar_row,
MAX_QUERY_PARAMS,
TableHandler,
+ TableHandlerMixin,
]
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond-gis/trytond_gis/postgis/database.py
--- a/trytond-gis/trytond_gis/postgis/database.py Tue Aug 04 15:56:21
2026 +0200
+++ b/trytond-gis/trytond_gis/postgis/database.py Tue Jun 30 16:49:13
2026 +0200
@@ -38,7 +38,7 @@
return wkb.dumps(obj).encode()
-class Database(PGDatabase):
+class DatabaseMixin:
_GIS_OIDS = None
@@ -87,6 +87,10 @@
return conn
+class Database(DatabaseMixin, PGDatabase):
+ pass
+
+
@cache
def _make_dumper(oid_in):
class GeometryDumper(BaseGeometryDumper):
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond-gis/trytond_gis/postgis/table.py
--- a/trytond-gis/trytond_gis/postgis/table.py Tue Aug 04 15:56:21 2026 +0200
+++ b/trytond-gis/trytond_gis/postgis/table.py Tue Jun 30 16:49:13 2026 +0200
@@ -10,7 +10,7 @@
logger = logging.getLogger(__name__)
-class TableHandler(PGTableHandler):
+class TableHandlerMixin:
def add_column(self, column_name, abstract_type, default=None):
if abstract_type.startswith('GIS_'):
@@ -69,3 +69,7 @@
cursor.execute('SELECT AddGeometryColumn(%s, %s, %s, %s, %s)',
(self.table_name, column_name, srid, type_, dimension))
self._update_definitions(columns=True)
+
+
+class TableHandler(TableHandlerMixin, PGTableHandler):
+ pass
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond/CHANGELOG
--- a/trytond/CHANGELOG Tue Aug 04 15:56:21 2026 +0200
+++ b/trytond/CHANGELOG Tue Jun 30 16:49:13 2026 +0200
@@ -1,3 +1,4 @@
+* Apply mixin to Database and TableHandler from configuration
* Restrict protocols allowed for weasyprint to http(s) (issue14947)
* Add search attribute to XML record tag
* Enforce access right on the email template record (issue14907)
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond/doc/topics/configuration.rst
--- a/trytond/doc/topics/configuration.rst Tue Aug 04 15:56:21 2026 +0200
+++ b/trytond/doc/topics/configuration.rst Tue Jun 30 16:49:13 2026 +0200
@@ -296,6 +296,22 @@
The maximum number of simultaneous connections to the database per process.
Default: ``64``
+.. _config-database.database_mixins:
+
+database_mixins
+~~~~~~~~~~~~~~~
+
+The qualified names of mixin_ as a one per line list to apply to the
+:class:`~trytond.backend.Database`
+
+.. _config-database.table_handler_mixins:
+
+table_handler_mixins
+~~~~~~~~~~~~~~~~~~~~
+
+The qualified names of mixin_ as a one per line list to apply to the
+:class:`~trytond.backend.TableHandler`
+
.. _config-database.unaccent_function:
unaccent_function
@@ -976,3 +992,4 @@
.. _WSGI middleware:
https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface#Specification_overview
.. _`multi-factor authentication`:
https://en.wikipedia.org/wiki/Multi-factor_authentication
.. _`Domain attribute`:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie#domaindomain-value
+.. _mixin: https://en.wikipedia.org/wiki/Mixin
diff -r 42e700f7f2e6 -r 33139eb55d00 trytond/trytond/backend/__init__.py
--- a/trytond/trytond/backend/__init__.py Tue Aug 04 15:56:21 2026 +0200
+++ b/trytond/trytond/backend/__init__.py Tue Jun 30 16:49:13 2026 +0200
@@ -5,6 +5,7 @@
from importlib.metadata import entry_points
import trytond.config as config
+from trytond.tools import resolve
__all__ = [
'name', 'Database', 'TableHandler',
@@ -28,12 +29,29 @@
else:
raise
-Database = _module.Database
+
+_database_mixins = []
+for mixin in config.get(
+ 'database', 'database_mixins', default='').strip().splitlines():
+ _database_mixins.append(resolve(mixin))
+_table_handler_mixins = []
+for mixin in config.get(
+ 'database', 'table_handler_mixins', default='').strip().splitlines():
+ _table_handler_mixins.append(resolve(mixin))
+
+
+class Database(*_database_mixins, _module.Database):
+ pass
+
+
+class TableHandler(*_table_handler_mixins, _module.TableHandler):
+ pass
+
+
DatabaseIntegrityError = _module.DatabaseIntegrityError
DatabaseDataError = _module.DatabaseDataError
DatabaseOperationalError = _module.DatabaseOperationalError
DatabaseTimeoutError = _module.DatabaseTimeoutError
-TableHandler = _module.TableHandler
MAX_QUERY_PARAMS = _module.MAX_QUERY_PARAMS
dict_row = _module.dict_row
namedtuple_row = _module.namedtuple_row