From 0a02a387399880395c1275efb78480ee7e6c8692 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Sat, 24 Sep 2011 18:38:28 +0200 Subject: [PATCH] [IMP] web.common.sesion local backend part1 bzr revid: al@openerp.com-20110924163828-gbys8t65gyz0qkcu --- addons/web/__init__.py | 4 ---- addons/web/common/dispatch.py | 12 +++++------- addons/web/common/openerplib/main.py | 20 +++++++++++++++++++- addons/web/common/session.py | 7 +++---- openerp-web.py | 2 +- 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/addons/web/__init__.py b/addons/web/__init__.py index 2478edb81b7..6934ef1e81a 100644 --- a/addons/web/__init__.py +++ b/addons/web/__init__.py @@ -20,9 +20,5 @@ def wsgi_postload(): o.backend = 'local' app = common.dispatch.Root(o) - #import openerp.wsgi openerp.wsgi.register_wsgi_handler(app) -# TODO -# if we detect that we are imported from the openerp server register common.Root() as a wsgi entry point - diff --git a/addons/web/common/dispatch.py b/addons/web/common/dispatch.py index 98b948704fa..2a5546ac85a 100644 --- a/addons/web/common/dispatch.py +++ b/addons/web/common/dispatch.py @@ -21,8 +21,7 @@ import werkzeug.wsgi import ast import nonliterals import http -# import backendlocal as backend -import session as backend +import session import openerplib __all__ = ['Root', 'jsonrequest', 'httprequest', 'Controller', @@ -79,12 +78,12 @@ class WebRequest(object): .. attribute:: session_id - opaque identifier for the :class:`backend.OpenERPSession` instance of + opaque identifier for the :class:`session.OpenERPSession` instance of the current request .. attribute:: session - :class:`~backend.OpenERPSession` instance for the current request + :class:`~session.OpenERPSession` instance for the current request .. attribute:: context @@ -100,13 +99,12 @@ class WebRequest(object): self.httpresponse = None self.httpsession = request.session self.config = config + def init(self, params): self.params = dict(params) # OpenERP session setup self.session_id = self.params.pop("session_id", None) or uuid.uuid4().hex - self.session = self.httpsession.setdefault( - self.session_id, backend.OpenERPSession( - self.config.server_host, self.config.server_port)) + self.session = self.httpsession.setdefault(self.session_id, session.OpenERPSession(self.config)) self.context = self.params.pop('context', None) self.debug = self.params.pop('debug', False) != False diff --git a/addons/web/common/openerplib/main.py b/addons/web/common/openerplib/main.py index 21f8d48ff63..75941b4ee9e 100644 --- a/addons/web/common/openerplib/main.py +++ b/addons/web/common/openerplib/main.py @@ -190,6 +190,22 @@ class NetRPCConnector(Connector): socket.disconnect() return result +class LocalConnector(Connector): + """ + A type of connector that uses the XMLRPC protocol. + """ + PROTOCOL = 'local' + + __logger = _getChildLogger(_logger, 'connector.local') + + def __init__(self): + pass + + def send(self, service_name, method, *args): + import openerp + # todo local + print service_name, method, args + class Service(object): """ A class to execute RPC calls on a specific service of the remote server. @@ -377,8 +393,10 @@ def get_connector(hostname, protocol="xmlrpc", port="auto"): return XmlRPCConnector(hostname, port) elif protocol == "netrpc": return NetRPCConnector(hostname, port) + elif protocol == "local": + return LocalConnector() else: - raise ValueError("You must choose xmlrpc or netrpc") + raise ValueError("You must choose xmlrpc or netrpc or local") def get_connection(hostname, protocol="xmlrpc", port='auto', database=None, login=None, password=None, user_id=None): diff --git a/addons/web/common/session.py b/addons/web/common/session.py index d1997a3f903..670ab75e1e7 100644 --- a/addons/web/common/session.py +++ b/addons/web/common/session.py @@ -26,9 +26,8 @@ class OpenERPSession(object): Used to store references to non-literal domains which need to be round-tripped to the client browser. """ - def __init__(self, server='127.0.0.1', port=8069): - self._server = server - self._port = port + def __init__(self, config): + self.config = config self._db = False self._uid = False self._login = False @@ -42,7 +41,7 @@ class OpenERPSession(object): self.client_timezone = False def build_connection(self): - return openerplib.get_connection(hostname=self._server, port=self._port, + return openerplib.get_connection(hostname=self.config.server_host, port=self.config.server_port, database=self._db, login=self._login, user_id=self._uid, password=self._password) diff --git a/openerp-web.py b/openerp-web.py index 92b411dd63e..e5b28c83e0a 100755 --- a/openerp-web.py +++ b/openerp-web.py @@ -56,7 +56,7 @@ import web.common.dispatch if __name__ == "__main__": (options, args) = optparser.parse_args(sys.argv[1:]) - options.backend = 'rpc' + options.backend = 'xmlrpc' os.environ["TZ"] = "UTC"