Change Pool into a Singleton

review42001
This commit is contained in:
Cédric Krier
2011-07-03 13:20:58 +02:00
parent b731dab7c7
commit 550aae8351
37 changed files with 565 additions and 400 deletions
+1
View File
@@ -1,3 +1,4 @@
* Change Pool into a Singleton
* Remove support of zipped modules
Version 2.0.0 - 2011-04-26
+2 -2
View File
@@ -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`.
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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]
+8 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+8 -5
View File
@@ -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
View File
@@ -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,
+5 -2
View File
@@ -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
View File
@@ -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 {
+8 -4
View File
@@ -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([])
+9 -5
View File
@@ -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
View File
@@ -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
+9 -6
View File
@@ -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:
+8 -8
View File
@@ -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
+6 -3
View File
@@ -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 -1
View File
@@ -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),
])
+10 -6
View File
@@ -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]
+4 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+40 -29
View File
@@ -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 -8
View File
@@ -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(
+8 -6
View File
@@ -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
View File
@@ -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'):
'''
+9 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+7 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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(',')
+6 -5
View File
@@ -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']
+30 -17
View File
@@ -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),
])