mirror of
https://github.com/NaN-tic/trytond-patches.git
synced 2023-12-14 06:03:03 +01:00
87 lines
4 KiB
Diff
87 lines
4 KiB
Diff
diff --git a/tryton/trytond/trytond/pool.py b/trytond/trytond/pool.py
|
|
index 407ff358..0be2a41a 100644
|
|
--- a/tryton/trytond/trytond/pool.py
|
|
+++ b/tryton/trytond/trytond/pool.py
|
|
@@ -195,6 +195,16 @@ class Pool(object):
|
|
self.add(cls, type)
|
|
self.setup_mixin(self._modules, type='report', name=name)
|
|
return self.get(name, type=type)
|
|
+ elif name[:15] == 'babi_execution_':
|
|
+ import sys
|
|
+ # Do not reload if babi model is accessed during update.
|
|
+ if not sys.argv[0].endswith('trytond-admin'):
|
|
+ with Transaction(new=True).start(self.database_name, 0,
|
|
+ readonly=False):
|
|
+ Execution = self.get('babi.report.execution')
|
|
+ execution = Execution(int(name[15:]))
|
|
+ execution.validate_model(avoid_registration=True)
|
|
+ return self._pool[self.database_name][type][name]
|
|
raise
|
|
|
|
def add(self, cls, type='model'):
|
|
diff --git a/tryton/trytond/trytond/model/modelsql.py b/tryton/trytond/trytond/model/modelsql.py
|
|
index d4abf5dfe6..29da9fa56b 100644
|
|
--- a/tryton/trytond/trytond/model/modelsql.py
|
|
+++ b/tryton/trytond/trytond/model/modelsql.py
|
|
@@ -957,6 +957,7 @@ class ModelSQL(ModelStorage):
|
|
extra_fields = set()
|
|
if 'write_date' not in fields_names:
|
|
extra_fields.add('write_date')
|
|
+ fields_names = fields_names[:]
|
|
for field_name in fields_names:
|
|
if field_name in {'_timestamp', '_write', '_delete'}:
|
|
continue
|
|
@@ -966,7 +967,14 @@ class ModelSQL(ModelStorage):
|
|
if field_name.endswith(':string'):
|
|
field_name = field_name[:-len(':string')]
|
|
fields_related[field_name]
|
|
- field = cls._fields[field_name]
|
|
+ try:
|
|
+ field = cls._fields[field_name]
|
|
+ except KeyError as err:
|
|
+ if 'babi_' in str(err):
|
|
+ fields_names.remove(field_name)
|
|
+ continue
|
|
+ else:
|
|
+ raise
|
|
if hasattr(field, 'datetime_field') and field.datetime_field:
|
|
extra_fields.add(field.datetime_field)
|
|
if field.context:
|
|
@@ -1435,8 +1443,14 @@ class ModelSQL(ModelStorage):
|
|
foreign_table = Model.__table__()
|
|
foreign_red_sql = reduce_ids(
|
|
Column(foreign_table, field_name), sub_ids)
|
|
- cursor.execute(*foreign_table.select(foreign_table.id,
|
|
- where=foreign_red_sql))
|
|
+ import psycopg2
|
|
+ try:
|
|
+ cursor.execute(*foreign_table.select(foreign_table.id,
|
|
+ where=foreign_red_sql))
|
|
+ except psycopg2.errors.UndefinedTable as ex:
|
|
+ if ex.args and (len(ex.args) > 0) and 'babi_execution' in ex.args[0]:
|
|
+ return []
|
|
+ raise
|
|
related_records = Model.browse([x[0] for x in cursor])
|
|
else:
|
|
with inactive_records():
|
|
diff --git a/tryton/trytond/trytond/ir/model.py b/tryton/trytond/trytond/ir/model.py
|
|
index 6304018f24..1ea08d8be5 100644
|
|
--- a/tryton/trytond/trytond/ir/model.py
|
|
+++ b/tryton/trytond/trytond/ir/model.py
|
|
@@ -555,8 +555,14 @@ class ModelAccess(DeactivableMixin, ModelSQL, ModelView):
|
|
fill_models(field.get_target(), models)
|
|
model2models = defaultdict(list)
|
|
for model in models:
|
|
- fill_models(pool.get(model), model2models[model])
|
|
-
|
|
+ try:
|
|
+ fill_models(pool.get(model), model2models[model])
|
|
+ except KeyError as err:
|
|
+ if 'babi_execution_' in str(err):
|
|
+ models.remove(model)
|
|
+ continue
|
|
+ else:
|
|
+ raise
|
|
all_models = list(set(sum(model2models.values(), [])))
|
|
default = {'read': True, 'write': True, 'create': True, 'delete': True}
|
|
default_singleton = {
|