Please review this at http://codereview.appspot.com/186208/show
Affected files:
M trytond/model/modelsql.py
Index: trytond/model/modelsql.py
===================================================================
--- a/trytond/model/modelsql.py
+++ b/trytond/model/modelsql.py
@@ -1217,37 +1217,32 @@
datas = cursor.dictfetchall()
cache = cursor.get_cache(context)
cache.setdefault(self._name, {})
+ delete_records = context.setdefault('_delete_records', {})\
+ .setdefault(self._name, set())
+ object_name_list = self.pool.object_name_list()
+ browse_record_null = BrowseRecordNull()
+ keys = None
+ name2model = {}
for data in datas:
- if data['id'] in context.setdefault('_delete_records', {})\
- .setdefault(self._name, set()):
+ if data['id'] in delete_records:
continue
- for i in data.keys():
- if i in ('_timestamp', '_datetime'):
- continue
- field = self._columns[i]
- if field._type in ('many2one',):
- if field.model_name not in
self.pool.object_name_list():
- del data[i]
+ if not keys:
+ keys = data.keys()
+ for i in keys[:]:
+ if i in ('_timestamp', '_datetime'):
+ keys.remove(i)
continue
- if data[i] in
context.setdefault('_delete_records', {})\
- .setdefault(field.model_name, set()):
- del data[i]
+ field = self._columns[i]
+ if field._type not in ('many2one',):
+ keys.remove(i)
continue
- model = self.pool.get(field.model_name)
- if not data[i] and not (isinstance(data[i], (int,
long))
- and not isinstance(data[i], type(False))):
- data[i] = BrowseRecordNull()
- else:
- ctx = context
- if hasattr(field, 'datetime_field') \
- and field.datetime_field:
- ctx = context.copy()
- if field.datetime_field not in data:
- del data[i]
- continue
- ctx['_datetime'] = data[field.datetime_field]
- data[i] = BrowseRecord(cursor, user, data[i],
- model, context=ctx)
+ context['_delete_records'].setdefault(field.model_name,
+ set())
+ if field.model_name in object_name_list:
+ name2model[field.model_name] = \
+ self.pool.get(field.model_name)
+ for i in keys:
+ del data[i]
cache[self._name].setdefault(data['id'], {})
cache[self._name][data['id']].update(data)
--
Cédric Krier
B2CK SPRL
Rue de Rotterdam, 4
4000 Liège
Belgium
Tel: +32 472 54 46 59
Email: [email protected]
Jabber: [email protected]
Website: http://www.b2ck.com/
twitter: http://twitter.com/cedrickrier
identi.ca: http://identi.ca/cedrickrier
pgp1KGS1YxExj.pgp
Description: PGP signature
