[FIX] handle correctly --no-database-list, move local connector to session
bzr revid: al@openerp.com-20120815170321-7qfx3ol1selfjig1
This commit is contained in:
parent
7bef5d1924
commit
dd6371e244
|
@ -466,7 +466,7 @@ class Root(object):
|
||||||
|
|
||||||
if not hasattr(self.config, 'connector'):
|
if not hasattr(self.config, 'connector'):
|
||||||
if self.config.backend == 'local':
|
if self.config.backend == 'local':
|
||||||
self.config.connector = LocalConnector()
|
self.config.connector = session.LocalConnector()
|
||||||
else:
|
else:
|
||||||
self.config.connector = openerplib.get_connector(
|
self.config.connector = openerplib.get_connector(
|
||||||
hostname=self.config.server_host, port=self.config.server_port)
|
hostname=self.config.server_host, port=self.config.server_port)
|
||||||
|
@ -574,57 +574,4 @@ class Root(object):
|
||||||
ps = '/'
|
ps = '/'
|
||||||
return None
|
return None
|
||||||
|
|
||||||
#----------------------------------------------------------
|
# vim:et:ts=4:sw=4:
|
||||||
# OpenERP Web Client lib
|
|
||||||
#----------------------------------------------------------
|
|
||||||
class LibException(Exception):
|
|
||||||
""" Base of all client lib exceptions """
|
|
||||||
def __init__(self,code=None,message=None):
|
|
||||||
self.code = code
|
|
||||||
self.message = message
|
|
||||||
|
|
||||||
class ApplicationError(LibException):
|
|
||||||
""" maps to code: 1, server side: Exception or openerp.exceptions.DeferredException"""
|
|
||||||
|
|
||||||
class Warning(LibException):
|
|
||||||
""" maps to code: 2, server side: openerp.exceptions.Warning"""
|
|
||||||
|
|
||||||
class AccessError(LibException):
|
|
||||||
""" maps to code: 3, server side: openerp.exceptions.AccessError"""
|
|
||||||
|
|
||||||
class AccessDenied(LibException):
|
|
||||||
""" maps to code: 4, server side: openerp.exceptions.AccessDenied"""
|
|
||||||
|
|
||||||
class LocalConnector(openerplib.Connector):
|
|
||||||
"""
|
|
||||||
A type of connector that uses the XMLRPC protocol.
|
|
||||||
"""
|
|
||||||
PROTOCOL = 'local'
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def send(self, service_name, method, *args):
|
|
||||||
import openerp
|
|
||||||
import traceback
|
|
||||||
import xmlrpclib
|
|
||||||
code_string = "warning -- %s\n\n%s"
|
|
||||||
try:
|
|
||||||
return openerp.netsvc.dispatch_rpc(service_name, method, args)
|
|
||||||
except openerp.osv.osv.except_osv, e:
|
|
||||||
# TODO change the except to raise LibException instead of their emulated xmlrpc fault
|
|
||||||
raise xmlrpclib.Fault(code_string % (e.name, e.value), '')
|
|
||||||
except openerp.exceptions.Warning, e:
|
|
||||||
raise xmlrpclib.Fault(code_string % ("Warning", e), '')
|
|
||||||
except openerp.exceptions.AccessError, e:
|
|
||||||
raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
|
|
||||||
except openerp.exceptions.AccessDenied, e:
|
|
||||||
raise xmlrpclib.Fault('AccessDenied', str(e))
|
|
||||||
except openerp.exceptions.DeferredException, e:
|
|
||||||
formatted_info = "".join(traceback.format_exception(*e.traceback))
|
|
||||||
raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
|
|
||||||
except Exception, e:
|
|
||||||
formatted_info = "".join(traceback.format_exception(*(sys.exc_info())))
|
|
||||||
raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
|
|
||||||
|
|
||||||
# vim:et:
|
|
||||||
|
|
|
@ -9,6 +9,60 @@ import openerplib
|
||||||
from . import nonliterals
|
from . import nonliterals
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
#----------------------------------------------------------
|
||||||
|
# openerplib local connector
|
||||||
|
#----------------------------------------------------------
|
||||||
|
class LibException(Exception):
|
||||||
|
""" Base of all client lib exceptions """
|
||||||
|
def __init__(self,code=None,message=None):
|
||||||
|
self.code = code
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
class ApplicationError(LibException):
|
||||||
|
""" maps to code: 1, server side: Exception or openerp.exceptions.DeferredException"""
|
||||||
|
|
||||||
|
class Warning(LibException):
|
||||||
|
""" maps to code: 2, server side: openerp.exceptions.Warning"""
|
||||||
|
|
||||||
|
class AccessError(LibException):
|
||||||
|
""" maps to code: 3, server side: openerp.exceptions.AccessError"""
|
||||||
|
|
||||||
|
class AccessDenied(LibException):
|
||||||
|
""" maps to code: 4, server side: openerp.exceptions.AccessDenied"""
|
||||||
|
|
||||||
|
class LocalConnector(openerplib.Connector):
|
||||||
|
"""
|
||||||
|
A type of connector that uses the XMLRPC protocol.
|
||||||
|
"""
|
||||||
|
PROTOCOL = 'local'
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def send(self, service_name, method, *args):
|
||||||
|
import openerp
|
||||||
|
import traceback
|
||||||
|
import xmlrpclib
|
||||||
|
code_string = "warning -- %s\n\n%s"
|
||||||
|
try:
|
||||||
|
return openerp.netsvc.dispatch_rpc(service_name, method, args)
|
||||||
|
except openerp.osv.osv.except_osv, e:
|
||||||
|
# TODO change the except to raise LibException instead of their emulated xmlrpc fault
|
||||||
|
raise xmlrpclib.Fault(code_string % (e.name, e.value), '')
|
||||||
|
except openerp.exceptions.Warning, e:
|
||||||
|
raise xmlrpclib.Fault(code_string % ("Warning", e), '')
|
||||||
|
except openerp.exceptions.AccessError, e:
|
||||||
|
raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
|
||||||
|
except openerp.exceptions.AccessDenied, e:
|
||||||
|
raise xmlrpclib.Fault('AccessDenied', str(e))
|
||||||
|
except openerp.exceptions.DeferredException, e:
|
||||||
|
formatted_info = "".join(traceback.format_exception(*e.traceback))
|
||||||
|
raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
|
||||||
|
except Exception, e:
|
||||||
|
formatted_info = "".join(traceback.format_exception(*(sys.exc_info())))
|
||||||
|
raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
|
||||||
|
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
# OpenERPSession RPC openerp backend access
|
# OpenERPSession RPC openerp backend access
|
||||||
#----------------------------------------------------------
|
#----------------------------------------------------------
|
||||||
|
@ -216,3 +270,5 @@ class OpenERPSession(object):
|
||||||
cdomain = nonliterals.CompoundDomain(domain)
|
cdomain = nonliterals.CompoundDomain(domain)
|
||||||
cdomain.session = self
|
cdomain.session = self
|
||||||
return cdomain.evaluate(context or {})
|
return cdomain.evaluate(context or {})
|
||||||
|
|
||||||
|
# vim:et:ts=4:sw=4:
|
||||||
|
|
|
@ -86,6 +86,7 @@ def sass2scss(src):
|
||||||
return write(sass)
|
return write(sass)
|
||||||
|
|
||||||
def db_list(req):
|
def db_list(req):
|
||||||
|
dbs = []
|
||||||
proxy = req.session.proxy("db")
|
proxy = req.session.proxy("db")
|
||||||
dbs = proxy.list()
|
dbs = proxy.list()
|
||||||
h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
|
h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
|
||||||
|
@ -182,14 +183,19 @@ def module_installed_bypass_session(dbname):
|
||||||
return sorted_modules
|
return sorted_modules
|
||||||
|
|
||||||
def module_boot(req):
|
def module_boot(req):
|
||||||
dbs = db_list(req)
|
|
||||||
serverside = []
|
serverside = []
|
||||||
dbside = []
|
dbside = []
|
||||||
for i in req.config.server_wide_modules:
|
for i in req.config.server_wide_modules:
|
||||||
if i in openerpweb.addons_manifest:
|
if i in openerpweb.addons_manifest:
|
||||||
serverside.append(i)
|
serverside.append(i)
|
||||||
if len(dbs) == 1:
|
|
||||||
# if only one db load every module at boot
|
# if only one db load every module at boot
|
||||||
|
dbs = []
|
||||||
|
try:
|
||||||
|
dbs = db_list(req)
|
||||||
|
except xmlrpclib.Fault:
|
||||||
|
# ignore access denied
|
||||||
|
pass
|
||||||
|
if len(dbs) == 1:
|
||||||
dbside = module_installed_bypass_session(dbs[0])
|
dbside = module_installed_bypass_session(dbs[0])
|
||||||
dbside = [i for i in dbside if i not in serverside]
|
dbside = [i for i in dbside if i not in serverside]
|
||||||
addons = serverside + dbside
|
addons = serverside + dbside
|
||||||
|
|
Loading…
Reference in New Issue