diff --git a/addons/web/common/http.py b/addons/web/common/http.py index f9e66e31503..9c3664c8da0 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -466,7 +466,7 @@ class Root(object): if not hasattr(self.config, 'connector'): if self.config.backend == 'local': - self.config.connector = LocalConnector() + self.config.connector = session.LocalConnector() else: self.config.connector = openerplib.get_connector( hostname=self.config.server_host, port=self.config.server_port) @@ -574,57 +574,4 @@ class Root(object): ps = '/' return None -#---------------------------------------------------------- -# 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: +# vim:et:ts=4:sw=4: diff --git a/addons/web/common/session.py b/addons/web/common/session.py index 4abc611e3f4..125fc39488d 100644 --- a/addons/web/common/session.py +++ b/addons/web/common/session.py @@ -9,6 +9,60 @@ import openerplib from . import nonliterals _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 #---------------------------------------------------------- @@ -216,3 +270,5 @@ class OpenERPSession(object): cdomain = nonliterals.CompoundDomain(domain) cdomain.session = self return cdomain.evaluate(context or {}) + +# vim:et:ts=4:sw=4: diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index c5fdcce4945..8722fcd2887 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -86,6 +86,7 @@ def sass2scss(src): return write(sass) def db_list(req): + dbs = [] proxy = req.session.proxy("db") dbs = proxy.list() h = req.httprequest.environ['HTTP_HOST'].split(':')[0] @@ -182,14 +183,19 @@ def module_installed_bypass_session(dbname): return sorted_modules def module_boot(req): - dbs = db_list(req) serverside = [] dbside = [] for i in req.config.server_wide_modules: if i in openerpweb.addons_manifest: serverside.append(i) + # 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: - # if only one db load every module at boot dbside = module_installed_bypass_session(dbs[0]) dbside = [i for i in dbside if i not in serverside] addons = serverside + dbside