Remove Pool.object_name_list

This method is inefficient for testing existence of an item, it is better to
ask for forgiveness.

review12761002
This commit is contained in:
Cédric Krier
2014-12-16 22:02:44 +01:00
parent bef0afaed6
commit 38b59e0329
7 changed files with 46 additions and 48 deletions
+1
View File
@@ -1,3 +1,4 @@
* Remove Pool.object_name_list
* Add translated descriptor for Dict field
* Clean private context keyword in RPC
* Add cache section in configuration
-4
View File
@@ -35,10 +35,6 @@ Instance methods:
Return the named instance of type from the pool.
.. method:: Pool.object_name_list([type])
Return the list of instances names.
.. method:: Pool.iterobject([type])
Return an interator over instances names.
+7 -6
View File
@@ -366,13 +366,12 @@ class Fs2bdAccessor:
record_ids.setdefault(rec.model, [])
record_ids[rec.model].append(rec.db_id)
object_name_list = set(self.pool.object_name_list())
self.browserecord[module] = {}
for model_name in record_ids.keys():
if model_name not in object_name_list:
try:
Model = self.pool.get(model_name)
except KeyError:
continue
Model = self.pool.get(model_name)
self.browserecord[module][model_name] = {}
for sub_record_ids in grouped_slice(record_ids[model_name]):
with Transaction().set_context(active_test=False):
@@ -792,7 +791,6 @@ def post_import(pool, module, to_delete):
('module', '=', module),
], order=[('id', 'DESC')])
object_name_list = set(pool.object_name_list())
for mrec in mdata:
model, db_id = mrec.model, mrec.db_id
@@ -800,8 +798,11 @@ def post_import(pool, module, to_delete):
'Deleting %s@%s' % (db_id, model))
try:
# Deletion of the record
if model in object_name_list:
try:
Model = pool.get(model)
except KeyError:
Model = None
if Model:
Model.delete([Model(db_id)])
mdata_delete.append(mrec)
else:
+27 -15
View File
@@ -1231,9 +1231,10 @@ class TranslationClean(Wizard):
model_name, field_name = translation.name.split(',', 1)
except ValueError:
return True
if model_name not in pool.object_name_list():
try:
Model = pool.get(model_name)
except KeyError:
return True
Model = pool.get(model_name)
if field_name not in Model._fields:
return True
@@ -1244,10 +1245,11 @@ class TranslationClean(Wizard):
model_name, field_name = translation.name.split(',', 1)
except ValueError:
return True
if model_name not in pool.object_name_list():
try:
Model = pool.get(model_name)
except KeyError:
return True
if translation.res_id >= 0:
Model = pool.get(model_name)
if field_name not in Model._fields:
return True
field = Model._fields[field_name]
@@ -1274,9 +1276,10 @@ class TranslationClean(Wizard):
model_name, field_name = translation.name.split(',', 1)
except ValueError:
return True
if model_name not in pool.object_name_list():
try:
Model = pool.get(model_name)
except KeyError:
return True
Model = pool.get(model_name)
if field_name not in Model._fields:
return True
field = Model._fields[field_name]
@@ -1292,7 +1295,9 @@ class TranslationClean(Wizard):
def _clean_view(translation):
pool = Pool()
model_name = translation.name
if model_name not in pool.object_name_list():
try:
pool.get(model_name)
except KeyError:
return True
@staticmethod
@@ -1303,10 +1308,10 @@ class TranslationClean(Wizard):
translation.name.split(',', 2)
except ValueError:
return True
if (wizard_name not in
pool.object_name_list(type='wizard')):
try:
Wizard = pool.get(wizard_name, type='wizard')
except KeyError:
return True
Wizard = pool.get(wizard_name, type='wizard')
if not Wizard:
return True
state = Wizard.states.get(state_name)
@@ -1323,9 +1328,10 @@ class TranslationClean(Wizard):
model_name, field_name = translation.name.split(',', 1)
except ValueError:
return True
if model_name not in pool.object_name_list():
try:
Model = pool.get(model_name)
except KeyError:
return True
Model = pool.get(model_name)
if field_name not in Model._fields:
return True
field = Model._fields[field_name]
@@ -1360,8 +1366,15 @@ class TranslationClean(Wizard):
'recursion_error',
):
return False
if model_name in pool.object_name_list():
Model, Wizard = None, None
try:
Model = pool.get(model_name)
except KeyError:
try:
Wizard = pool.get(model_name, type='wizard')
except KeyError:
pass
if Model:
errors = Model._error_messages.values()
if issubclass(Model, ModelSQL):
errors += Model._sql_error_messages.values()
@@ -1369,8 +1382,7 @@ class TranslationClean(Wizard):
errors.append(error)
if translation.src not in errors:
return True
elif model_name in pool.object_name_list(type='wizard'):
Wizard = pool.get(model_name, type='wizard')
elif Wizard:
errors = Wizard._error_messages.values()
if translation.src not in errors:
return True
+8 -7
View File
@@ -866,13 +866,14 @@ class ModelStorage(Model):
if not call(field[0]):
cls.raise_user_error(field[1])
if 'res.user' not in pool.object_name_list() \
or Transaction().user == 0:
ctx_pref = {
}
else:
User = pool.get('res.user')
ctx_pref = User.get_preferences(context_only=True)
ctx_pref = {}
if Transaction().user:
try:
User = pool.get('res.user')
except KeyError:
pass
else:
ctx_pref = User.get_preferences(context_only=True)
def is_pyson(test):
if isinstance(test, PYSON):
-14
View File
@@ -186,20 +186,6 @@ class Pool(object):
with self._locks[self.database_name]:
self._pool[self.database_name][type][cls.__name__] = cls
def object_name_list(self, type='model'):
'''
Return the object name list of a type
:param type: the type
:return: a list of name
'''
if type == '*':
res = []
for type in self.classes.keys():
res += self._pool[self.database_name][type].keys()
return res
return self._pool[self.database_name][type].keys()
def iterobject(self, type='model'):
'''
Return an iterator over object name, object
+3 -2
View File
@@ -154,9 +154,10 @@ class TrytonServer(object):
if not pool.lock.acquire(0):
continue
try:
if 'ir.cron' not in pool.object_name_list():
try:
Cron = pool.get('ir.cron')
except KeyError:
continue
Cron = pool.get('ir.cron')
finally:
pool.lock.release()
thread = threading.Thread(