Change Pool into a Singleton
review42001
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
* Change Pool into a Singleton
|
||||
* Remove support of zipped modules
|
||||
|
||||
Version 2.0.0 - 2011-04-26
|
||||
|
||||
@@ -508,7 +508,7 @@ A many-to-many relation field.
|
||||
|
||||
Instance methods:
|
||||
|
||||
.. method:: Many2Many.get_target(pool)
|
||||
.. method:: Many2Many.get_target()
|
||||
|
||||
Return the target :class:`~trytond.model.Model`.
|
||||
|
||||
@@ -530,7 +530,7 @@ A one-to-one relation field.
|
||||
|
||||
Instance methods:
|
||||
|
||||
.. method:: One2One.get_target(pool)
|
||||
.. method:: One2One.get_target()
|
||||
|
||||
Return the target :class:`~trytond.model.Model`.
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ When defining an `ir.action.report` the following attributes are available:
|
||||
* ``name``: The name of the report.
|
||||
|
||||
* ``report_name``: The name of the report model, for example
|
||||
my_module.my_report. This is the name you would use with `pool.get`
|
||||
my_module.my_report. This is the name you would use with `Pool().get`
|
||||
|
||||
* ``module_name``: If this report is of an existing model this is its name.
|
||||
For example my_module.my_model. Custom reports that aren't of a specific
|
||||
@@ -228,7 +228,7 @@ context. Now the invoice report will be able to access the employee object.
|
||||
class InvoiceReport(Report):
|
||||
_name = 'account.invoice'
|
||||
def parse(self, report, objects, datas, localcontext):
|
||||
employee_obj = self.pool.get('company.employee')
|
||||
employee_obj = Pool().get('company.employee')
|
||||
employee = False
|
||||
if Transaction().context.get('employee'):
|
||||
employee = employee_obj.browse(Transaction().context['employee'])
|
||||
|
||||
+3
-2
@@ -1,6 +1,7 @@
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class WarningErrorMixin(object):
|
||||
@@ -24,7 +25,7 @@ class WarningErrorMixin(object):
|
||||
(or tuple if error_description is not empty) instead of raising an
|
||||
exception.
|
||||
'''
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
translation_obj = Pool().get('ir.translation')
|
||||
|
||||
error = self._error_messages.get(error, error)
|
||||
|
||||
@@ -92,7 +93,7 @@ class WarningErrorMixin(object):
|
||||
:param warning_description_args: the arguments that will be used
|
||||
for "%"-based substitution
|
||||
'''
|
||||
warning_obj = self.pool.get('res.user.warning')
|
||||
warning_obj = Pool().get('res.user.warning')
|
||||
if warning_obj.check(warning_name):
|
||||
if warning_description:
|
||||
warning, warning_description = self.raise_user_error(warning,
|
||||
|
||||
+26
-13
@@ -9,6 +9,7 @@ from trytond.backend import TableHandler
|
||||
from trytond.pyson import PYSONEncoder, CONTEXT, PYSON
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Action(ModelSQL, ModelView):
|
||||
@@ -38,6 +39,7 @@ class Action(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def get_action_id(self, action_id):
|
||||
pool = Pool()
|
||||
with Transaction().set_context(active_test=False):
|
||||
if self.search([
|
||||
('id', '=', action_id),
|
||||
@@ -49,7 +51,7 @@ class Action(ModelSQL, ModelView):
|
||||
'ir.action.wizard',
|
||||
'ir.action.url',
|
||||
):
|
||||
action_obj = self.pool.get(action_type)
|
||||
action_obj = pool.get(action_type)
|
||||
action_id2 = action_obj.search([
|
||||
('id', '=', action_id),
|
||||
])
|
||||
@@ -88,7 +90,8 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
})
|
||||
|
||||
def check_wizard_model(self, ids):
|
||||
action_wizard_obj = self.pool.get('ir.action.wizard')
|
||||
pool = Pool()
|
||||
action_wizard_obj = pool.get('ir.action.wizard')
|
||||
for action_keyword in self.browse(ids):
|
||||
if action_keyword.action.type == 'ir.action.wizard':
|
||||
action_wizard_id = action_wizard_obj.search([
|
||||
@@ -103,13 +106,15 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
|
||||
def _convert_vals(self, vals):
|
||||
vals = vals.copy()
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
if 'action' in vals:
|
||||
vals['action'] = action_obj.get_action_id(vals['action'])
|
||||
return vals
|
||||
|
||||
def models_get(self):
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_obj = pool.get('ir.model')
|
||||
model_ids = model_obj.search([])
|
||||
res = []
|
||||
for model in model_obj.browse(model_ids):
|
||||
@@ -117,36 +122,39 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
pool = Pool()
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
for keyword in self.browse(ids):
|
||||
# Restart the cache view
|
||||
try:
|
||||
self.pool.get(keyword.model.split(',')[0]
|
||||
pool.get(keyword.model.split(',')[0]
|
||||
).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
return super(ActionKeyword, self).delete(ids)
|
||||
|
||||
def create(self, vals):
|
||||
pool = Pool()
|
||||
vals = self._convert_vals(vals)
|
||||
if 'model' in vals:
|
||||
# Restart the cache view
|
||||
try:
|
||||
self.pool.get(vals['model'].split(',')[0]
|
||||
pool.get(vals['model'].split(',')[0]
|
||||
).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
return super(ActionKeyword, self).create(vals)
|
||||
|
||||
def write(self, ids, vals):
|
||||
pool = Pool()
|
||||
vals = self._convert_vals(vals)
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
for keyword in self.browse(ids):
|
||||
# Restart the cache view
|
||||
try:
|
||||
self.pool.get(keyword.model.split(',')[0]
|
||||
pool.get(keyword.model.split(',')[0]
|
||||
).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
@@ -154,13 +162,14 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
for keyword in self.browse(ids):
|
||||
# Restart the cache view
|
||||
try:
|
||||
self.pool.get(keyword.model.split(',')[0]
|
||||
pool.get(keyword.model.split(',')[0]
|
||||
).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
return res
|
||||
|
||||
def get_keyword(self, keyword, value):
|
||||
pool = Pool()
|
||||
res = []
|
||||
model, model_id = value
|
||||
|
||||
@@ -176,7 +185,7 @@ class ActionKeyword(ModelSQL, ModelView):
|
||||
]))
|
||||
for action_keyword in self.browse(action_keyword_ids):
|
||||
try:
|
||||
action_obj = self.pool.get(action_keyword.action.type)
|
||||
action_obj = pool.get(action_keyword.action.type)
|
||||
except Exception:
|
||||
continue
|
||||
action_id = action_obj.search([
|
||||
@@ -369,7 +378,8 @@ class ActionReport(ModelSQL, ModelView):
|
||||
return super(ActionReport, self).write(ids, vals)
|
||||
|
||||
def delete(self, ids):
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -563,7 +573,8 @@ class ActionActWindow(ModelSQL, ModelView):
|
||||
return new_id
|
||||
|
||||
def delete(self, ids):
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -639,7 +650,8 @@ class ActionWizard(ModelSQL, ModelView):
|
||||
return new_id
|
||||
|
||||
def delete(self, ids):
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -773,7 +785,8 @@ class ActionURL(ModelSQL, ModelView):
|
||||
return new_id
|
||||
|
||||
def delete(self, ids):
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
|
||||
@@ -13,6 +13,7 @@ from trytond.config import CONFIG
|
||||
from trytond.backend import TableHandler
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pyson import Not, Equal, Eval
|
||||
from trytond.pool import Pool
|
||||
|
||||
def firstline(description):
|
||||
try:
|
||||
@@ -84,7 +85,8 @@ class Attachment(ModelSQL, ModelView):
|
||||
return 0
|
||||
|
||||
def models_get(self):
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_obj = pool.get('ir.model')
|
||||
model_ids = model_obj.search([])
|
||||
res = []
|
||||
for model in model_obj.browse(model_ids):
|
||||
@@ -189,7 +191,8 @@ class Attachment(ModelSQL, ModelView):
|
||||
|
||||
|
||||
def check_access(self, ids, mode='read'):
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
pool = Pool()
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
if Transaction().user == 0:
|
||||
return
|
||||
if not ids:
|
||||
@@ -224,7 +227,8 @@ class Attachment(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def view_header_get(self, value, view_type='form'):
|
||||
ir_model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
ir_model_obj = pool.get('ir.model')
|
||||
value = super(Attachment, self).view_header_get(value,
|
||||
view_type=view_type)
|
||||
resource = Transaction().context.get('resource')
|
||||
@@ -232,7 +236,7 @@ class Attachment(ModelSQL, ModelView):
|
||||
model_name, record_id = resource.split(',', 1)
|
||||
ir_model_id, = ir_model_obj.search([('model', '=', model_name)])
|
||||
ir_model = ir_model_obj.browse(ir_model_id)
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
record = model_obj.browse(int(record_id))
|
||||
value = '%s - %s - %s' % (ir_model.name, record.rec_name, value)
|
||||
return value
|
||||
|
||||
+4
-2
@@ -11,6 +11,7 @@ from trytond.backend import Database
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.tools import safe_eval
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
from trytond.backend import TableHandler
|
||||
|
||||
_INTERVALTYPES = {
|
||||
@@ -130,15 +131,16 @@ class Cron(ModelSQL, ModelView):
|
||||
return values
|
||||
|
||||
def _callback(self, cron):
|
||||
pool = Pool()
|
||||
try:
|
||||
args = (cron.args or []) and safe_eval(cron.args)
|
||||
model_obj = self.pool.get(cron.model)
|
||||
model_obj = pool.get(cron.model)
|
||||
with Transaction().set_user(cron.user.id):
|
||||
getattr(model_obj, cron.function)(*args)
|
||||
except Exception, error:
|
||||
Transaction().cursor.rollback()
|
||||
|
||||
request_obj = self.pool.get('res.request')
|
||||
request_obj = pool.get('res.request')
|
||||
req_user = cron.request_user
|
||||
language = (req_user.language.code if req_user.language
|
||||
else 'en_US')
|
||||
|
||||
+3
-1
@@ -7,6 +7,7 @@ from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.model.cacheable import Cacheable
|
||||
from trytond.tools import safe_eval, datetime_strftime
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
from time_locale import TIME_LOCALE
|
||||
from locale import CHAR_MAX
|
||||
|
||||
@@ -57,7 +58,8 @@ class Lang(ModelSQL, ModelView, Cacheable):
|
||||
return [('name',) + clause[1:]]
|
||||
|
||||
def read(self, ids, fields_names=None):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
res = super(Lang, self).read(ids, fields_names=fields_names)
|
||||
if (Transaction().context.get('translate_name')
|
||||
and (not fields_names or 'name' in fields_names)):
|
||||
|
||||
+33
-18
@@ -8,6 +8,7 @@ from trytond.report import Report
|
||||
from trytond.wizard import Wizard
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pool import Pool
|
||||
IDENTIFIER = re.compile(r'^[a-zA-z_][a-zA-Z0-9_]*$')
|
||||
|
||||
|
||||
@@ -47,21 +48,24 @@ class Model(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def create(self, vals):
|
||||
property_obj = self.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
res = super(Model, self).create(vals)
|
||||
# Restart the cache of models_get
|
||||
property_obj.models_get.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
property_obj = self.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
res = super(Model, self).write(ids, vals)
|
||||
# Restart the cache of models_get
|
||||
property_obj.models_get.reset()
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
property_obj = self.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
res = super(Model, self).delete(ids)
|
||||
# Restart the cache of models_get
|
||||
property_obj.models_get.reset()
|
||||
@@ -117,7 +121,8 @@ class ModelField(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def read(self, ids, fields_names=None):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
|
||||
to_delete = []
|
||||
if Transaction().context.get('language'):
|
||||
@@ -249,8 +254,9 @@ class ModelAccess(ModelSQL, ModelView):
|
||||
if Transaction().user == 0:
|
||||
return True
|
||||
|
||||
ir_model_obj = self.pool.get('ir.model')
|
||||
user_group_obj = self.pool.get('res.user-res.group')
|
||||
pool = Pool()
|
||||
ir_model_obj = pool.get('ir.model')
|
||||
user_group_obj = pool.get('res.user-res.group')
|
||||
cursor = Transaction().cursor
|
||||
|
||||
cursor.execute('SELECT MAX(CASE WHEN a.perm_%s THEN 1 ELSE 0 END) '
|
||||
@@ -275,7 +281,8 @@ class ModelAccess(ModelSQL, ModelView):
|
||||
res = super(ModelAccess, self).write(ids, vals)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -286,7 +293,8 @@ class ModelAccess(ModelSQL, ModelView):
|
||||
res = super(ModelAccess, self).create(vals)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -297,7 +305,8 @@ class ModelAccess(ModelSQL, ModelView):
|
||||
res = super(ModelAccess, self).delete(ids)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -359,9 +368,10 @@ class ModelFieldAccess(ModelSQL, ModelView):
|
||||
return dict((x, True) for x in fields)
|
||||
return True
|
||||
|
||||
ir_model_obj = self.pool.get('ir.model')
|
||||
ir_model_field_obj = self.pool.get('ir.model.field')
|
||||
user_group_obj = self.pool.get('res.user-res.group')
|
||||
pool = Pool()
|
||||
ir_model_obj = pool.get('ir.model')
|
||||
ir_model_field_obj = pool.get('ir.model.field')
|
||||
user_group_obj = pool.get('res.user-res.group')
|
||||
|
||||
cursor = Transaction().cursor
|
||||
|
||||
@@ -394,7 +404,8 @@ class ModelFieldAccess(ModelSQL, ModelView):
|
||||
res = super(ModelFieldAccess, self).write(ids, vals)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -405,7 +416,8 @@ class ModelFieldAccess(ModelSQL, ModelView):
|
||||
res = super(ModelFieldAccess, self).create(vals)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -416,7 +428,8 @@ class ModelFieldAccess(ModelSQL, ModelView):
|
||||
res = super(ModelFieldAccess, self).delete(ids)
|
||||
# Restart the cache
|
||||
self.check.reset()
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -525,8 +538,9 @@ class ModelGraph(Report):
|
||||
|
||||
def execute(self, ids, datas):
|
||||
import pydot
|
||||
model_obj = self.pool.get('ir.model')
|
||||
action_report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
model_obj = pool.get('ir.model')
|
||||
action_report_obj = pool.get('ir.action.report')
|
||||
|
||||
if not datas['form']['filter']:
|
||||
filter = None
|
||||
@@ -560,7 +574,8 @@ class ModelGraph(Report):
|
||||
models
|
||||
'''
|
||||
import pydot
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_obj = pool.get('ir.model')
|
||||
|
||||
sub_models = set()
|
||||
if level > 0:
|
||||
|
||||
+21
-14
@@ -216,7 +216,8 @@ class Module(ModelSQL, ModelView):
|
||||
|
||||
# update the list of available packages
|
||||
def update_list(self):
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
res = 0
|
||||
with Transaction().set_context(language=False):
|
||||
lang_ids = lang_obj.search([
|
||||
@@ -313,7 +314,8 @@ class Module(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def _update_dependencies(self, module, depends=None):
|
||||
dependency_obj = self.pool.get('ir.module.module.dependency')
|
||||
pool = Pool()
|
||||
dependency_obj = pool.get('ir.module.module.dependency')
|
||||
dependency_obj.delete([x.id for x in module.dependencies
|
||||
if x.name not in depends])
|
||||
if depends is None:
|
||||
@@ -354,7 +356,8 @@ class ModuleDependency(ModelSQL, ModelView):
|
||||
|
||||
def get_state(self, ids, name):
|
||||
result = {}
|
||||
module_obj = self.pool.get('ir.module.module')
|
||||
pool = Pool()
|
||||
module_obj = pool.get('ir.module.module')
|
||||
for dependency in self.browse(ids):
|
||||
ids = module_obj.search([
|
||||
('name', '=', dependency.name),
|
||||
@@ -442,7 +445,8 @@ class ModuleConfigWizard(Wizard):
|
||||
return res
|
||||
|
||||
def _action_wizard(self, data):
|
||||
item_obj = self.pool.get('ir.module.module.config_wizard.item')
|
||||
pool = Pool()
|
||||
item_obj = pool.get('ir.module.module.config_wizard.item')
|
||||
item_ids = item_obj.search([
|
||||
('state', '=', 'open'),
|
||||
], limit=1)
|
||||
@@ -458,7 +462,8 @@ class ModuleConfigWizard(Wizard):
|
||||
return {}
|
||||
|
||||
def _next(self, data):
|
||||
item_obj = self.pool.get('ir.module.module.config_wizard.item')
|
||||
pool = Pool()
|
||||
item_obj = pool.get('ir.module.module.config_wizard.item')
|
||||
item_ids = item_obj.search([
|
||||
('state', '=', 'open'),
|
||||
])
|
||||
@@ -491,7 +496,8 @@ class ModuleInstallUpgrade(Wizard):
|
||||
_name = 'ir.module.module.install_upgrade'
|
||||
|
||||
def _get_install(self, data):
|
||||
module_obj = self.pool.get('ir.module.module')
|
||||
pool = Pool()
|
||||
module_obj = pool.get('ir.module.module')
|
||||
module_ids = module_obj.search([
|
||||
('state', 'in', ['to upgrade', 'to remove', 'to install']),
|
||||
])
|
||||
@@ -502,9 +508,9 @@ class ModuleInstallUpgrade(Wizard):
|
||||
}
|
||||
|
||||
def _upgrade_module(self, data):
|
||||
module_obj = self.pool.get('ir.module.module')
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
dbname = Transaction().cursor.dbname
|
||||
pool = Pool()
|
||||
module_obj = pool.get('ir.module.module')
|
||||
lang_obj = pool.get('ir.lang')
|
||||
with Transaction().new_cursor() as transaction:
|
||||
module_ids = module_obj.search([
|
||||
('state', 'in', ['to upgrade', 'to remove', 'to install']),
|
||||
@@ -515,7 +521,6 @@ class ModuleInstallUpgrade(Wizard):
|
||||
lang = [x.code for x in lang_obj.browse(lang_ids)]
|
||||
transaction.cursor.commit()
|
||||
if module_ids:
|
||||
pool = Pool(dbname)
|
||||
pool.init(update=True, lang=lang)
|
||||
new_wizard = pool.get('ir.module.module.install_upgrade',
|
||||
type='wizard')
|
||||
@@ -563,8 +568,9 @@ class ModuleInstallUpgrade(Wizard):
|
||||
}
|
||||
|
||||
def _menu(self, data):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
act_window_obj = self.pool.get('ir.action.act_window')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
act_window_obj = pool.get('ir.action.act_window')
|
||||
act_window_id = model_data_obj.get_id('ir', 'act_menu_tree')
|
||||
res = act_window_obj.read(act_window_id)
|
||||
return res
|
||||
@@ -592,8 +598,9 @@ class ModuleConfig(Wizard):
|
||||
}
|
||||
|
||||
def _action_open(self, datas):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
act_window_obj = self.pool.get('ir.action.act_window')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
act_window_obj = pool.get('ir.action.act_window')
|
||||
act_window_id = model_data_obj.get_id('ir', 'act_module_form')
|
||||
res = act_window_obj.read(act_window_id)
|
||||
return res
|
||||
|
||||
@@ -5,6 +5,7 @@ from decimal import Decimal
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Property(ModelSQL, ModelView):
|
||||
@@ -32,7 +33,8 @@ class Property(ModelSQL, ModelView):
|
||||
:param res_ids: a list of record ids
|
||||
:return: a dictionary
|
||||
"""
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
pool = Pool()
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
res = {}
|
||||
|
||||
model_access_obj.check(model, 'read')
|
||||
@@ -44,7 +46,7 @@ class Property(ModelSQL, ModelView):
|
||||
if res_ids is None:
|
||||
res_ids = []
|
||||
|
||||
model_obj = self.pool.get(model)
|
||||
model_obj = pool.get(model)
|
||||
fields = dict((name, field)
|
||||
for name, field in model_obj._columns.iteritems()
|
||||
if name in names)
|
||||
@@ -126,8 +128,9 @@ class Property(ModelSQL, ModelView):
|
||||
:param val: the value
|
||||
:return: the id of the record created
|
||||
"""
|
||||
model_field_obj = self.pool.get('ir.model.field')
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
pool = Pool()
|
||||
model_field_obj = pool.get('ir.model.field')
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
|
||||
model_access_obj.check(model, 'write')
|
||||
|
||||
@@ -135,7 +138,7 @@ class Property(ModelSQL, ModelView):
|
||||
('name', '=', name),
|
||||
('model.model', '=', model),
|
||||
], order=[], limit=1)[0]
|
||||
model_obj = self.pool.get(model)
|
||||
model_obj = pool.get(model)
|
||||
field = model_obj._columns[name]
|
||||
|
||||
property_ids = self.search([
|
||||
|
||||
+13
-11
@@ -9,6 +9,7 @@ from trytond.pyson import Eval, Get
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.const import OPERATORS
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class RuleGroup(ModelSQL, ModelView):
|
||||
@@ -65,19 +66,19 @@ class RuleGroup(ModelSQL, ModelView):
|
||||
def delete(self, ids):
|
||||
res = super(RuleGroup, self).delete(ids)
|
||||
# Restart the cache on the domain_get method of ir.rule
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def create(self, vals):
|
||||
res = super(RuleGroup, self).create(vals)
|
||||
# Restart the cache on the domain_get method of ir.rule
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
res = super(RuleGroup, self).write(ids, vals)
|
||||
# Restart the cache on the domain_get method of ir.rule
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
RuleGroup()
|
||||
@@ -115,7 +116,7 @@ class Rule(ModelSQL, ModelView):
|
||||
if not recur:
|
||||
recur = []
|
||||
with Transaction().set_context(language='en_US'):
|
||||
obj_fields = self.pool.get(obj_name).fields_get()
|
||||
obj_fields = Pool().get(obj_name).fields_get()
|
||||
key = obj_fields.keys()
|
||||
key.sort()
|
||||
for k in key:
|
||||
@@ -158,12 +159,13 @@ class Rule(ModelSQL, ModelView):
|
||||
with Transaction().set_user(Transaction().context['user']):
|
||||
return self.domain_get(model_name)
|
||||
|
||||
rule_group_obj = self.pool.get('ir.rule.group')
|
||||
model_obj = self.pool.get('ir.model')
|
||||
rule_group_user_obj = self.pool.get('ir.rule.group-res.user')
|
||||
rule_group_group_obj = self.pool.get('ir.rule.group-res.group')
|
||||
user_group_obj = self.pool.get('res.user-res.group')
|
||||
user_obj = self.pool.get('res.user')
|
||||
pool = Pool()
|
||||
rule_group_obj = pool.get('ir.rule.group')
|
||||
model_obj = pool.get('ir.model')
|
||||
rule_group_user_obj = pool.get('ir.rule.group-res.user')
|
||||
rule_group_group_obj = pool.get('ir.rule.group-res.group')
|
||||
user_group_obj = pool.get('res.user-res.group')
|
||||
user_obj = pool.get('res.user')
|
||||
|
||||
cursor = Transaction().cursor
|
||||
cursor.execute('SELECT r.id FROM "' + self._table + '" r ' \
|
||||
@@ -187,7 +189,7 @@ class Rule(ModelSQL, ModelView):
|
||||
ids = [x[0] for x in cursor.fetchall()]
|
||||
if not ids:
|
||||
return '', []
|
||||
obj = self.pool.get(model_name)
|
||||
obj = pool.get(model_name)
|
||||
clause = {}
|
||||
clause_global = {}
|
||||
operand2query = self._operand_get('res.user', level=1,
|
||||
|
||||
@@ -8,6 +8,7 @@ from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.tools import datetime_strftime
|
||||
from trytond.pyson import In, Eval, Not
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class SequenceType(ModelSQL, ModelView):
|
||||
@@ -105,7 +106,8 @@ class Sequence(ModelSQL, ModelView):
|
||||
return Transaction().context.get('code', False)
|
||||
|
||||
def code_get(self):
|
||||
sequence_type_obj = self.pool.get('ir.sequence.type')
|
||||
pool = Pool()
|
||||
sequence_type_obj = pool.get('ir.sequence.type')
|
||||
sequence_type_ids = sequence_type_obj.search([])
|
||||
sequence_types = sequence_type_obj.browse(sequence_type_ids)
|
||||
return [(x.code, x.name) for x in sequence_types]
|
||||
@@ -131,7 +133,8 @@ class Sequence(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def _process(self, string, date=None):
|
||||
date_obj = self.pool.get('ir.date')
|
||||
pool = Pool()
|
||||
date_obj = pool.get('ir.date')
|
||||
if not date:
|
||||
date = date_obj.today()
|
||||
year = datetime_strftime(date, '%Y')
|
||||
|
||||
+49
-35
@@ -25,6 +25,7 @@ from trytond.tools import file_open, reduce_ids
|
||||
from trytond.backend import TableHandler, FIELDS
|
||||
from trytond.pyson import PYSONEncoder
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
TRANSLATION_TYPE = [
|
||||
('field', 'Field'),
|
||||
@@ -143,7 +144,8 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
return [('id', 'in', [x[0] for x in cursor.fetchall()])]
|
||||
|
||||
def get_language(self):
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
lang_ids = lang_obj.search([])
|
||||
langs = lang_obj.browse(lang_ids)
|
||||
res = [(lang.code, lang.name) for lang in langs]
|
||||
@@ -153,8 +155,9 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
return md5((src or '').encode('utf-8')).hexdigest()
|
||||
|
||||
def _get_ids(self, name, ttype, lang, ids):
|
||||
model_fields_obj = self.pool.get('ir.model.field')
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_fields_obj = pool.get('ir.model.field')
|
||||
model_obj = pool.get('ir.model')
|
||||
|
||||
translations, to_fetch = {}, []
|
||||
name = unicode(name)
|
||||
@@ -220,8 +223,9 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
return translations
|
||||
|
||||
def _set_ids(self, name, ttype, lang, ids, value):
|
||||
model_fields_obj = self.pool.get('ir.model.field')
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_fields_obj = pool.get('ir.model.field')
|
||||
model_obj = pool.get('ir.model')
|
||||
|
||||
if lang == 'en_US':
|
||||
return 0
|
||||
@@ -262,7 +266,7 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
'fuzzy': False,
|
||||
})
|
||||
return len(ids)
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
for record in model_obj.browse(ids):
|
||||
ids2 = self.search([
|
||||
('lang', '=', lang),
|
||||
@@ -439,7 +443,8 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
return super(Translation, self).write(ids, vals)
|
||||
|
||||
def translation_import(self, lang, module, datas):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
model_data_ids = model_data_obj.search([
|
||||
('module', '=', module),
|
||||
])
|
||||
@@ -537,7 +542,8 @@ class Translation(ModelSQL, ModelView, Cacheable):
|
||||
return len(translation_ids)
|
||||
|
||||
def translation_export(self, lang, module):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
|
||||
model_data_ids = model_data_obj.search([
|
||||
('module', '=', module),
|
||||
@@ -651,8 +657,9 @@ class ReportTranslationSet(Wizard):
|
||||
return strings
|
||||
|
||||
def _set_report_translation(self, data):
|
||||
report_obj = self.pool.get('ir.action.report')
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
report_obj = pool.get('ir.action.report')
|
||||
translation_obj = pool.get('ir.translation')
|
||||
|
||||
with Transaction().set_context(active_test=False):
|
||||
report_ids = report_obj.search([])
|
||||
@@ -808,9 +815,10 @@ class TranslationClean(Wizard):
|
||||
}
|
||||
|
||||
def _clean_translation(self, data):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
report_obj = pool.get('ir.action.report')
|
||||
|
||||
offset = 0
|
||||
cursor = Transaction().cursor
|
||||
@@ -829,10 +837,10 @@ class TranslationClean(Wizard):
|
||||
except ValueError:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if model_name not in self.pool.object_name_list():
|
||||
if model_name not in pool.object_name_list():
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
if field_name not in model_obj._columns:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
@@ -842,11 +850,11 @@ class TranslationClean(Wizard):
|
||||
except ValueError:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if model_name not in self.pool.object_name_list():
|
||||
if model_name not in pool.object_name_list():
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if translation.res_id:
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
if field_name not in model_obj._columns:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
@@ -871,10 +879,10 @@ class TranslationClean(Wizard):
|
||||
except ValueError:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if model_name not in self.pool.object_name_list():
|
||||
if model_name not in pool.object_name_list():
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
if field_name not in model_obj._columns:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
@@ -891,7 +899,7 @@ class TranslationClean(Wizard):
|
||||
continue
|
||||
elif translation.type == 'view':
|
||||
model_name = translation.name
|
||||
if model_name not in self.pool.object_name_list():
|
||||
if model_name not in pool.object_name_list():
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
elif translation.type == 'wizard_button':
|
||||
@@ -902,10 +910,10 @@ class TranslationClean(Wizard):
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if wizard_name not in \
|
||||
self.pool.object_name_list(type='wizard'):
|
||||
pool.object_name_list(type='wizard'):
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
wizard = self.pool.get(wizard_name, type='wizard')
|
||||
wizard = pool.get(wizard_name, type='wizard')
|
||||
if not wizard:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
@@ -926,10 +934,10 @@ class TranslationClean(Wizard):
|
||||
except ValueError:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
if model_name not in self.pool.object_name_list():
|
||||
if model_name not in pool.object_name_list():
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
if field_name not in model_obj._columns:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
@@ -962,8 +970,8 @@ class TranslationClean(Wizard):
|
||||
'search_function_missing',
|
||||
):
|
||||
continue
|
||||
if model_name in self.pool.object_name_list():
|
||||
model_obj = self.pool.get(model_name)
|
||||
if model_name in pool.object_name_list():
|
||||
model_obj = pool.get(model_name)
|
||||
errors = model_obj._error_messages.values() + \
|
||||
model_obj._sql_error_messages.values()
|
||||
for _, _, error in model_obj._sql_constraints:
|
||||
@@ -971,8 +979,8 @@ class TranslationClean(Wizard):
|
||||
if translation.src not in errors:
|
||||
to_delete.append(translation.id)
|
||||
continue
|
||||
elif model_name in self.pool.object_name_list(type='wizard'):
|
||||
wizard_obj = self.pool.get(model_name, type='wizard')
|
||||
elif model_name in pool.object_name_list(type='wizard'):
|
||||
wizard_obj = pool.get(model_name, type='wizard')
|
||||
errors = wizard_obj._error_messages.values()
|
||||
if translation.src not in errors:
|
||||
to_delete.append(translation.id)
|
||||
@@ -1006,7 +1014,8 @@ class TranslationUpdateInit(ModelView):
|
||||
return Transaction().context.get('language', False)
|
||||
|
||||
def get_language(self):
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
lang_ids = lang_obj.search([('translatable', '=', True)])
|
||||
langs = lang_obj.browse(lang_ids)
|
||||
res = [(lang.code, lang.name) for lang in langs if lang.code != 'en_US']
|
||||
@@ -1020,7 +1029,8 @@ class TranslationUpdate(Wizard):
|
||||
_name = "ir.translation.update"
|
||||
|
||||
def _update_translation(self, data):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
cursor = Transaction().cursor
|
||||
cursor.execute('SELECT name, res_id, type, src, module ' \
|
||||
'FROM ir_translation ' \
|
||||
@@ -1108,8 +1118,9 @@ class TranslationUpdate(Wizard):
|
||||
return {}
|
||||
|
||||
def _action_translation_open(self, data):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
act_window_obj = self.pool.get('ir.action.act_window')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
act_window_obj = pool.get('ir.action.act_window')
|
||||
|
||||
model_data_ids = model_data_obj.search([
|
||||
('fs_id', '=', 'act_translation_form'),
|
||||
@@ -1162,7 +1173,8 @@ class TranslationExportInit(ModelView):
|
||||
return Transaction().context.get('language', False)
|
||||
|
||||
def get_language(self):
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
lang_ids = lang_obj.search([
|
||||
('translatable', '=', True),
|
||||
])
|
||||
@@ -1171,7 +1183,8 @@ class TranslationExportInit(ModelView):
|
||||
return res
|
||||
|
||||
def get_module(self):
|
||||
module_obj = self.pool.get('ir.module.module')
|
||||
pool = Pool()
|
||||
module_obj = pool.get('ir.module.module')
|
||||
module_ids = module_obj.search([
|
||||
('state', 'in', ['installed', 'to upgrade', 'to remove']),
|
||||
])
|
||||
@@ -1196,7 +1209,8 @@ class TranslationExport(Wizard):
|
||||
_name = "ir.translation.export"
|
||||
|
||||
def _export_translation(self, data):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
file_data = translation_obj.translation_export(data['form']['lang'],
|
||||
data['form']['module'])
|
||||
return {
|
||||
|
||||
@@ -9,6 +9,7 @@ from trytond.backend import TableHandler
|
||||
from trytond.tools import reduce_ids
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Trigger(ModelSQL, ModelView):
|
||||
@@ -135,7 +136,8 @@ class Trigger(ModelSQL, ModelView):
|
||||
:param record: a BrowseRecord of the tested model
|
||||
:return: a boolean
|
||||
"""
|
||||
model_obj = self.pool.get(trigger.model.model)
|
||||
pool = Pool()
|
||||
model_obj = pool.get(trigger.model.model)
|
||||
env = {}
|
||||
env['current_date'] = datetime.datetime.today()
|
||||
env['time'] = time
|
||||
@@ -150,9 +152,10 @@ class Trigger(ModelSQL, ModelView):
|
||||
:param ids: the list of record ids triggered
|
||||
:param trigger_id: the trigger id
|
||||
"""
|
||||
trigger_log_obj = self.pool.get('ir.trigger.log')
|
||||
pool = Pool()
|
||||
trigger_log_obj = pool.get('ir.trigger.log')
|
||||
trigger = self.browse(trigger_id)
|
||||
model_obj = self.pool.get(trigger.action_model.model)
|
||||
model_obj = pool.get(trigger.action_model.model)
|
||||
cursor = Transaction().cursor
|
||||
|
||||
# Filter on limit_number
|
||||
@@ -220,11 +223,12 @@ class Trigger(ModelSQL, ModelView):
|
||||
'''
|
||||
Trigger time actions
|
||||
'''
|
||||
pool = Pool()
|
||||
trigger_ids = self.search([
|
||||
('on_time', '=', True),
|
||||
])
|
||||
for trigger in self.browse(trigger_ids):
|
||||
model_obj = self.pool.get(trigger.model.model)
|
||||
model_obj = pool.get(trigger.model.model)
|
||||
triggered_ids = []
|
||||
# TODO add a domain
|
||||
record_ids = model_obj.search([])
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
from __future__ import with_statement
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
def one_in(i, j):
|
||||
"""Check the presence of an element of setA in setB
|
||||
@@ -106,7 +107,8 @@ class UIMenu(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def list_icons(self):
|
||||
icon_obj = self.pool.get('ir.ui.icon')
|
||||
pool = Pool()
|
||||
icon_obj = pool.get('ir.ui.icon')
|
||||
return sorted(CLIENT_ICONS
|
||||
+ [(name, name) for _, name in icon_obj.list_icons()])
|
||||
|
||||
@@ -166,7 +168,8 @@ class UIMenu(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def get_action(self, ids, name):
|
||||
action_keyword_obj = self.pool.get('ir.action.keyword')
|
||||
pool = Pool()
|
||||
action_keyword_obj = pool.get('ir.action.keyword')
|
||||
res = {}
|
||||
for menu_id in ids:
|
||||
res[menu_id] = False
|
||||
@@ -178,7 +181,7 @@ class UIMenu(ModelSQL, ModelView):
|
||||
for action_keyword in action_keyword_obj.browse(action_keyword_ids):
|
||||
model_id = int(
|
||||
action_keyword.model.split(',')[1].split(',')[0].strip('('))
|
||||
action_obj = self.pool.get(action_keyword.action.type)
|
||||
action_obj = pool.get(action_keyword.action.type)
|
||||
with Transaction().set_context(active_test=False):
|
||||
action_id = action_obj.search([
|
||||
('action', '=', action_keyword.action.id),
|
||||
@@ -193,7 +196,8 @@ class UIMenu(ModelSQL, ModelView):
|
||||
def set_action(self, ids, name, value):
|
||||
if not value:
|
||||
return
|
||||
action_keyword_obj = self.pool.get('ir.action.keyword')
|
||||
pool = Pool()
|
||||
action_keyword_obj = pool.get('ir.action.keyword')
|
||||
action_keyword_ids = []
|
||||
cursor = Transaction().cursor
|
||||
for i in range(0, len(ids), cursor.IN_MAX):
|
||||
@@ -209,7 +213,7 @@ class UIMenu(ModelSQL, ModelView):
|
||||
action_type, action_id = value.split(',')
|
||||
if not int(action_id):
|
||||
return
|
||||
action_obj = self.pool.get(action_type)
|
||||
action_obj = pool.get(action_type)
|
||||
action = action_obj.browse(int(action_id))
|
||||
for menu_id in ids:
|
||||
with Transaction().set_context(_timestamp=False):
|
||||
|
||||
+23
-13
@@ -11,6 +11,7 @@ from trytond.pyson import PYSONEncoder, CONTEXT, Eval, Not, Bool, Equal
|
||||
from trytond.tools import safe_eval
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.wizard import Wizard
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class View(ModelSQL, ModelView):
|
||||
@@ -66,7 +67,8 @@ class View(ModelSQL, ModelView):
|
||||
|
||||
def check_xml(self, ids):
|
||||
"Check XML"
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
cursor = Transaction().cursor
|
||||
views = self.browse(ids)
|
||||
for view in views:
|
||||
@@ -188,7 +190,8 @@ class View(ModelSQL, ModelView):
|
||||
def delete(self, ids):
|
||||
res = super(View, self).delete(ids)
|
||||
# Restart the cache
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -198,7 +201,8 @@ class View(ModelSQL, ModelView):
|
||||
def create(self, vals):
|
||||
res = super(View, self).create(vals)
|
||||
# Restart the cache
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -208,7 +212,8 @@ class View(ModelSQL, ModelView):
|
||||
def write(self, ids, vals):
|
||||
res = super(View, self).write(ids, vals)
|
||||
# Restart the cache
|
||||
for _, model in self.pool.iterobject():
|
||||
pool = Pool()
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -274,8 +279,9 @@ class AddShortcut(Wizard):
|
||||
}
|
||||
|
||||
def _add_shortcut(self, data):
|
||||
view_sc_obj = self.pool.get('ir.ui.view_sc')
|
||||
model_obj = self.pool.get(data['model'])
|
||||
pool = Pool()
|
||||
view_sc_obj = pool.get('ir.ui.view_sc')
|
||||
model_obj = pool.get(data['model'])
|
||||
|
||||
record = model_obj.browse(data['id'])
|
||||
view_sc_obj.create({
|
||||
@@ -304,8 +310,9 @@ class OpenShortcut(Wizard):
|
||||
}
|
||||
|
||||
def _open(self, data):
|
||||
view_sc_obj = self.pool.get('ir.ui.view_sc')
|
||||
action_keyword_obj = self.pool.get('ir.action.keyword')
|
||||
pool = Pool()
|
||||
view_sc_obj = pool.get('ir.ui.view_sc')
|
||||
action_keyword_obj = pool.get('ir.action.keyword')
|
||||
|
||||
view_sc = view_sc_obj.browse(data['id'])
|
||||
models = (
|
||||
@@ -323,7 +330,7 @@ class OpenShortcut(Wizard):
|
||||
if not action_keyword_ids:
|
||||
return {}
|
||||
action_keyword = action_keyword_obj.browse(action_keyword_ids[0])
|
||||
action_obj = self.pool.get(action_keyword.action.type)
|
||||
action_obj = pool.get(action_keyword.action.type)
|
||||
action_ids = action_obj.search([
|
||||
('action.id', '=', action_keyword.action.id),
|
||||
])
|
||||
@@ -352,37 +359,40 @@ class ViewTreeWidth(ModelSQL, ModelView):
|
||||
})
|
||||
|
||||
def delete(self, ids):
|
||||
pool = Pool()
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
views = self.browse(ids)
|
||||
for view in views:
|
||||
# Restart the cache
|
||||
try:
|
||||
self.pool.get(view.model).fields_view_get.reset()
|
||||
pool.get(view.model).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
res = super(ViewTreeWidth, self).delete(ids)
|
||||
return res
|
||||
|
||||
def create(self, vals):
|
||||
pool = Pool()
|
||||
res = super(ViewTreeWidth, self).create(vals)
|
||||
if 'model' in vals:
|
||||
model = vals['model']
|
||||
# Restart the cache
|
||||
try:
|
||||
self.pool.get(model).fields_view_get.reset()
|
||||
pool.get(model).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
pool = Pool()
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
views = self.browse(ids)
|
||||
for view in views:
|
||||
# Restart the cache
|
||||
try:
|
||||
self.pool.get(view.model).fields_view_get.reset()
|
||||
pool.get(view.model).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
res = super(ViewTreeWidth, self).write(ids, vals)
|
||||
@@ -390,7 +400,7 @@ class ViewTreeWidth(ModelSQL, ModelView):
|
||||
for view in views:
|
||||
# Restart the cache
|
||||
try:
|
||||
self.pool.get(view.model).fields_view_get.reset()
|
||||
pool.get(view.model).fields_view_get.reset()
|
||||
except Exception:
|
||||
pass
|
||||
return res
|
||||
|
||||
@@ -5,6 +5,7 @@ import contextlib
|
||||
from itertools import islice, ifilter, ifilterfalse, chain
|
||||
from trytond.model import fields
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
from trytond.cache import LRUDict
|
||||
from trytond.const import MODEL_CACHE_SIZE, RECORD_CACHE_SIZE, \
|
||||
BROWSE_FIELD_TRESHOLD
|
||||
@@ -59,6 +60,7 @@ class BrowseRecord(object):
|
||||
self._model = model
|
||||
self._model_name = self._model._name
|
||||
self._context = Transaction().context
|
||||
self._pool = Pool()
|
||||
self._ids = ids
|
||||
|
||||
cache = self._cursor.get_cache(self._context)
|
||||
@@ -94,10 +96,10 @@ class BrowseRecord(object):
|
||||
|
||||
ffields = {}
|
||||
if col.loading == 'eager':
|
||||
field_access_obj = self._model.pool.get('ir.model.field.access')
|
||||
field_access_obj = self._pool.get('ir.model.field.access')
|
||||
fread_accesses = {}
|
||||
for inherit_name in self._model._inherits:
|
||||
inherit_obj = self._model.pool.get(inherit_name)
|
||||
inherit_obj = self._pool.get(inherit_name)
|
||||
fread_accesses.update(field_access_obj.check(inherit_name,
|
||||
inherit_obj._columns.keys(), 'read', access=True))
|
||||
fread_accesses.update(field_access_obj.check(self._model._name,
|
||||
@@ -172,10 +174,10 @@ class BrowseRecord(object):
|
||||
model = None
|
||||
if (hasattr(j, 'model_name') and
|
||||
j.model_name in
|
||||
self._model.pool.object_name_list()):
|
||||
model = self._model.pool.get(j.model_name)
|
||||
self._pool.object_name_list()):
|
||||
model = self._pool.get(j.model_name)
|
||||
elif hasattr(j, 'get_target'):
|
||||
model = j.get_target(self._model.pool)
|
||||
model = j.get_target()
|
||||
if model and j._type in ('many2one', 'one2one'):
|
||||
if (not data[i]
|
||||
and not (isinstance(data[i], (int, long))
|
||||
@@ -296,6 +298,7 @@ class EvalEnvironment(dict):
|
||||
super(EvalEnvironment, self).__init__()
|
||||
self._record = record
|
||||
self._model = model
|
||||
self._pool = Pool()
|
||||
|
||||
def __getitem__(self, item):
|
||||
if item.startswith('_parent_'):
|
||||
@@ -304,7 +307,7 @@ class EvalEnvironment(dict):
|
||||
model_name = self._model._columns[field].model_name
|
||||
else:
|
||||
model_name = self._model._inherit_fields[field][2].model_name
|
||||
model = self._model.pool.get(model_name)
|
||||
model = self._pool.get(model_name)
|
||||
return EvalEnvironment(self._record[field], model)
|
||||
if item in self._model._columns \
|
||||
or item in self._model._inherit_fields:
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
from itertools import chain
|
||||
from trytond.model.fields.field import Field
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Many2Many(Field):
|
||||
@@ -68,7 +69,7 @@ class Many2Many(Field):
|
||||
else:
|
||||
order = self.order
|
||||
|
||||
relation_obj = model.pool.get(self.relation_name)
|
||||
relation_obj = Pool().get(self.relation_name)
|
||||
|
||||
relation_ids = []
|
||||
for i in range(0, len(ids), Transaction().cursor.IN_MAX):
|
||||
@@ -101,8 +102,8 @@ class Many2Many(Field):
|
||||
'''
|
||||
if not values:
|
||||
return
|
||||
relation_obj = model.pool.get(self.relation_name)
|
||||
target_obj = self.get_target(model.pool)
|
||||
relation_obj = Pool().get(self.relation_name)
|
||||
target_obj = self.get_target()
|
||||
for act in values:
|
||||
if act[0] == 'create':
|
||||
for record_id in ids:
|
||||
@@ -177,20 +178,19 @@ class Many2Many(Field):
|
||||
else:
|
||||
raise Exception('Bad arguments')
|
||||
|
||||
def get_target(self, pool):
|
||||
def get_target(self):
|
||||
'''
|
||||
Return the target model.
|
||||
|
||||
:param pool: The pool
|
||||
:return: A Model
|
||||
'''
|
||||
relation_obj = pool.get(self.relation_name)
|
||||
relation_obj = Pool().get(self.relation_name)
|
||||
if not self.target:
|
||||
return relation_obj
|
||||
if self.target in relation_obj._columns:
|
||||
target_obj = pool.get(
|
||||
target_obj = Pool().get(
|
||||
relation_obj._columns[self.target].model_name)
|
||||
else:
|
||||
target_obj = pool.get(
|
||||
target_obj = Pool().get(
|
||||
relation_obj._inherit_fields[self.target][2].model_name)
|
||||
return target_obj
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
from itertools import chain
|
||||
from trytond.model.fields.field import Field
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
def add_remove_validate(value):
|
||||
if value:
|
||||
@@ -70,13 +71,14 @@ class One2Many(Field):
|
||||
:param values: a dictionary with the read values
|
||||
:return: a dictionary with ids as key and values as value
|
||||
'''
|
||||
pool = Pool()
|
||||
res = {}
|
||||
for i in ids:
|
||||
res[i] = []
|
||||
ids2 = []
|
||||
for i in range(0, len(ids), Transaction().cursor.IN_MAX):
|
||||
sub_ids = ids[i:i + Transaction().cursor.IN_MAX]
|
||||
ids2.append(model.pool.get(self.model_name).search([
|
||||
ids2.append(pool.get(self.model_name).search([
|
||||
(self.field, 'in', sub_ids),
|
||||
], order=self.order))
|
||||
|
||||
@@ -91,7 +93,7 @@ class One2Many(Field):
|
||||
ids3.append(i)
|
||||
|
||||
if ids3:
|
||||
for i in model.pool.get(self.model_name).read(ids3, [self.field]):
|
||||
for i in pool.get(self.model_name).read(ids3, [self.field]):
|
||||
res[i[self.field]].append(i['id'])
|
||||
|
||||
index_of_ids2 = dict((i, index) for index, i in enumerate(chain(*ids2)))
|
||||
@@ -116,9 +118,10 @@ class One2Many(Field):
|
||||
(``unlink_all``),
|
||||
(``set``, ``<ids>``)
|
||||
'''
|
||||
pool = Pool()
|
||||
if not values:
|
||||
return
|
||||
model = model.pool.get(self.model_name)
|
||||
model = pool.get(self.model_name)
|
||||
for act in values:
|
||||
if act[0] == 'create':
|
||||
for record_id in ids:
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
from trytond.model.fields.many2many import Many2Many
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class One2One(Many2Many):
|
||||
@@ -35,7 +36,8 @@ class One2One(Many2Many):
|
||||
:param name: A string with the name of the field
|
||||
:param value: The id to link
|
||||
'''
|
||||
relation_obj = model.pool.get(self.relation_name)
|
||||
pool = Pool()
|
||||
relation_obj = pool.get(self.relation_name)
|
||||
relation_ids = relation_obj.search([
|
||||
(self.origin, 'in', ids),
|
||||
])
|
||||
|
||||
@@ -6,6 +6,7 @@ from trytond.model.fields.function import Function
|
||||
from trytond.model.fields.field import Field
|
||||
from trytond import backend
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Property(Function):
|
||||
@@ -34,7 +35,8 @@ class Property(Function):
|
||||
:param values:
|
||||
:return: a dictionary with ids as key and values as value
|
||||
'''
|
||||
property_obj = model.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
res = property_obj.get(name, model._name, ids)
|
||||
return res
|
||||
|
||||
@@ -48,7 +50,8 @@ class Property(Function):
|
||||
:param name: The name of the field.
|
||||
:param value: The value to set.
|
||||
'''
|
||||
property_obj = model.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
return property_obj.set(name, model._name, ids,
|
||||
(value and getattr(self, 'model_name', '') + ',' + str(value)) or
|
||||
False)
|
||||
@@ -60,10 +63,11 @@ class Property(Function):
|
||||
:param clause: The search domain clause. See ModelStorage.search
|
||||
:return: New list of domain.
|
||||
'''
|
||||
rule_obj = model.pool.get('ir.rule')
|
||||
property_obj = model.pool.get('ir.property')
|
||||
model_obj = model.pool.get('ir.model')
|
||||
field_obj = model.pool.get('ir.model.field')
|
||||
pool = Pool()
|
||||
rule_obj = pool.get('ir.rule')
|
||||
property_obj = pool.get('ir.property')
|
||||
model_obj = pool.get('ir.model')
|
||||
field_obj = pool.get('ir.model.field')
|
||||
cursor = Transaction().cursor
|
||||
|
||||
field_class = backend.FIELDS[self._type]
|
||||
|
||||
@@ -5,6 +5,7 @@ import contextlib
|
||||
from trytond.model.fields.field import Field
|
||||
from trytond.tools import safe_eval
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Reference(Field):
|
||||
@@ -42,6 +43,7 @@ class Reference(Field):
|
||||
:param values: a dictionary with the read values
|
||||
:return: a dictionary with ids as key and values as value
|
||||
'''
|
||||
pool = Pool()
|
||||
if values is None:
|
||||
values = {}
|
||||
res = {}
|
||||
@@ -76,10 +78,10 @@ class Reference(Field):
|
||||
with contextlib.nested(Transaction().set_context(active_test=False),
|
||||
Transaction().set_user(0)):
|
||||
for ref_model, (ref_ids, ids) in ref_to_check.iteritems():
|
||||
if ref_model not in model.pool.object_name_list():
|
||||
if ref_model not in pool.object_name_list():
|
||||
res.update(dict((i, False) for i in ids))
|
||||
continue
|
||||
ref_obj = model.pool.get(ref_model)
|
||||
ref_obj = pool.get(ref_model)
|
||||
ref_ids = ref_obj.search([
|
||||
('id', 'in', list(ref_ids)),
|
||||
], order=[])
|
||||
|
||||
+26
-22
@@ -16,7 +16,6 @@ class Model(WarningErrorMixin):
|
||||
_name = None
|
||||
_inherits = {}
|
||||
_description = ''
|
||||
pool = None #XXX change to avoid collision with field
|
||||
__columns = None
|
||||
__xxx2many_targets = None
|
||||
__defaults = None
|
||||
@@ -102,9 +101,10 @@ class Model(WarningErrorMixin):
|
||||
self._rpc.setdefault(function_name, False)
|
||||
|
||||
def __getattr__(self, name):
|
||||
pool = Pool()
|
||||
# Search if a function exists in inherits parents
|
||||
for model_name, field_name in self._inherits.iteritems():
|
||||
model_obj = self.pool.get(model_name)
|
||||
model_obj = pool.get(model_name)
|
||||
if hasattr(model_obj, name) and \
|
||||
callable(getattr(model_obj, name)):
|
||||
return getattr(model_obj, name)
|
||||
@@ -115,19 +115,20 @@ class Model(WarningErrorMixin):
|
||||
Reconstruct _inherit_fields
|
||||
"""
|
||||
res = {}
|
||||
pool = Pool()
|
||||
for model in self._inherits:
|
||||
res.update(self.pool.get(model)._inherit_fields)
|
||||
for field_name in self.pool.get(model)._columns.keys():
|
||||
res.update(pool.get(model)._inherit_fields)
|
||||
for field_name in pool.get(model)._columns.keys():
|
||||
res[field_name] = (model, self._inherits[model],
|
||||
self.pool.get(model)._columns[field_name])
|
||||
for field_name in self.pool.get(model)._inherit_fields.keys():
|
||||
pool.get(model)._columns[field_name])
|
||||
for field_name in pool.get(model)._inherit_fields.keys():
|
||||
res[field_name] = (model, self._inherits[model],
|
||||
self.pool.get(model)._inherit_fields[field_name][2])
|
||||
pool.get(model)._inherit_fields[field_name][2])
|
||||
self._inherit_fields = res
|
||||
self._reset_xxx2many_targets()
|
||||
# Update objects that uses this one to update their _inherits fields
|
||||
for obj_name in self.pool.object_name_list():
|
||||
obj = self.pool.get(obj_name)
|
||||
for obj_name in pool.object_name_list():
|
||||
obj = pool.get(obj_name)
|
||||
if self._name in obj._inherits:
|
||||
obj._inherits_reload()
|
||||
|
||||
@@ -148,7 +149,7 @@ class Model(WarningErrorMixin):
|
||||
continue
|
||||
if hasattr(field, 'get_target'):
|
||||
try:
|
||||
model_name = field.get_target(self.pool)._name
|
||||
model_name = field.get_target()._name
|
||||
except KeyError:
|
||||
to_cache = False
|
||||
continue
|
||||
@@ -166,7 +167,7 @@ class Model(WarningErrorMixin):
|
||||
continue
|
||||
if hasattr(field, 'get_target'):
|
||||
try:
|
||||
model_name = field.get_target(self.pool)._name
|
||||
model_name = field.get_target()._name
|
||||
except KeyError:
|
||||
to_cache = False
|
||||
continue
|
||||
@@ -186,7 +187,7 @@ class Model(WarningErrorMixin):
|
||||
|
||||
:param module_name: the module name
|
||||
"""
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
translation_obj = Pool().get('ir.translation')
|
||||
|
||||
cursor = Transaction().cursor
|
||||
# Add model in ir_model
|
||||
@@ -388,7 +389,8 @@ class Model(WarningErrorMixin):
|
||||
:return: a dictionary with field name as key
|
||||
and default value as value
|
||||
'''
|
||||
property_obj = self.pool.get('ir.property')
|
||||
pool = Pool()
|
||||
property_obj = pool.get('ir.property')
|
||||
value = {}
|
||||
|
||||
# get the default values defined in the object
|
||||
@@ -407,7 +409,7 @@ class Model(WarningErrorMixin):
|
||||
if (with_rec_name
|
||||
and field._type in ('many2one',)
|
||||
and value.get(field_name)):
|
||||
obj = self.pool.get(field.model_name)
|
||||
obj = pool.get(field.model_name)
|
||||
if 'rec_name' in obj._columns:
|
||||
value[field_name + '.rec_name'] = obj.browse(
|
||||
value[field_name]).rec_name
|
||||
@@ -427,10 +429,11 @@ class Model(WarningErrorMixin):
|
||||
:param value: a dictionnary with the default value
|
||||
:return: a new dictionnary of default value
|
||||
"""
|
||||
pool = Pool()
|
||||
res = value.copy()
|
||||
val = {}
|
||||
for i in self._inherits.keys():
|
||||
val.update(self.pool.get(i)._default_on_change(value))
|
||||
val.update(pool.get(i)._default_on_change(value))
|
||||
for field in value.keys():
|
||||
if field in self._columns:
|
||||
if self._columns[field].on_change:
|
||||
@@ -443,7 +446,7 @@ class Model(WarningErrorMixin):
|
||||
args[arg] = args[arg][0]
|
||||
val.update(getattr(self, 'on_change_' + field)(args))
|
||||
if self._columns[field]._type in ('one2many',):
|
||||
obj = self.pool.get(self._columns[field].model_name)
|
||||
obj = pool.get(self._columns[field].model_name)
|
||||
for val2 in res[field]:
|
||||
val2.update(obj._default_on_change(val2))
|
||||
res.update(val)
|
||||
@@ -457,12 +460,13 @@ class Model(WarningErrorMixin):
|
||||
:return: a dictionary with field name as key and definition as value
|
||||
"""
|
||||
res = {}
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
field_access_obj = self.pool.get('ir.model.field.access')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
field_access_obj = pool.get('ir.model.field.access')
|
||||
|
||||
for parent in self._inherits:
|
||||
res.update(self.pool.get(parent).fields_get(fields_names))
|
||||
res.update(pool.get(parent).fields_get(fields_names))
|
||||
write_access = model_access_obj.check(self._name, 'write',
|
||||
raise_exception=False)
|
||||
|
||||
@@ -576,8 +580,8 @@ class Model(WarningErrorMixin):
|
||||
if hasattr(self._columns[field], 'model_name'):
|
||||
relation = copy.copy(self._columns[field].model_name)
|
||||
else:
|
||||
relation = copy.copy(self._columns[field].get_target(
|
||||
self.pool)._name)
|
||||
relation = copy.copy(
|
||||
self._columns[field].get_target()._name)
|
||||
res[field]['relation'] = relation
|
||||
res[field]['domain'] = copy.copy(self._columns[field].domain)
|
||||
res[field]['context'] = copy.copy(self._columns[field].context)
|
||||
|
||||
+52
-39
@@ -13,6 +13,7 @@ from trytond.backend import DatabaseIntegrityError, Database
|
||||
from trytond.tools import reduce_ids
|
||||
from trytond.const import OPERATORS, RECORD_CACHE_SIZE
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
from trytond.cache import LRUDict
|
||||
_RE_UNIQUE = re.compile('UNIQUE\s*\((.*)\)', re.I)
|
||||
_RE_CHECK = re.compile('CHECK\s*\((.*)\)', re.I)
|
||||
@@ -45,6 +46,8 @@ class ModelSQL(ModelStorage):
|
||||
if self.table_query():
|
||||
return
|
||||
|
||||
pool = Pool()
|
||||
|
||||
# create/update table in the database
|
||||
table = TableHandler(Transaction().cursor, self, module_name)
|
||||
if self._history:
|
||||
@@ -135,7 +138,7 @@ class ModelSQL(ModelStorage):
|
||||
if field.model_name in ('res.user', 'res.group'):
|
||||
ref = field.model_name.replace('.','_')
|
||||
else:
|
||||
ref = self.pool.get(field.model_name)._table
|
||||
ref = pool.get(field.model_name)._table
|
||||
table.add_fk(field_name, ref, field.ondelete)
|
||||
|
||||
table.index_action(
|
||||
@@ -204,10 +207,11 @@ class ModelSQL(ModelStorage):
|
||||
'''
|
||||
Return the default value for sequence field.
|
||||
'''
|
||||
pool = Pool()
|
||||
table = self._table
|
||||
if 'sequence' not in self._columns:
|
||||
for model in self._inherits:
|
||||
model_obj = self.pool.get(model)
|
||||
model_obj = pool.get(model)
|
||||
if 'sequence' in model_obj._columns:
|
||||
table = model_obj._table
|
||||
break
|
||||
@@ -231,6 +235,7 @@ class ModelSQL(ModelStorage):
|
||||
def create(self, values):
|
||||
super(ModelSQL, self).create(values)
|
||||
cursor = Transaction().cursor
|
||||
pool = Pool()
|
||||
|
||||
if self.table_query():
|
||||
return False
|
||||
@@ -290,7 +295,7 @@ class ModelSQL(ModelStorage):
|
||||
del values[i]
|
||||
|
||||
for inherits in tocreate:
|
||||
inherits_obj = self.pool.get(inherits)
|
||||
inherits_obj = pool.get(inherits)
|
||||
inherits_id = inherits_obj.create(tocreate[inherits])
|
||||
values[self._inherits[inherits]] = inherits_id
|
||||
|
||||
@@ -356,7 +361,7 @@ class ModelSQL(ModelStorage):
|
||||
field_name))
|
||||
if isinstance(field, fields.Many2One) \
|
||||
and values.get(field_name):
|
||||
model_obj = self.pool.get(field.model_name)
|
||||
model_obj = pool.get(field.model_name)
|
||||
create_records = Transaction().create_records.get(
|
||||
field.model_name, set())
|
||||
delete_records = Transaction().delete_records.get(
|
||||
@@ -377,7 +382,7 @@ class ModelSQL(ModelStorage):
|
||||
self.raise_user_error(error)
|
||||
raise
|
||||
|
||||
domain1, domain2 = self.pool.get('ir.rule').domain_get(self._name,
|
||||
domain1, domain2 = pool.get('ir.rule').domain_get(self._name,
|
||||
mode='create')
|
||||
if domain1:
|
||||
cursor.execute('SELECT id FROM "' + self._table + '" ' \
|
||||
@@ -390,7 +395,7 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
for field in values:
|
||||
if getattr(self._columns[field], 'translate', False):
|
||||
self.pool.get('ir.translation')._set_ids(
|
||||
pool.get('ir.translation')._set_ids(
|
||||
self._name + ',' + field, 'model',
|
||||
Transaction().language, [id_new], values[field])
|
||||
|
||||
@@ -419,8 +424,9 @@ class ModelSQL(ModelStorage):
|
||||
return id_new
|
||||
|
||||
def read(self, ids, fields_names=None):
|
||||
rule_obj = self.pool.get('ir.rule')
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
rule_obj = pool.get('ir.rule')
|
||||
translation_obj = pool.get('ir.translation')
|
||||
super(ModelSQL, self).read(ids, fields_names=fields_names)
|
||||
cursor = Transaction().cursor
|
||||
|
||||
@@ -563,7 +569,7 @@ class ModelSQL(ModelStorage):
|
||||
for field_related in fields_related[inherit_field]:
|
||||
inherit_related_fields.append(
|
||||
inherit_field + '.' + field_related)
|
||||
res2 = self.pool.get(table).read([x[field] for x in res],
|
||||
res2 = pool.get(table).read([x[field] for x in res],
|
||||
fields_names=inherits_fields + inherit_related_fields)
|
||||
|
||||
res3 = {}
|
||||
@@ -635,9 +641,9 @@ class ModelSQL(ModelStorage):
|
||||
fields_related2values.setdefault(field, {})
|
||||
if self._columns[field]._type in ('many2one', 'one2one'):
|
||||
if hasattr(self._columns[field], 'model_name'):
|
||||
obj = self.pool.get(self._columns[field].model_name)
|
||||
obj = pool.get(self._columns[field].model_name)
|
||||
else:
|
||||
obj = self._columns[field].get_target(self.pool)
|
||||
obj = self._columns[field].get_target()
|
||||
if hasattr(self._columns[field], 'datetime_field') \
|
||||
and self._columns[field].datetime_field:
|
||||
for record in res:
|
||||
@@ -671,7 +677,7 @@ class ModelSQL(ModelStorage):
|
||||
record_id = int(record_id)
|
||||
if not record_id:
|
||||
continue
|
||||
obj = self.pool.get(model_name)
|
||||
obj = pool.get(model_name)
|
||||
record2 = obj.read(record_id, fields_related[field])
|
||||
del record2['id']
|
||||
fields_related2values[field][record_id] = record2
|
||||
@@ -710,6 +716,8 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
def write(self, ids, values):
|
||||
cursor = Transaction().cursor
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
|
||||
# Call before cursor cache cleaning
|
||||
trigger_eligibles = self.trigger_write_get_eligibles(
|
||||
@@ -818,7 +826,7 @@ class ModelSQL(ModelStorage):
|
||||
upd1.append(Transaction().user)
|
||||
upd1.append(datetime.datetime.now())
|
||||
|
||||
domain1, domain2 = self.pool.get('ir.rule').domain_get(self._name,
|
||||
domain1, domain2 = pool.get('ir.rule').domain_get(self._name,
|
||||
mode='write')
|
||||
if domain1:
|
||||
domain1 = ' AND (' + domain1 + ') '
|
||||
@@ -871,7 +879,7 @@ class ModelSQL(ModelStorage):
|
||||
field_name))
|
||||
if isinstance(field, fields.Many2One) \
|
||||
and values[field_name]:
|
||||
model_obj = self.pool.get(field.model_name)
|
||||
model_obj = pool.get(field.model_name)
|
||||
create_records = Transaction().create_records.get(
|
||||
field.model_name, set())
|
||||
delete_records = Transaction().delete_records.get(
|
||||
@@ -894,7 +902,7 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
for field in direct:
|
||||
if getattr(self._columns[field], 'translate', False):
|
||||
self.pool.get('ir.translation')._set_ids(
|
||||
translation_obj._set_ids(
|
||||
self._name + ',' + field, 'model',
|
||||
Transaction().language, ids, values[field])
|
||||
|
||||
@@ -927,7 +935,7 @@ class ModelSQL(ModelStorage):
|
||||
for val in updend:
|
||||
if self._inherit_fields[val][0] == table:
|
||||
values2[val] = values[val]
|
||||
self.pool.get(table).write(nids, values2)
|
||||
pool.get(table).write(nids, values2)
|
||||
|
||||
self._validate(ids)
|
||||
|
||||
@@ -953,6 +961,7 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
def delete(self, ids):
|
||||
cursor = Transaction().cursor
|
||||
pool = Pool()
|
||||
if not ids:
|
||||
return True
|
||||
|
||||
@@ -1008,7 +1017,7 @@ class ModelSQL(ModelStorage):
|
||||
foreign_keys_tocheck = []
|
||||
foreign_keys_toupdate = []
|
||||
foreign_keys_todelete = []
|
||||
for _, model in self.pool.iterobject():
|
||||
for _, model in pool.iterobject():
|
||||
if hasattr(model, 'table_query') \
|
||||
and model.table_query():
|
||||
continue
|
||||
@@ -1029,7 +1038,7 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
Transaction().delete.setdefault(self._name, set()).update(ids)
|
||||
|
||||
domain1, domain2 = self.pool.get('ir.rule').domain_get(self._name,
|
||||
domain1, domain2 = pool.get('ir.rule').domain_get(self._name,
|
||||
mode='delete')
|
||||
if domain1:
|
||||
domain1 = ' AND (' + domain1 + ') '
|
||||
@@ -1125,7 +1134,8 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
def search(self, domain, offset=0, limit=None, order=None, count=False,
|
||||
query_string=False):
|
||||
rule_obj = self.pool.get('ir.rule')
|
||||
pool = Pool()
|
||||
rule_obj = pool.get('ir.rule')
|
||||
cursor = Transaction().cursor
|
||||
|
||||
# Get domain clauses
|
||||
@@ -1285,6 +1295,7 @@ class ModelSQL(ModelStorage):
|
||||
return qu1, qu2, tables, tables_args
|
||||
|
||||
def __search_domain_oper(self, domain, tables, tables_args):
|
||||
pool = Pool()
|
||||
operator = 'AND'
|
||||
if len(domain) and isinstance(domain[0], basestring):
|
||||
if domain[0] not in ('AND', 'OR'):
|
||||
@@ -1324,6 +1335,7 @@ class ModelSQL(ModelStorage):
|
||||
return qu1, qu2
|
||||
|
||||
def __search_domain_calc(self, domain, tables, tables_args):
|
||||
pool = Pool()
|
||||
domain = domain[:]
|
||||
cursor = Transaction().cursor
|
||||
|
||||
@@ -1337,7 +1349,7 @@ class ModelSQL(ModelStorage):
|
||||
table = self
|
||||
fargs = domain[i][0].split('.', 1)
|
||||
if fargs[0] in self._inherit_fields:
|
||||
itable = self.pool.get(self._inherit_fields[fargs[0]][0])
|
||||
itable = pool.get(self._inherit_fields[fargs[0]][0])
|
||||
table_query = ''
|
||||
table_arg = []
|
||||
if itable.table_query():
|
||||
@@ -1355,11 +1367,11 @@ class ModelSQL(ModelStorage):
|
||||
if not fargs[0] in self._inherit_fields:
|
||||
raise Exception('ValidateError', 'Field "%s" doesn\'t ' \
|
||||
'exist on "%s"' % (fargs[0], self._name))
|
||||
table = self.pool.get(self._inherit_fields[fargs[0]][0])
|
||||
table = pool.get(self._inherit_fields[fargs[0]][0])
|
||||
field = table._columns.get(fargs[0], False)
|
||||
if len(fargs) > 1:
|
||||
if field._type == 'many2one':
|
||||
target_obj = self.pool.get(field.model_name)
|
||||
target_obj = pool.get(field.model_name)
|
||||
if hasattr(field, 'search'):
|
||||
domain.extend([(fargs[0], 'in', target_obj.search([
|
||||
(fargs[1], domain[i][1], domain[i][2]),
|
||||
@@ -1373,11 +1385,11 @@ class ModelSQL(ModelStorage):
|
||||
continue
|
||||
elif field._type in ('one2one', 'many2many', 'one2many'):
|
||||
if hasattr(field, 'model_name'):
|
||||
target_obj = self.pool.get(field.model_name)
|
||||
target_obj = pool.get(field.model_name)
|
||||
else:
|
||||
target_obj = field.get_target(self.pool)
|
||||
target_obj = field.get_target()
|
||||
if hasattr(field, 'relation_name'):
|
||||
relation_obj = self.pool.get(field.relation_name)
|
||||
relation_obj = pool.get(field.relation_name)
|
||||
origin, target = field.origin, field.target
|
||||
else:
|
||||
relation_obj = target_obj
|
||||
@@ -1404,7 +1416,7 @@ class ModelSQL(ModelStorage):
|
||||
clause = domain.pop(i)
|
||||
domain.extend(field.search(table, clause[0], clause))
|
||||
elif field._type == 'one2many':
|
||||
field_obj = self.pool.get(field.model_name)
|
||||
field_obj = pool.get(field.model_name)
|
||||
|
||||
if isinstance(domain[i][2], basestring):
|
||||
# get the ids of the records of the "distant" resource
|
||||
@@ -1460,9 +1472,9 @@ class ModelSQL(ModelStorage):
|
||||
elif field._type in ('many2many', 'one2one'):
|
||||
# XXX must find a solution for long id list
|
||||
if hasattr(field, 'model_name'):
|
||||
target_obj = self.pool.get(field.model_name)
|
||||
target_obj = pool.get(field.model_name)
|
||||
else:
|
||||
target_obj = field.get_target(self.pool)
|
||||
target_obj = field.get_target()
|
||||
if domain[i][1] in ('child_of', 'not child_of'):
|
||||
if isinstance(domain[i][2], basestring):
|
||||
ids2 = [x[0] for x in target_obj.search([
|
||||
@@ -1490,7 +1502,7 @@ class ModelSQL(ModelStorage):
|
||||
ids2 = target_obj.search([
|
||||
(domain[i][3], 'child_of', ids2),
|
||||
], order=[])
|
||||
relation_obj = self.pool.get(field.relation_name)
|
||||
relation_obj = pool.get(field.relation_name)
|
||||
red_sql, red_ids = reduce_ids('"' + field.target + '"',
|
||||
ids2)
|
||||
query1 = 'SELECT "' + field.origin + '" ' \
|
||||
@@ -1511,7 +1523,7 @@ class ModelSQL(ModelStorage):
|
||||
table, domain[i][0]))
|
||||
else:
|
||||
if isinstance(domain[i][2], bool):
|
||||
relation_obj = self.pool.get(field.relation_name)
|
||||
relation_obj = pool.get(field.relation_name)
|
||||
query1 = 'SELECT "' + field.origin + '" ' \
|
||||
'FROM "' + relation_obj._table + '" '\
|
||||
'WHERE "' + field.origin + '" IS NOT NULL'
|
||||
@@ -1525,7 +1537,7 @@ class ModelSQL(ModelStorage):
|
||||
target_field = 'rec_name'
|
||||
else:
|
||||
target_field = 'id'
|
||||
relation_obj = self.pool.get(field.relation_name)
|
||||
relation_obj = pool.get(field.relation_name)
|
||||
|
||||
query1, query2 = target_obj.search([
|
||||
(target_field, domain[i][1], domain[i][2]),
|
||||
@@ -1540,7 +1552,7 @@ class ModelSQL(ModelStorage):
|
||||
# XXX must find a solution for long id list
|
||||
if domain[i][1] in ('child_of', 'not child_of'):
|
||||
if isinstance(domain[i][2], basestring):
|
||||
field_obj = self.pool.get(field.model_name)
|
||||
field_obj = pool.get(field.model_name)
|
||||
ids2 = [x[0] for x in field_obj.search([
|
||||
('rec_name', 'like', domain[i][2]),
|
||||
], order=[])]
|
||||
@@ -1563,7 +1575,7 @@ class ModelSQL(ModelStorage):
|
||||
raise Exception('Error', 'Programming error: ' \
|
||||
'child_of on field "%s" is not allowed!' % \
|
||||
(domain[i][0],))
|
||||
ids2 = self.pool.get(field.model_name).search([
|
||||
ids2 = pool.get(field.model_name).search([
|
||||
(domain[i][3], 'child_of', ids2),
|
||||
], order=[])
|
||||
if domain[i][1] == 'child_of':
|
||||
@@ -1600,7 +1612,7 @@ class ModelSQL(ModelStorage):
|
||||
ids2, table, domain[i][0]), table)
|
||||
else:
|
||||
if isinstance(domain[i][2], basestring):
|
||||
field_obj = self.pool.get(field.model_name)
|
||||
field_obj = pool.get(field.model_name)
|
||||
res_ids = field_obj.search([
|
||||
('rec_name', domain[i][1], domain[i][2]),
|
||||
], order=[])
|
||||
@@ -1653,7 +1665,7 @@ class ModelSQL(ModelStorage):
|
||||
table_query, table_args = table.table_query()
|
||||
table_query = '(' + table_query + ') AS '
|
||||
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
translation_obj = pool.get('ir.translation')
|
||||
|
||||
qu1, qu2, tables, table_args = \
|
||||
translation_obj.search_domain([
|
||||
@@ -1804,6 +1816,7 @@ class ModelSQL(ModelStorage):
|
||||
return qu1, qu2
|
||||
|
||||
def _order_calc(self, field, otype):
|
||||
pool = Pool()
|
||||
order_by = []
|
||||
tables = []
|
||||
tables_args = {}
|
||||
@@ -1821,7 +1834,7 @@ class ModelSQL(ModelStorage):
|
||||
field_name = self._columns[field].order_field
|
||||
|
||||
if isinstance(self._columns[field], fields.Many2One):
|
||||
obj = self.pool.get(self._columns[field].model_name)
|
||||
obj = pool.get(self._columns[field].model_name)
|
||||
table_name = obj._table
|
||||
link_field = field
|
||||
field_name = None
|
||||
@@ -1856,12 +1869,12 @@ class ModelSQL(ModelStorage):
|
||||
|
||||
obj2 = None
|
||||
if obj._rec_name in obj._inherit_fields.keys():
|
||||
obj2 = self.pool.get(
|
||||
obj2 = pool.get(
|
||||
obj._inherit_fields[obj._rec_name][0])
|
||||
field_name = obj._rec_name
|
||||
|
||||
if obj._order_name in obj._inherit_fields.keys():
|
||||
obj2 = self.pool.get(
|
||||
obj2 = pool.get(
|
||||
obj._inherit_fields[obj._order_name][0])
|
||||
field_name = obj._order_name
|
||||
|
||||
@@ -1995,7 +2008,7 @@ class ModelSQL(ModelStorage):
|
||||
return order_by, tables, tables_args
|
||||
|
||||
if field in self._inherit_fields.keys():
|
||||
obj = self.pool.get(self._inherit_fields[field][0])
|
||||
obj = pool.get(self._inherit_fields[field][0])
|
||||
table_name = obj._table
|
||||
link_field = self._inherits[obj._name]
|
||||
order_by, tables, tables_args = obj._order_calc(field, otype)
|
||||
|
||||
@@ -21,6 +21,7 @@ from trytond.tools import safe_eval, reduce_domain
|
||||
from trytond.pyson import PYSONEncoder, PYSONDecoder, PYSON
|
||||
from trytond.const import OPERATORS, RECORD_CACHE_SIZE
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
from trytond.cache import LRUDict
|
||||
|
||||
|
||||
@@ -63,7 +64,7 @@ class ModelStorage(Model):
|
||||
def __clean_xxx2many_cache(self):
|
||||
# Clean cursor cache
|
||||
to_clean = [(model._name, field_name)
|
||||
for model_name, model in self.pool.iterobject(type='model')
|
||||
for model_name, model in Pool().iterobject(type='model')
|
||||
for field_name, target_name in model._xxx2many_targets
|
||||
if target_name == self._name]
|
||||
for cache in Transaction().cursor.cache.values():
|
||||
@@ -82,8 +83,9 @@ class ModelStorage(Model):
|
||||
and created values as value
|
||||
:return: the id of the created record
|
||||
'''
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
model_field_access_obj = self.pool.get('ir.model.field.access')
|
||||
pool = Pool()
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
model_field_access_obj = pool.get('ir.model.field.access')
|
||||
|
||||
model_access_obj.check(self._name, 'create')
|
||||
model_field_access_obj.check(self._name,
|
||||
@@ -97,7 +99,7 @@ class ModelStorage(Model):
|
||||
|
||||
:param id: the created id
|
||||
'''
|
||||
trigger_obj = self.pool.get('ir.trigger')
|
||||
trigger_obj = Pool().get('ir.trigger')
|
||||
trigger_ids = trigger_obj.get_triggers(self._name, 'create')
|
||||
if not trigger_ids:
|
||||
return
|
||||
@@ -117,8 +119,9 @@ class ModelStorage(Model):
|
||||
the dictionnaries will have fields names as key
|
||||
and fields value as value. The list will not be in the same order.
|
||||
'''
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
model_field_access_obj = self.pool.get('ir.model.field.access')
|
||||
pool = Pool()
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
model_field_access_obj = pool.get('ir.model.field.access')
|
||||
|
||||
model_access_obj.check(self._name, 'read')
|
||||
model_field_access_obj.check(self._name,
|
||||
@@ -136,8 +139,9 @@ class ModelStorage(Model):
|
||||
and written values as value
|
||||
:return: True if succeed
|
||||
'''
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
model_field_access_obj = self.pool.get('ir.model.field.access')
|
||||
pool = Pool()
|
||||
model_access_obj = pool.get('ir.model.access')
|
||||
model_field_access_obj = pool.get('ir.model.field.access')
|
||||
|
||||
model_access_obj.check(self._name, 'write')
|
||||
model_field_access_obj.check(self._name,
|
||||
@@ -166,7 +170,7 @@ class ModelStorage(Model):
|
||||
:param ids: a list of ids
|
||||
:return: a dictionary of the lists of eligible ids by triggers
|
||||
'''
|
||||
trigger_obj = self.pool.get('ir.trigger')
|
||||
trigger_obj = Pool().get('ir.trigger')
|
||||
trigger_ids = trigger_obj.get_triggers(self._name, 'write')
|
||||
if not trigger_ids:
|
||||
return {}
|
||||
@@ -186,7 +190,7 @@ class ModelStorage(Model):
|
||||
|
||||
:param eligibles: a dictionary of the lists of eligible ids by triggers
|
||||
'''
|
||||
trigger_obj = self.pool.get('ir.trigger')
|
||||
trigger_obj = Pool().get('ir.trigger')
|
||||
trigger_ids = eligibles.keys()
|
||||
if not trigger_ids:
|
||||
return
|
||||
@@ -209,7 +213,7 @@ class ModelStorage(Model):
|
||||
:param ids: a list of ids or an id
|
||||
:return: True if succeed
|
||||
'''
|
||||
model_access_obj = self.pool.get('ir.model.access')
|
||||
model_access_obj = Pool().get('ir.model.access')
|
||||
|
||||
model_access_obj.check(self._name, 'delete')
|
||||
if not self.check_xml_record(ids, None):
|
||||
@@ -235,7 +239,7 @@ class ModelStorage(Model):
|
||||
|
||||
:param ids: the deleted ids
|
||||
'''
|
||||
trigger_obj = self.pool.get('ir.trigger')
|
||||
trigger_obj = Pool().get('ir.trigger')
|
||||
trigger_ids = trigger_obj.get_triggers(self._name, 'delete')
|
||||
if not trigger_ids:
|
||||
return
|
||||
@@ -258,7 +262,8 @@ class ModelStorage(Model):
|
||||
new value for the field as value
|
||||
:return: a list of new ids or the new id
|
||||
'''
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
if default is None:
|
||||
default = {}
|
||||
|
||||
@@ -315,7 +320,7 @@ class ModelStorage(Model):
|
||||
data, data_o2m = convert_data(field_defs, data)
|
||||
new_ids[data_id] = self.create(data)
|
||||
for field_name in data_o2m:
|
||||
relation_model = self.pool.get(
|
||||
relation_model = pool.get(
|
||||
field_defs[field_name]['relation'])
|
||||
relation_field = field_defs[field_name]['relation_field']
|
||||
if relation_field:
|
||||
@@ -519,6 +524,7 @@ class ModelStorage(Model):
|
||||
for x in ids))
|
||||
|
||||
def __export_row(self, record, fields_names):
|
||||
pool = Pool()
|
||||
lines = []
|
||||
data = ['' for x in range(len(fields_names))]
|
||||
done = []
|
||||
@@ -532,7 +538,7 @@ class ModelStorage(Model):
|
||||
if not isinstance(value, BrowseRecord):
|
||||
break
|
||||
field_name = fields_tree[i]
|
||||
model_obj = self.pool.get(value._model_name)
|
||||
model_obj = pool.get(value._model_name)
|
||||
field = model_obj._columns[field_name]
|
||||
if field.states and 'invisible' in field.states:
|
||||
pyson_invisible = PYSONEncoder().encode(
|
||||
@@ -604,6 +610,7 @@ class ModelStorage(Model):
|
||||
- the exception if failed
|
||||
- the warning if failed
|
||||
'''
|
||||
pool = Pool()
|
||||
def process_lines(self, datas, prefix, fields_def, position=0):
|
||||
|
||||
def warn(msgname, *args):
|
||||
@@ -626,7 +633,7 @@ class ModelStorage(Model):
|
||||
def get_many2one(relation, value):
|
||||
if not value:
|
||||
return False
|
||||
relation_obj = self.pool.get(relation)
|
||||
relation_obj = pool.get(relation)
|
||||
res = relation_obj.search([
|
||||
('rec_name', '=', value),
|
||||
], limit=2)
|
||||
@@ -644,7 +651,7 @@ class ModelStorage(Model):
|
||||
if not value:
|
||||
return False
|
||||
res = []
|
||||
relation_obj = self.pool.get(relation)
|
||||
relation_obj = pool.get(relation)
|
||||
for word in csv.reader(StringIO.StringIO(value), delimiter=',',
|
||||
quoting=csv.QUOTE_NONE, escapechar='\\').next():
|
||||
res2 = relation_obj.search([
|
||||
@@ -671,7 +678,7 @@ class ModelStorage(Model):
|
||||
except Exception:
|
||||
warn('reference_syntax_error', value, '/'.join(field))
|
||||
return False
|
||||
relation_obj = self.pool.get(relation)
|
||||
relation_obj = pool.get(relation)
|
||||
res = relation_obj.search([
|
||||
('rec_name', '=', value),
|
||||
], limit=2)
|
||||
@@ -776,7 +783,7 @@ class ModelStorage(Model):
|
||||
# Import one2many fields
|
||||
nbrmax = 1
|
||||
for field in todo:
|
||||
newfd = self.pool.get(fields_def[field]['relation']
|
||||
newfd = pool.get(fields_def[field]['relation']
|
||||
).fields_get()
|
||||
res = process_lines(self, datas, prefix + [field], newfd,
|
||||
position)
|
||||
@@ -807,7 +814,7 @@ class ModelStorage(Model):
|
||||
datas.pop(0)
|
||||
return (row, nbrmax, translate)
|
||||
|
||||
ir_model_data_obj = self.pool.get('ir.model.data')
|
||||
ir_model_data_obj = pool.get('ir.model.data')
|
||||
|
||||
# logger for collecting warnings for the client
|
||||
warnings = logging.Logger("import")
|
||||
@@ -862,7 +869,7 @@ class ModelStorage(Model):
|
||||
written values as value
|
||||
:return: True or False
|
||||
"""
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
model_data_obj = Pool().get('ir.model.data')
|
||||
# Allow root user to update/delete
|
||||
if Transaction().user == 0:
|
||||
return True
|
||||
@@ -935,7 +942,8 @@ class ModelStorage(Model):
|
||||
return True
|
||||
|
||||
def _get_error_args(self, field_name):
|
||||
model_field_obj = self.pool.get('ir.model.field')
|
||||
pool = Pool()
|
||||
model_field_obj = pool.get('ir.model.field')
|
||||
error_args = (field_name, self._name)
|
||||
if model_field_obj:
|
||||
model_field_ids = model_field_obj.search([
|
||||
@@ -950,6 +958,7 @@ class ModelStorage(Model):
|
||||
|
||||
|
||||
def _validate(self, ids):
|
||||
pool = Pool()
|
||||
if (Transaction().user == 0
|
||||
and Transaction().context.get('user')):
|
||||
with Transaction().set_user(Transaction().context.get('user')):
|
||||
@@ -959,12 +968,12 @@ class ModelStorage(Model):
|
||||
if not getattr(self, field[0])(ids):
|
||||
self.raise_user_error(field[1])
|
||||
|
||||
if not 'res.user' in self.pool.object_name_list() \
|
||||
if not 'res.user' in pool.object_name_list() \
|
||||
or Transaction().user == 0:
|
||||
ctx_pref = {
|
||||
}
|
||||
else:
|
||||
user_obj = self.pool.get('res.user')
|
||||
user_obj = pool.get('res.user')
|
||||
ctx_pref = user_obj.get_preferences(context_only=True)
|
||||
|
||||
def is_pyson(test):
|
||||
@@ -990,9 +999,9 @@ class ModelStorage(Model):
|
||||
('many2one', 'many2many', 'one2many', 'one2one')
|
||||
and field.domain):
|
||||
if field._type in ('many2one', 'one2many'):
|
||||
relation_obj = self.pool.get(field.model_name)
|
||||
relation_obj = pool.get(field.model_name)
|
||||
else:
|
||||
relation_obj = field.get_target(self.pool)
|
||||
relation_obj = field.get_target()
|
||||
if is_pyson(field.domain):
|
||||
pyson_domain = PYSONEncoder().encode(field.domain)
|
||||
for record in records:
|
||||
@@ -1111,6 +1120,7 @@ class ModelStorage(Model):
|
||||
field_name)
|
||||
|
||||
def _clean_defaults(self, defaults):
|
||||
pool = Pool()
|
||||
vals = {}
|
||||
for field in defaults.keys():
|
||||
fld_def = (field in self._columns) and self._columns[field] \
|
||||
@@ -1121,7 +1131,7 @@ class ModelStorage(Model):
|
||||
else:
|
||||
vals[field] = defaults[field]
|
||||
elif fld_def._type in ('one2many',):
|
||||
obj = self.pool.get(fld_def.model_name)
|
||||
obj = pool.get(fld_def.model_name)
|
||||
vals[field] = []
|
||||
for defaults2 in defaults[field]:
|
||||
vals2 = obj._clean_defaults(defaults2)
|
||||
@@ -1140,8 +1150,9 @@ class ModelStorage(Model):
|
||||
|
||||
:param ids: a list of id or an id
|
||||
'''
|
||||
trigger_obj = self.pool.get('workflow.trigger')
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
trigger_obj = pool.get('workflow.trigger')
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
|
||||
@@ -12,6 +12,7 @@ from trytond.tools import safe_eval
|
||||
from trytond.pyson import PYSONEncoder, CONTEXT
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pool import Pool
|
||||
|
||||
def _find(tree, element):
|
||||
if element.tag == 'xpath':
|
||||
@@ -115,6 +116,7 @@ class ModelView(Model):
|
||||
- md5: the check sum of the dictionary without this checksum
|
||||
'''
|
||||
result = {'model': self._name}
|
||||
pool = Pool()
|
||||
|
||||
test = True
|
||||
model = True
|
||||
@@ -152,7 +154,7 @@ class ModelView(Model):
|
||||
|
||||
# Check if view is not from an inherited model
|
||||
if sql_res[5] != self._name:
|
||||
inherit_obj = self.pool.get(sql_res[5])
|
||||
inherit_obj = pool.get(sql_res[5])
|
||||
result['arch'] = inherit_obj.fields_view_get(
|
||||
result['view_id'])['arch']
|
||||
view_id = inherit_view_id
|
||||
@@ -226,7 +228,7 @@ class ModelView(Model):
|
||||
|
||||
# Add toolbar
|
||||
if toolbar:
|
||||
action_obj = self.pool.get('ir.action.keyword')
|
||||
action_obj = pool.get('ir.action.keyword')
|
||||
prints = action_obj.get_keyword('form_print', (self._name, 0))
|
||||
actions = action_obj.get_keyword('form_action', (self._name, 0))
|
||||
relates = action_obj.get_keyword('form_relate', (self._name, 0))
|
||||
@@ -257,7 +259,8 @@ class ModelView(Model):
|
||||
return value
|
||||
|
||||
def _view_look_dom_arch(self, tree, type, field_children=None):
|
||||
field_access_obj = self.pool.get('ir.model.field.access')
|
||||
pool = Pool()
|
||||
field_access_obj = pool.get('ir.model.field.access')
|
||||
|
||||
fields_width = {}
|
||||
tree_root = tree.getroottree().getroot()
|
||||
@@ -274,7 +277,7 @@ class ModelView(Model):
|
||||
|
||||
# Find field inherited without read access
|
||||
for inherit_name in self._inherits:
|
||||
inherit_obj = self.pool.get(inherit_name)
|
||||
inherit_obj = pool.get(inherit_name)
|
||||
fread_accesses = field_access_obj.check(inherit_obj._name,
|
||||
inherit_obj._columns.keys(), 'read', access=True)
|
||||
fields_to_remove += list(x for x, y in fread_accesses.iteritems()
|
||||
@@ -297,7 +300,7 @@ class ModelView(Model):
|
||||
parent.remove(element)
|
||||
|
||||
if type == 'tree':
|
||||
viewtreewidth_obj = self.pool.get('ir.ui.view_tree_width')
|
||||
viewtreewidth_obj = pool.get('ir.ui.view_tree_width')
|
||||
viewtreewidth_ids = viewtreewidth_obj.search([
|
||||
('model', '=', self._name),
|
||||
('user', '=', Transaction().user),
|
||||
@@ -341,7 +344,8 @@ class ModelView(Model):
|
||||
return arch, fields2
|
||||
|
||||
def __view_look_dom(self, element, type, fields_width=None):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
|
||||
if fields_width is None:
|
||||
fields_width = {}
|
||||
@@ -362,7 +366,7 @@ class ModelView(Model):
|
||||
if hasattr(field, 'model_name'):
|
||||
relation = field.model_name
|
||||
else:
|
||||
relation = field.get_target(self.pool)._name
|
||||
relation = field.get_target()._name
|
||||
except Exception:
|
||||
relation = False
|
||||
if relation and element.tag == 'field':
|
||||
@@ -392,7 +396,7 @@ class ModelView(Model):
|
||||
if Transaction().language != 'en_US':
|
||||
_translate_field(field2)
|
||||
|
||||
relation_obj = self.pool.get(relation)
|
||||
relation_obj = pool.get(relation)
|
||||
if hasattr(relation_obj, '_view_look_dom_arch'):
|
||||
xarch, xfields = \
|
||||
relation_obj._view_look_dom_arch(
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
from __future__ import with_statement
|
||||
from trytond.model import ModelStorage
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class ModelWorkflow(ModelStorage):
|
||||
@@ -27,7 +28,7 @@ class ModelWorkflow(ModelStorage):
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
instance_obj = Pool().get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -49,8 +50,9 @@ class ModelWorkflow(ModelStorage):
|
||||
|
||||
:param ids: a list of id or an id
|
||||
'''
|
||||
workflow_obj = self.pool.get('workflow')
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
workflow_obj = pool.get('workflow')
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -75,7 +77,7 @@ class ModelWorkflow(ModelStorage):
|
||||
|
||||
:param ids: a list of id or an id
|
||||
'''
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
instance_obj = Pool().get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -96,7 +98,7 @@ class ModelWorkflow(ModelStorage):
|
||||
|
||||
:param ids: a list of id or an id
|
||||
'''
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
instance_obj = Pool().get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
@@ -119,7 +121,7 @@ class ModelWorkflow(ModelStorage):
|
||||
'''
|
||||
if self._name == 'workflow.instance':
|
||||
return
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
instance_obj = Pool().get('workflow.instance')
|
||||
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
|
||||
+45
-59
@@ -1,8 +1,10 @@
|
||||
#This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
#this repository contains the full copyright notices and license terms.
|
||||
from trytond.modules import load_modules, register_classes
|
||||
from __future__ import with_statement
|
||||
from threading import RLock
|
||||
import logging
|
||||
from trytond.modules import load_modules, register_classes
|
||||
from trytond.transaction import Transaction
|
||||
import __builtin__
|
||||
|
||||
|
||||
@@ -16,32 +18,27 @@ class Pool(object):
|
||||
_lock = RLock()
|
||||
_locks = {}
|
||||
_pool = {}
|
||||
_pools = {}
|
||||
test = False
|
||||
_instances = {}
|
||||
|
||||
def __new__(cls, database_name):
|
||||
cls._lock.acquire()
|
||||
lock = cls._locks.setdefault(database_name, RLock())
|
||||
cls._lock.release()
|
||||
lock.acquire()
|
||||
if database_name in cls._pools:
|
||||
res = cls._pools[database_name]
|
||||
lock.release()
|
||||
return res
|
||||
lock.release()
|
||||
return object.__new__(cls)
|
||||
def __new__(cls, database_name=None):
|
||||
if database_name is None:
|
||||
database_name = Transaction().cursor.database_name
|
||||
result = cls._instances.get(database_name)
|
||||
if result:
|
||||
return result
|
||||
lock = cls._locks.get(database_name)
|
||||
if not lock:
|
||||
with cls._lock:
|
||||
lock = cls._locks.setdefault(database_name, RLock())
|
||||
with lock:
|
||||
return cls._instances.setdefault(database_name,
|
||||
super(Pool, cls).__new__(cls))
|
||||
|
||||
def __init__(self, database_name):
|
||||
def __init__(self, database_name=None):
|
||||
if database_name is None:
|
||||
database_name = Transaction().cursor.database_name
|
||||
self.database_name = database_name
|
||||
self._lock.acquire()
|
||||
lock = self._locks.setdefault(database_name, RLock())
|
||||
self._lock.release()
|
||||
lock.acquire()
|
||||
self._pool.setdefault(database_name, {})
|
||||
for type in self.classes.keys():
|
||||
self._pool[database_name].setdefault(type, {})
|
||||
self._pools.setdefault(database_name, self)
|
||||
lock.release()
|
||||
|
||||
@staticmethod
|
||||
def register(klass, type='model'):
|
||||
@@ -58,53 +55,47 @@ class Pool(object):
|
||||
if module:
|
||||
Pool.classes[type].setdefault(module, []).append(klass)
|
||||
|
||||
@staticmethod
|
||||
def start():
|
||||
@classmethod
|
||||
def start(cls):
|
||||
'''
|
||||
Start/restart the Pool
|
||||
'''
|
||||
Pool._lock.acquire()
|
||||
try:
|
||||
with cls._lock:
|
||||
reload_p = False
|
||||
prev_classes = {}
|
||||
for type in Pool.classes:
|
||||
if Pool.classes[type]:
|
||||
for type in cls.classes:
|
||||
if cls.classes.get(type):
|
||||
reload_p = True
|
||||
prev_classes[type] = Pool.classes[type]
|
||||
Pool.classes[type] = {}
|
||||
prev_classes[type] = cls.classes.get(type)
|
||||
cls.classes[type] = {}
|
||||
try:
|
||||
register_classes(reload_p=reload_p)
|
||||
except Exception:
|
||||
if not reload_p:
|
||||
raise
|
||||
for type in prev_classes:
|
||||
Pool.classes[type] = prev_classes[type]
|
||||
for db_name in Pool.database_list():
|
||||
Pool(db_name).init()
|
||||
finally:
|
||||
Pool._lock.release()
|
||||
cls.classes[type] = prev_classes[type]
|
||||
for db_name in cls.database_list():
|
||||
cls(db_name).init()
|
||||
|
||||
@staticmethod
|
||||
def stop(database_name):
|
||||
@classmethod
|
||||
def stop(cls, database_name):
|
||||
'''
|
||||
Stop the Pool
|
||||
'''
|
||||
Pool._lock.acquire()
|
||||
lock = Pool._locks.setdefault(database_name, RLock())
|
||||
Pool._lock.release()
|
||||
lock.acquire()
|
||||
if database_name in Pool._pool:
|
||||
del Pool._pool[database_name]
|
||||
if database_name in Pool._pools:
|
||||
del Pool._pools[database_name]
|
||||
lock.release()
|
||||
with cls._lock:
|
||||
if database_name in cls._instances:
|
||||
del cls._instances[database_name]
|
||||
with cls._locks[database_name]:
|
||||
if database_name in cls._pool:
|
||||
del cls._pool[database_name]
|
||||
|
||||
@staticmethod
|
||||
def database_list():
|
||||
@classmethod
|
||||
def database_list(cls):
|
||||
'''
|
||||
:return: database list
|
||||
'''
|
||||
return Pool._pool.keys()
|
||||
return cls._pool.keys()
|
||||
|
||||
def init(self, update=False, lang=None):
|
||||
'''
|
||||
@@ -116,11 +107,8 @@ class Pool(object):
|
||||
'''
|
||||
logger = logging.getLogger('pool')
|
||||
logger.info('init pool for "%s"' % self.database_name)
|
||||
self._lock.acquire()
|
||||
lock = self._locks.setdefault(self.database_name, RLock())
|
||||
self._lock.release()
|
||||
lock.acquire()
|
||||
try:
|
||||
with self._locks[self.database_name]:
|
||||
self._pool.setdefault(self.database_name, {})
|
||||
#Clean the _pool before loading modules
|
||||
for type in self.classes.keys():
|
||||
self._pool[self.database_name][type] = {}
|
||||
@@ -128,8 +116,6 @@ class Pool(object):
|
||||
lang=lang)
|
||||
if restart:
|
||||
self.init()
|
||||
finally:
|
||||
lock.release()
|
||||
|
||||
def get(self, name, type='model'):
|
||||
'''
|
||||
@@ -164,8 +150,8 @@ class Pool(object):
|
||||
:param obj: the object
|
||||
:param type: the type
|
||||
'''
|
||||
self._pool[self.database_name][type][obj._name] = obj
|
||||
obj.pool = self
|
||||
with self._locks[self.database_name]:
|
||||
self._pool[self.database_name][type][obj._name] = obj
|
||||
|
||||
def object_name_list(self, type='model'):
|
||||
'''
|
||||
|
||||
@@ -104,7 +104,8 @@ class Report(object):
|
||||
a boolean to direct print,
|
||||
the report name
|
||||
'''
|
||||
action_report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
action_report_obj = pool.get('ir.action.report')
|
||||
action_report_ids = action_report_obj.search([
|
||||
('report_name', '=', self._name)
|
||||
])
|
||||
@@ -119,7 +120,8 @@ class Report(object):
|
||||
action_report.name)
|
||||
|
||||
def _get_objects(self, ids, model, datas):
|
||||
model_obj = self.pool.get(model)
|
||||
pool = Pool()
|
||||
model_obj = pool.get(model)
|
||||
return model_obj.browse(ids)
|
||||
|
||||
def parse(self, report, objects, datas, localcontext):
|
||||
@@ -135,8 +137,9 @@ class Report(object):
|
||||
report type
|
||||
report
|
||||
'''
|
||||
pool = Pool()
|
||||
localcontext['datas'] = datas
|
||||
localcontext['user'] = self.pool.get('res.user'
|
||||
localcontext['user'] = pool.get('res.user'
|
||||
).browse(Transaction().user)
|
||||
localcontext['formatLang'] = lambda *args, **kargs: \
|
||||
self.format_lang(*args, **kargs)
|
||||
@@ -147,7 +150,7 @@ class Report(object):
|
||||
localcontext['context'] = Transaction().context
|
||||
|
||||
translate = TranslateFactory(self._name, Transaction().language,
|
||||
self.pool.get('ir.translation'))
|
||||
pool.get('ir.translation'))
|
||||
localcontext['setLang'] = lambda language: translate.set_language(language)
|
||||
|
||||
if not report.report_content:
|
||||
@@ -297,7 +300,8 @@ class Report(object):
|
||||
|
||||
def format_lang(self, value, lang, digits=2, grouping=True, monetary=False,
|
||||
date=False, currency=None, symbol=True):
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
|
||||
if date:
|
||||
if lang:
|
||||
|
||||
+14
-10
@@ -4,12 +4,13 @@
|
||||
from itertools import chain
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class MenuMany2Many(fields.Many2Many):
|
||||
|
||||
def get(self, ids, model, name, values=None):
|
||||
menu_obj = self.get_target(model.pool)
|
||||
menu_obj = self.get_target()
|
||||
res = super(MenuMany2Many, self).get(ids, model, name,
|
||||
values=values)
|
||||
menu_ids = list(set(chain(*res.values())))
|
||||
@@ -72,32 +73,35 @@ class Group(ModelSQL, ModelView):
|
||||
|
||||
def create(self, vals):
|
||||
res = super(Group, self).create(vals)
|
||||
pool = Pool()
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
pool.get('ir.rule').domain_get.reset()
|
||||
# Restart the cache for get_groups
|
||||
self.pool.get('res.user').get_groups.reset()
|
||||
pool.get('res.user').get_groups.reset()
|
||||
# Restart the cache for get_preferences
|
||||
self.pool.get('res.user').get_preferences.reset()
|
||||
pool.get('res.user').get_preferences.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
res = super(Group, self).write(ids, vals)
|
||||
pool = Pool()
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
pool.get('ir.rule').domain_get.reset()
|
||||
# Restart the cache for get_groups
|
||||
self.pool.get('res.user').get_groups.reset()
|
||||
pool.get('res.user').get_groups.reset()
|
||||
# Restart the cache for get_preferences
|
||||
self.pool.get('res.user').get_preferences.reset()
|
||||
pool.get('res.user').get_preferences.reset()
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
res = super(Group, self).delete(ids)
|
||||
pool = Pool()
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
pool.get('ir.rule').domain_get.reset()
|
||||
# Restart the cache for get_groups
|
||||
self.pool.get('res.user').get_groups.reset()
|
||||
pool.get('res.user').get_groups.reset()
|
||||
# Restart the cache for get_preferences
|
||||
self.pool.get('res.user').get_preferences.reset()
|
||||
pool.get('res.user').get_preferences.reset()
|
||||
return res
|
||||
|
||||
Group()
|
||||
|
||||
+13
-12
@@ -3,6 +3,7 @@
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.backend import TableHandler
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class UIMenuGroup(ModelSQL):
|
||||
@@ -25,19 +26,19 @@ class UIMenuGroup(ModelSQL):
|
||||
def create(self, vals):
|
||||
res = super(UIMenuGroup, self).create(vals)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
res = super(UIMenuGroup, self).write(ids, vals)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
res = super(UIMenuGroup, self).delete(ids)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
UIMenuGroup()
|
||||
@@ -63,19 +64,19 @@ class ActionGroup(ModelSQL):
|
||||
def create(self, vals):
|
||||
res = super(ActionGroup, self).create(vals)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
res = super(ActionGroup, self).write(ids, vals)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
def delete(self, ids):
|
||||
res = super(ActionGroup, self).delete(ids)
|
||||
# Restart the cache on the domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
Pool().get('ir.rule').domain_get.reset()
|
||||
return res
|
||||
|
||||
ActionGroup()
|
||||
@@ -147,7 +148,7 @@ class Lang(ModelSQL, ModelView):
|
||||
def write(self, ids, vals):
|
||||
res = super(Lang, self).write(ids, vals)
|
||||
# Restart the cache for get_preferences
|
||||
self.pool.get('res.user').get_preferences.reset()
|
||||
Pool().get('res.user').get_preferences.reset()
|
||||
return res
|
||||
|
||||
Lang()
|
||||
@@ -172,21 +173,21 @@ class SequenceTypeGroup(ModelSQL):
|
||||
ondelete='CASCADE', select=1, required=True)
|
||||
|
||||
def delete(self, ids):
|
||||
rule_obj = self.pool.get('ir.rule')
|
||||
rule_obj = Pool().get('ir.rule')
|
||||
res = super(SequenceTypeGroup, self).delete(ids)
|
||||
# Restart the cache on the domain_get method of ir.rule
|
||||
rule_obj.domain_get.reset()
|
||||
return res
|
||||
|
||||
def create(self, vals):
|
||||
rule_obj = self.pool.get('ir.rule')
|
||||
rule_obj = Pool().get('ir.rule')
|
||||
res = super(SequenceTypeGroup, self).create(vals)
|
||||
# Restart the cache on the domain_get method of ir.rule
|
||||
rule_obj.domain_get.reset()
|
||||
return res
|
||||
|
||||
def write(self, ids, vals):
|
||||
rule_obj = self.pool.get('ir.rule')
|
||||
rule_obj = Pool().get('ir.rule')
|
||||
res = super(SequenceTypeGroup, self).write(ids, vals)
|
||||
# Restart the cache on the domain_get method
|
||||
rule_obj.domain_get.reset()
|
||||
@@ -201,7 +202,7 @@ class Sequence(ModelSQL, ModelView):
|
||||
'User Groups'), 'get_groups', searcher='search_groups')
|
||||
|
||||
def get_groups(self, ids, name):
|
||||
sequence_type_obj = self.pool.get('ir.sequence.type')
|
||||
sequence_type_obj = Pool().get('ir.sequence.type')
|
||||
sequences= self.browse(ids)
|
||||
code2seq = {}
|
||||
for sequence in sequences:
|
||||
@@ -221,7 +222,7 @@ class Sequence(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def search_groups(self, name, clause):
|
||||
sequence_type_obj = self.pool.get('ir.sequence.type')
|
||||
sequence_type_obj = Pool().get('ir.sequence.type')
|
||||
ids = sequence_type_obj.search([clause], order=[])
|
||||
seq_types = sequence_type_obj.browse(ids)
|
||||
codes = set(st.code for st in seq_types)
|
||||
|
||||
@@ -5,6 +5,7 @@ import datetime
|
||||
from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.pyson import Eval, In, If, Not, Equal
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
_STATES = [
|
||||
('draft', 'Draft'),
|
||||
@@ -101,7 +102,8 @@ class Request(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def request_send(self, ids):
|
||||
request_history_obj = self.pool.get('res.request.history')
|
||||
pool = Pool()
|
||||
request_history_obj = pool.get('res.request.history')
|
||||
for request in self.browse(ids):
|
||||
values = {
|
||||
'request': request.id,
|
||||
@@ -177,7 +179,8 @@ class RequestLink(ModelSQL, ModelView):
|
||||
return 5
|
||||
|
||||
def models_get(self):
|
||||
model_obj = self.pool.get('ir.model')
|
||||
pool = Pool()
|
||||
model_obj = pool.get('ir.model')
|
||||
model_ids = model_obj.search([])
|
||||
res = []
|
||||
for model in model_obj.browse(model_ids):
|
||||
@@ -239,7 +242,8 @@ class RequestReference(ModelSQL, ModelView):
|
||||
required=True)
|
||||
|
||||
def links_get(self):
|
||||
request_link_obj = self.pool.get('res.request.link')
|
||||
pool = Pool()
|
||||
request_link_obj = pool.get('res.request.link')
|
||||
ids = request_link_obj.search([])
|
||||
request_links = request_link_obj.browse(ids)
|
||||
return [(x.model, x.name) for x in request_links]
|
||||
|
||||
+18
-10
@@ -18,6 +18,7 @@ from trytond.security import get_connections
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.cache import Cache
|
||||
from trytond.pyson import Eval, Greater
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class User(ModelSQL, ModelView):
|
||||
@@ -112,7 +113,8 @@ class User(ModelSQL, ModelView):
|
||||
return 1
|
||||
|
||||
def default_menu(self):
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
action_ids = action_obj.search([
|
||||
('usage', '=', 'menu'),
|
||||
], limit=1)
|
||||
@@ -125,7 +127,8 @@ class User(ModelSQL, ModelView):
|
||||
|
||||
def get_language_direction(self, ids, name):
|
||||
res = {}
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
default_direction = lang_obj.default_direction()
|
||||
for user in self.browse(ids):
|
||||
if user.language:
|
||||
@@ -150,7 +153,8 @@ class User(ModelSQL, ModelView):
|
||||
|
||||
def _convert_vals(self, vals):
|
||||
vals = vals.copy()
|
||||
action_obj = self.pool.get('ir.action')
|
||||
pool = Pool()
|
||||
action_obj = pool.get('ir.action')
|
||||
if 'action' in vals:
|
||||
vals['action'] = action_obj.get_action_id(vals['action'])
|
||||
if 'menu' in vals:
|
||||
@@ -175,7 +179,8 @@ class User(ModelSQL, ModelView):
|
||||
vals = self._convert_vals(vals)
|
||||
res = super(User, self).write(ids, vals)
|
||||
# Restart the cache for domain_get method
|
||||
self.pool.get('ir.rule').domain_get.reset()
|
||||
pool = Pool()
|
||||
pool.get('ir.rule').domain_get.reset()
|
||||
# Restart the cache for get_groups
|
||||
self.get_groups.reset()
|
||||
# Restart the cache for _get_login
|
||||
@@ -183,9 +188,9 @@ class User(ModelSQL, ModelView):
|
||||
# Restart the cache for get_preferences
|
||||
self.get_preferences.reset()
|
||||
# Restart the cache of check
|
||||
self.pool.get('ir.model.access').check.reset()
|
||||
pool.get('ir.model.access').check.reset()
|
||||
# Restart the cache
|
||||
for _, model in self.pool.iterobject():
|
||||
for _, model in pool.iterobject():
|
||||
try:
|
||||
model.fields_view_get.reset()
|
||||
except Exception:
|
||||
@@ -290,7 +295,8 @@ class User(ModelSQL, ModelView):
|
||||
:param values: a dictionary with values
|
||||
:param old_password: the previous password if password is in values
|
||||
'''
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
values_clean = values.copy()
|
||||
fields = self._preferences_fields + self._context_fields
|
||||
user_id = Transaction().user
|
||||
@@ -314,8 +320,9 @@ class User(ModelSQL, ModelView):
|
||||
self.write(user_id, values_clean)
|
||||
|
||||
def get_preferences_fields_view(self):
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
pool = Pool()
|
||||
model_data_obj = pool.get('ir.model.data')
|
||||
lang_obj = pool.get('ir.lang')
|
||||
|
||||
view_id = model_data_obj.get_id('res', 'user_view_form_preferences')
|
||||
res = self.fields_view_get(view_id=view_id)
|
||||
@@ -492,7 +499,8 @@ class UserConfig(Wizard):
|
||||
return {}
|
||||
|
||||
def _add(self, data):
|
||||
res_obj = self.pool.get('res.user')
|
||||
pool = Pool()
|
||||
res_obj = pool.get('res.user')
|
||||
res_obj.create(data['form'])
|
||||
return {}
|
||||
|
||||
|
||||
+27
-16
@@ -7,6 +7,7 @@ from trytond.model import ModelView, ModelSQL, fields
|
||||
from trytond.version import PACKAGE, VERSION, WEBSITE
|
||||
from trytond.tools import reduce_ids, safe_eval
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Collection(ModelSQL, ModelView):
|
||||
@@ -47,7 +48,8 @@ class Collection(ModelSQL, ModelView):
|
||||
return '[]'
|
||||
|
||||
def check_attachment(self, ids):
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
pool = Pool()
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
for collection in self.browse(ids):
|
||||
if collection.parent:
|
||||
attachment_ids = attachment_obj.search([
|
||||
@@ -60,8 +62,9 @@ class Collection(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def _uri2object(self, uri, object_name=_name, object_id=False, cache=None):
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
report_obj = pool.get('ir.action.report')
|
||||
cache_uri = uri
|
||||
|
||||
if cache is not None:
|
||||
@@ -233,7 +236,8 @@ class Collection(ModelSQL, ModelView):
|
||||
return object_name, object_id
|
||||
|
||||
def get_childs(self, uri, filter=None, cache=None):
|
||||
report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
report_obj = pool.get('ir.action.report')
|
||||
res = []
|
||||
if filter:
|
||||
return []
|
||||
@@ -253,7 +257,7 @@ class Collection(ModelSQL, ModelView):
|
||||
if object_name == self._name and object_id:
|
||||
collection = self.browse(object_id)
|
||||
if collection.model:
|
||||
model_obj = self.pool.get(collection.model.model)
|
||||
model_obj = pool.get(collection.model.model)
|
||||
if not model_obj:
|
||||
return res
|
||||
model_ids = model_obj.search(
|
||||
@@ -289,7 +293,7 @@ class Collection(ModelSQL, ModelView):
|
||||
cache.setdefault(report_obj._name, {})
|
||||
cache[report_obj._name][report.id] = {}
|
||||
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
attachment_ids = attachment_obj.search([
|
||||
('resource', '=', '%s,%s' % (object_name, object_id)),
|
||||
])
|
||||
@@ -312,11 +316,12 @@ class Collection(ModelSQL, ModelView):
|
||||
|
||||
def get_displayname(self, uri, cache=None):
|
||||
object_name, object_id = self._uri2object(uri, cache=cache)
|
||||
model_obj = self.pool.get(object_name)
|
||||
model_obj = Pool().get(object_name)
|
||||
return model_obj.browse(object_id).rec_name
|
||||
|
||||
def get_contentlength(self, uri, cache=None):
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
pool = Pool()
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
|
||||
object_name, object_id = self._uri2object(uri, cache=cache)
|
||||
if object_name == 'ir.attachment':
|
||||
@@ -360,9 +365,10 @@ class Collection(ModelSQL, ModelView):
|
||||
return "application/octet-stream"
|
||||
|
||||
def get_creationdate(self, uri, cache=None):
|
||||
pool = Pool()
|
||||
object_name, object_id = self._uri2object(uri, cache=cache)
|
||||
if object_name == 'ir.attachment':
|
||||
model_obj = self.pool.get(object_name)
|
||||
model_obj = pool.get(object_name)
|
||||
if object_id:
|
||||
if cache is not None:
|
||||
cache.setdefault(model_obj._name, {})
|
||||
@@ -394,9 +400,10 @@ class Collection(ModelSQL, ModelView):
|
||||
return time.time()
|
||||
|
||||
def get_lastmodified(self, uri, cache=None):
|
||||
pool = Pool()
|
||||
object_name, object_id = self._uri2object(uri, cache=cache)
|
||||
if object_name == 'ir.attachment':
|
||||
model_obj = self.pool.get(object_name)
|
||||
model_obj = pool.get(object_name)
|
||||
if object_id:
|
||||
if cache is not None:
|
||||
cache.setdefault(model_obj._name, {})
|
||||
@@ -430,8 +437,9 @@ class Collection(ModelSQL, ModelView):
|
||||
|
||||
def get_data(self, uri, cache=None):
|
||||
from DAV.errors import DAV_NotFound
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
report_obj = self.pool.get('ir.action.report')
|
||||
pool = Pool()
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
report_obj = pool.get('ir.action.report')
|
||||
|
||||
if uri:
|
||||
object_name, object_id = self._uri2object(uri, cache=cache)
|
||||
@@ -473,7 +481,7 @@ class Collection(ModelSQL, ModelView):
|
||||
1)[-1].rsplit('.', 1)[0])
|
||||
report = report_obj.browse(report_id)
|
||||
if report.report_name:
|
||||
report_obj = self.pool.get(report.report_name,
|
||||
report_obj = pool.get(report.report_name,
|
||||
type='report')
|
||||
val = report_obj.execute([object_id],
|
||||
{'id': object_id, 'ids': [object_id]})
|
||||
@@ -489,7 +497,8 @@ class Collection(ModelSQL, ModelView):
|
||||
or object_name in ('ir.attachment') \
|
||||
or not object_id:
|
||||
raise DAV_Forbidden
|
||||
attachment_obj = self.pool.get('ir.attachment')
|
||||
pool = Pool()
|
||||
attachment_obj = pool.get('ir.attachment')
|
||||
object_name2, object_id2 = self._uri2object(uri, cache=cache)
|
||||
if not object_id2:
|
||||
name = get_urifilename(uri)
|
||||
@@ -550,7 +559,8 @@ class Collection(ModelSQL, ModelView):
|
||||
if object_name != 'ir.attachment' \
|
||||
or not object_id:
|
||||
raise DAV_Forbidden
|
||||
model_obj = self.pool.get(object_name)
|
||||
pool = Pool()
|
||||
model_obj = pool.get(object_name)
|
||||
try:
|
||||
model_obj.delete(object_id)
|
||||
except Exception:
|
||||
@@ -584,7 +594,8 @@ class Attachment(ModelSQL, ModelView):
|
||||
})
|
||||
|
||||
def check_collection(self, ids):
|
||||
collection_obj = self.pool.get('webdav.collection')
|
||||
pool = Pool()
|
||||
collection_obj = pool.get('webdav.collection')
|
||||
for attachment in self.browse(ids):
|
||||
if attachment.resource:
|
||||
model_name, record_id = attachment.resource.split(',')
|
||||
|
||||
@@ -12,7 +12,6 @@ from trytond.error import WarningErrorMixin
|
||||
class Wizard(WarningErrorMixin):
|
||||
_name = ""
|
||||
states = {}
|
||||
pool = None
|
||||
|
||||
def __new__(cls):
|
||||
Pool.register(cls, type='wizard')
|
||||
@@ -29,7 +28,8 @@ class Wizard(WarningErrorMixin):
|
||||
self._datas = {}
|
||||
|
||||
def init(self, module_name):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
cursor = Transaction().cursor
|
||||
for state in self.states.keys():
|
||||
if self.states[state]['result']['type'] == 'form':
|
||||
@@ -100,8 +100,9 @@ class Wizard(WarningErrorMixin):
|
||||
self._lock.release()
|
||||
|
||||
def execute(self, wiz_id, data, state='init'):
|
||||
translation_obj = self.pool.get('ir.translation')
|
||||
wizard_size_obj = self.pool.get('ir.action.wizard_size')
|
||||
pool = Pool()
|
||||
translation_obj = pool.get('ir.translation')
|
||||
wizard_size_obj = pool.get('ir.action.wizard_size')
|
||||
res = {}
|
||||
|
||||
if self._datas.get(wiz_id, {}).get('user') != Transaction().user:
|
||||
@@ -129,7 +130,7 @@ class Wizard(WarningErrorMixin):
|
||||
if result_def['type'] == 'action':
|
||||
res['action'] = getattr(self, result_def['action'])(data)
|
||||
elif result_def['type'] == 'form':
|
||||
obj = self.pool.get(result_def['object'])
|
||||
obj = pool.get(result_def['object'])
|
||||
|
||||
view = obj.fields_view_get(view_type='form', toolbar=False)
|
||||
fields = view['fields']
|
||||
|
||||
@@ -10,6 +10,7 @@ from trytond.tools import exec_command_pipe
|
||||
from trytond.backend import TableHandler
|
||||
from trytond.pyson import Eval, Equal, Not
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool
|
||||
|
||||
|
||||
class Workflow(ModelSQL, ModelView):
|
||||
@@ -172,8 +173,9 @@ class WorkflowInstance(ModelSQL, ModelView):
|
||||
return res
|
||||
|
||||
def create(self, values):
|
||||
activity_obj = self.pool.get('workflow.activity')
|
||||
workitem_obj = self.pool.get('workflow.workitem')
|
||||
pool = Pool()
|
||||
activity_obj = pool.get('workflow.activity')
|
||||
workitem_obj = pool.get('workflow.workitem')
|
||||
|
||||
instance_id = super(WorkflowInstance, self).create(values)
|
||||
|
||||
@@ -196,7 +198,8 @@ class WorkflowInstance(ModelSQL, ModelView):
|
||||
def update(self, instance):
|
||||
'''
|
||||
'''
|
||||
workitem_obj = self.pool.get('workflow.workitem')
|
||||
pool = Pool()
|
||||
workitem_obj = pool.get('workflow.workitem')
|
||||
for workitem in instance.workitems:
|
||||
workitem_obj.process(workitem)
|
||||
instance = self.browse(instance.id)
|
||||
@@ -205,7 +208,8 @@ class WorkflowInstance(ModelSQL, ModelView):
|
||||
def validate(self, instance, signal, force_running=False):
|
||||
'''
|
||||
'''
|
||||
workitem_obj = self.pool.get('workflow.workitem')
|
||||
pool = Pool()
|
||||
workitem_obj = pool.get('workflow.workitem')
|
||||
for workitem in instance.workitems:
|
||||
workitem_obj.process(workitem, signal=signal,
|
||||
force_running=force_running)
|
||||
@@ -213,7 +217,8 @@ class WorkflowInstance(ModelSQL, ModelView):
|
||||
return self._update_end(instance)
|
||||
|
||||
def _update_end(self, instance):
|
||||
workitem_obj = self.pool.get('workflow.workitem')
|
||||
pool = Pool()
|
||||
workitem_obj = pool.get('workflow.workitem')
|
||||
res = True
|
||||
for workitem in instance.workitems:
|
||||
if (workitem.state != 'complete') \
|
||||
@@ -309,7 +314,8 @@ class WorkflowWorkitem(ModelSQL, ModelView):
|
||||
:param signal: the signal
|
||||
:param force_running: a boolean
|
||||
'''
|
||||
trigger_obj = self.pool.get('workflow.trigger')
|
||||
pool = Pool()
|
||||
trigger_obj = pool.get('workflow.trigger')
|
||||
activity = workitem.activity
|
||||
triggers = False
|
||||
if workitem.state == 'active':
|
||||
@@ -347,7 +353,8 @@ class WorkflowWorkitem(ModelSQL, ModelView):
|
||||
workitem._data[workitem.id]['state'] = state
|
||||
|
||||
def _execute(self, workitem, activity):
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
#send a signal to overflow
|
||||
if (workitem.state == 'active') and activity.signal_send:
|
||||
for overflow in workitem.overflows:
|
||||
@@ -409,7 +416,8 @@ class WorkflowWorkitem(ModelSQL, ModelView):
|
||||
return True
|
||||
|
||||
def _split_test(self, workitem, split_mode, signal=None):
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
test = False
|
||||
transitions = []
|
||||
if split_mode == 'XOR' or split_mode == 'OR':
|
||||
@@ -443,7 +451,8 @@ class WorkflowWorkitem(ModelSQL, ModelView):
|
||||
return False
|
||||
|
||||
def _join_test(self, transition, instance):
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
activity = transition.act_to
|
||||
if activity.join_mode == 'XOR':
|
||||
self.create({
|
||||
@@ -515,9 +524,10 @@ class InstanceGraph(Report):
|
||||
|
||||
def execute(self, ids, datas):
|
||||
import pydot
|
||||
lang_obj = self.pool.get('ir.lang')
|
||||
workflow_obj = self.pool.get('workflow')
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
lang_obj = pool.get('ir.lang')
|
||||
workflow_obj = pool.get('workflow')
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
|
||||
lang_id = lang_obj.search([
|
||||
('code', '=', Transaction().language),
|
||||
@@ -562,14 +572,16 @@ class InstanceGraph(Report):
|
||||
return ('png', base64.encodestring(data), False, workflow.name)
|
||||
|
||||
def graph_instance_get(self, graph, instance_id, nested=False):
|
||||
instance_obj = self.pool.get('workflow.instance')
|
||||
pool = Pool()
|
||||
instance_obj = pool.get('workflow.instance')
|
||||
instance = instance_obj.browse(instance_id)
|
||||
self.graph_get(graph, instance.workflow.id, nested,
|
||||
self.workitem_get(instance.id))
|
||||
|
||||
def workitem_get(self, instance_id):
|
||||
res = {}
|
||||
workitem_obj = self.pool.get('workflow.workitem')
|
||||
pool = Pool()
|
||||
workitem_obj = pool.get('workflow.workitem')
|
||||
workitem_ids = workitem_obj.search([
|
||||
('instance', '=', instance_id),
|
||||
])
|
||||
@@ -585,9 +597,10 @@ class InstanceGraph(Report):
|
||||
import pydot
|
||||
if workitem is None:
|
||||
workitem = {}
|
||||
activity_obj = self.pool.get('workflow.activity')
|
||||
workflow_obj = self.pool.get('workflow')
|
||||
transition_obj = self.pool.get('workflow.transition')
|
||||
pool = Pool()
|
||||
activity_obj = pool.get('workflow.activity')
|
||||
workflow_obj = pool.get('workflow')
|
||||
transition_obj = pool.get('workflow.transition')
|
||||
activity_ids = activity_obj.search([
|
||||
('workflow', '=', workflow_id),
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user