Changing the decimal precision of float fields is a rare
operation, while cache clearing occurs fairly frequently.
Signaling a full registry change when the decimal precision
is changed (instead of a mere cache change) is therefore
a better trade-off, and more semantically correct as well.
This way we avoid the decimal precision refresh for each
invalidation.
Registry invalidation implies cache invalidation.
for field in model._fields.values():
if field.type == 'float':
field._setup_digits(env)
for field in model._fields.values():
if field.type == 'float':
field._setup_digits(env)
- RegistryManager.signal_caches_change(cr.dbname)
+ RegistryManager.signal_registry_change(cr.dbname)
def create(self, cr, uid, data, context=None):
res = super(decimal_precision, self).create(cr, uid, data, context=context)
def create(self, cr, uid, data, context=None):
res = super(decimal_precision, self).create(cr, uid, data, context=context)
_logger.info("Invalidating all model caches after database signaling.")
registry.clear_caches()
registry.reset_any_cache_cleared()
_logger.info("Invalidating all model caches after database signaling.")
registry.clear_caches()
registry.reset_any_cache_cleared()
- # One possible reason caches have been invalidated is the
- # use of decimal_precision.write(), in which case we need
- # to refresh fields.float columns.
- env = openerp.api.Environment(cr, SUPERUSER_ID, {})
- for model in registry.values():
- for field in model._fields.values():
- if field.type == 'float':
- field._setup_digits(env)
registry.base_registry_signaling_sequence = r
registry.base_cache_signaling_sequence = c
finally:
registry.base_registry_signaling_sequence = r
registry.base_cache_signaling_sequence = c
finally: