[REF] services: somewhat clean use of openerp exceptions.
bzr revid: vmt@openerp.com-20130130134451-yft2y56hkpnoxgwa
This commit is contained in:
parent
19b0315f68
commit
674056c4a5
|
@ -67,10 +67,6 @@ def close_socket(sock):
|
|||
raise
|
||||
sock.close()
|
||||
|
||||
def abort_response(dummy_1, description, dummy_2, details):
|
||||
# TODO Replace except_{osv,orm} with these directly.
|
||||
raise openerp.osv.osv.except_osv(description, details)
|
||||
|
||||
class Service(object):
|
||||
""" Base class for Local services
|
||||
Functionality here is trusted, no authentication.
|
||||
|
|
|
@ -21,18 +21,21 @@
|
|||
|
||||
#.apidoc title: Objects Services (OSV)
|
||||
|
||||
from openerp.osv.orm import Model, TransientModel, AbstractModel
|
||||
from openerp.osv.orm import except_orm, Model, TransientModel, AbstractModel
|
||||
|
||||
# Deprecated.
|
||||
class except_osv(Exception):
|
||||
def __init__(self, name, value):
|
||||
self.name = name
|
||||
self.value = value
|
||||
self.args = (name, value)
|
||||
# Deprecated, kept for backward compatibility.
|
||||
# openerp.exceptions.Warning should be used instead.
|
||||
except_osv = except_orm
|
||||
|
||||
# deprecated - for backward compatibility.
|
||||
# Deprecated, kept for backward compatibility.
|
||||
osv = Model
|
||||
osv_memory = TransientModel
|
||||
osv_abstract = AbstractModel # ;-)
|
||||
|
||||
# Deprecated, kept for backward compatibility, in particular for audittrail.
|
||||
class object_service(object):
|
||||
def __init__(self):
|
||||
import openerp.service.model
|
||||
# TODO monkeypatch openerp.service.model to call the new object_service instance methods.
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -8,7 +8,6 @@ import threading
|
|||
import openerp
|
||||
from openerp.tools.translate import translate
|
||||
from openerp.osv.orm import except_orm
|
||||
from openerp.osv.osv import except_osv
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -80,18 +79,15 @@ def check(f):
|
|||
|
||||
try:
|
||||
if openerp.pooler.get_pool(dbname)._init:
|
||||
raise except_osv('Database not ready', 'Currently, this database is not fully loaded and can not be used.')
|
||||
raise openerp.exceptions.Warning('Currently, this database is not fully loaded and can not be used.')
|
||||
return f(dbname, *args, **kwargs)
|
||||
except except_orm, inst:
|
||||
raise except_osv(inst.name, inst.value)
|
||||
except except_osv:
|
||||
except except_orm:
|
||||
raise
|
||||
except IntegrityError, inst:
|
||||
osv_pool = openerp.pooler.get_pool(dbname)
|
||||
for key in osv_pool._sql_error.keys():
|
||||
if key in inst[0]:
|
||||
openerp.netsvc.abort_response(1, _('Constraint Error'), 'warning',
|
||||
tr(osv_pool._sql_error[key], 'sql_constraint') or inst[0])
|
||||
raise openerp.osv.orm.except_orm(_('Constraint Error'), 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')
|
||||
_logger.debug("IntegrityError", exc_info=True)
|
||||
|
@ -111,9 +107,9 @@ def check(f):
|
|||
msg += _('\n\n[object with reference: %s - %s]') % (model_name, model)
|
||||
except Exception:
|
||||
pass
|
||||
openerp.netsvc.abort_response(1, _('Integrity Error'), 'warning', msg)
|
||||
raise openerp.osv.orm.except_orm(_('Integrity Error'), msg)
|
||||
else:
|
||||
openerp.netsvc.abort_response(1, _('Integrity Error'), 'warning', inst[0])
|
||||
raise openerp.osv.orm.except_orm(_('Integrity Error'), inst[0])
|
||||
except Exception:
|
||||
_logger.exception("Uncaught exception")
|
||||
raise
|
||||
|
@ -123,7 +119,7 @@ def check(f):
|
|||
def execute_cr(cr, uid, obj, method, *args, **kw):
|
||||
object = openerp.pooler.get_pool(cr.dbname).get(obj)
|
||||
if not object:
|
||||
raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
|
||||
raise except_orm('Object Error', 'Object %s doesn\'t exist' % str(obj))
|
||||
return getattr(object, method)(cr, uid, *args, **kw)
|
||||
|
||||
def execute_kw(db, uid, obj, method, args, kw=None):
|
||||
|
@ -136,7 +132,7 @@ def execute(db, uid, obj, method, *args, **kw):
|
|||
try:
|
||||
try:
|
||||
if method.startswith('_'):
|
||||
raise except_osv('Access Denied', 'Private methods (such as %s) cannot be called remotely.' % (method,))
|
||||
raise except_orm('Access Denied', 'Private methods (such as %s) cannot be called remotely.' % (method,))
|
||||
res = execute_cr(cr, uid, obj, method, *args, **kw)
|
||||
if res is None:
|
||||
_logger.warning('The method %s of the object %s can not return `None` !', method, obj)
|
||||
|
@ -151,7 +147,7 @@ def execute(db, uid, obj, method, *args, **kw):
|
|||
def exec_workflow_cr(cr, uid, obj, signal, *args):
|
||||
object = openerp.pooler.get_pool(cr.dbname).get(obj)
|
||||
if not object:
|
||||
raise except_osv('Object Error', 'Object %s doesn\'t exist' % str(obj))
|
||||
raise except_orm('Object Error', 'Object %s doesn\'t exist' % str(obj))
|
||||
res_id = args[0]
|
||||
return object._workflow_signal(cr, uid, [res_id], signal)[res_id]
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ class TinySocketClientThread(threading.Thread):
|
|||
self.running = False
|
||||
|
||||
def netrpc_handle_exception_legacy(e):
|
||||
if isinstance(e, openerp.osv.osv.except_osv):
|
||||
if isinstance(e, openerp.osv.orm.except_orm):
|
||||
return 'warning -- ' + e.name + '\n\n' + e.value
|
||||
if isinstance(e, openerp.exceptions.Warning):
|
||||
return 'warning -- Warning\n\n' + str(e)
|
||||
|
|
|
@ -42,6 +42,7 @@ import openerp.sql_db as sql_db
|
|||
import openerp.tools as tools
|
||||
import openerp.modules
|
||||
import openerp.exceptions
|
||||
import openerp.osv.orm # TODO use openerp.exceptions
|
||||
from openerp.service import http_server
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
|
@ -388,22 +389,10 @@ class db(netsvc.ExportService):
|
|||
return release.version
|
||||
|
||||
def exp_migrate_databases(self,databases):
|
||||
|
||||
from openerp.osv.orm import except_orm
|
||||
from openerp.osv.osv import except_osv
|
||||
|
||||
for db in databases:
|
||||
try:
|
||||
_logger.info('migrate database %s', db)
|
||||
tools.config['update']['base'] = True
|
||||
pooler.restart_pool(db, force_demo=False, update_module=True)
|
||||
except except_orm, inst:
|
||||
netsvc.abort_response(1, inst.name, 'warning', inst.value)
|
||||
except except_osv, inst:
|
||||
netsvc.abort_response(1, inst.name, 'warning', inst.value)
|
||||
except Exception:
|
||||
_logger.exception('Exception in migrate_databases:')
|
||||
raise
|
||||
return True
|
||||
|
||||
class common(netsvc.ExportService):
|
||||
|
@ -474,7 +463,7 @@ GNU Public Licence.
|
|||
return rc.get_available_updates(rc.id, openerp.modules.get_modules_with_version())
|
||||
|
||||
except tm.RemoteContractException, e:
|
||||
netsvc.abort_response(1, 'Migration Error', 'warning', str(e))
|
||||
raise openerp.osv.orm.except_orm('Migration Error', str(e))
|
||||
|
||||
|
||||
def exp_get_migration_scripts(self, contract_id, contract_password):
|
||||
|
@ -540,7 +529,7 @@ GNU Public Licence.
|
|||
|
||||
return True
|
||||
except tm.RemoteContractException, e:
|
||||
netsvc.abort_response(1, 'Migration Error', 'warning', str(e))
|
||||
raise openerp.osv.orm.except_orm('Migration Error', str(e))
|
||||
except Exception, e:
|
||||
_logger.exception('Exception in get_migration_script:')
|
||||
raise
|
||||
|
@ -724,7 +713,7 @@ class report_spool(netsvc.ExportService):
|
|||
result = self._reports[report_id]
|
||||
exc = result['exception']
|
||||
if exc:
|
||||
netsvc.abort_response(exc, exc.message, 'warning', exc.traceback)
|
||||
raise openerp.osv.orm.except_orm(exc.message, exc.traceback)
|
||||
res = {'state': result['state']}
|
||||
if res['state']:
|
||||
if tools.config['reportgz']:
|
||||
|
|
|
@ -90,7 +90,7 @@ def xmlrpc_return(start_response, service, method, params, legacy_exceptions=Fal
|
|||
return [response]
|
||||
|
||||
def xmlrpc_handle_exception(e):
|
||||
if isinstance(e, openerp.osv.osv.except_osv): # legacy
|
||||
if isinstance(e, openerp.osv.orm.except_orm): # legacy
|
||||
fault = xmlrpclib.Fault(RPC_FAULT_CODE_WARNING, openerp.tools.ustr(e.value))
|
||||
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
|
||||
elif isinstance(e, openerp.exceptions.Warning):
|
||||
|
@ -123,7 +123,7 @@ def xmlrpc_handle_exception(e):
|
|||
return response
|
||||
|
||||
def xmlrpc_handle_exception_legacy(e):
|
||||
if isinstance(e, openerp.osv.osv.except_osv):
|
||||
if isinstance(e, openerp.osv.orm.except_orm):
|
||||
fault = xmlrpclib.Fault('warning -- ' + e.name + '\n\n' + e.value, '')
|
||||
response = xmlrpclib.dumps(fault, allow_none=False, encoding=None)
|
||||
elif isinstance(e, openerp.exceptions.Warning):
|
||||
|
|
Loading…
Reference in New Issue