service = None
-# Inter-process signaling:
-# The `base_registry_signaling` sequence indicates the whole registry
-# must be reloaded.
-# The `base_cache_signaling sequence` indicates all caches must be
-# invalidated (i.e. cleared).
-base_registry_signaling_sequence = None
-base_cache_signaling_sequence = None
-
class object_proxy(object):
def __init__(self):
- self.logger = logging.getLogger('web-services')
global service
service = self
tr(osv_pool._sql_error[key], 'sql_constraint') or inst[0])
if inst.pgcode in (errorcodes.NOT_NULL_VIOLATION, errorcodes.FOREIGN_KEY_VIOLATION, errorcodes.RESTRICT_VIOLATION):
msg = _('The operation cannot be completed, probably due to the following:\n- deletion: you may be trying to delete a record while other records still reference it\n- creation/update: a mandatory field is not correctly set')
- self.logger.debug("IntegrityError", exc_info=True)
+ _logger.debug("IntegrityError", exc_info=True)
try:
errortxt = inst.pgerror.replace('«','"').replace('»','"')
if '"public".' in errortxt:
else:
netsvc.abort_response(1, _('Integrity Error'), 'warning', inst[0])
except Exception:
- self.logger.exception("Uncaught exception")
+ _logger.exception("Uncaught exception")
raise
return wrapper
@check
def execute(self, db, uid, obj, method, *args, **kw):
-
- # Check if the model registry must be reloaded (e.g. after the
- # database has been updated by another process).
- cr = pooler.get_db(db).cursor()
- registry_reloaded = False
- try:
- cr.execute('select last_value from base_registry_signaling')
- r = cr.fetchone()[0]
- global base_registry_signaling_sequence
- if base_registry_signaling_sequence != r:
- _logger.info("Reloading the model registry after database signaling.")
- base_registry_signaling_sequence = r
- # Don't run the cron in the Gunicorn worker.
- openerp.modules.registry.RegistryManager.new(db, pooljobs=False)
- registry_reloaded = True
- finally:
- cr.close()
-
- # Check if the model caches must be invalidated (e.g. after a write
- # occured on another process). Don't clear right after a registry
- # has been reload.
- cr = pooler.get_db(db).cursor()
- try:
- cr.execute('select last_value from base_cache_signaling')
- r = cr.fetchone()[0]
- global base_cache_signaling_sequence
- if base_cache_signaling_sequence != r and not registry_reloaded:
- _logger.info("Invalidating all model caches after database signaling.")
- base_cache_signaling_sequence = r
- registry = openerp.modules.registry.RegistryManager.get(db, pooljobs=False)
- registry.clear_caches()
- finally:
- cr.close()
-
cr = pooler.get_db(db).cursor()
try:
try:
raise except_osv('Access Denied', 'Private methods (such as %s) cannot be called remotely.' % (method,))
res = self.execute_cr(cr, uid, obj, method, *args, **kw)
if res is None:
- self.logger.warning('The method %s of the object %s can not return `None` !', method, obj)
+ _logger.warning('The method %s of the object %s can not return `None` !', method, obj)
cr.commit()
except Exception:
cr.rollback()