From 5971491a13e99fb97468e77780e9bbf667bcc4e4 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Thu, 10 Mar 2011 12:51:23 +0100 Subject: [PATCH] skeleton part1 bzr revid: al@openerp.com-20110310115123-5a4i2wg3lw33kqv5 --- addons/base/controllers/main.py | 55 ++++---- addons/base/static/openerp/openerp.base.js | 143 ++++++++++++++------- 2 files changed, 118 insertions(+), 80 deletions(-) diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 12e905d70d6..fc764882231 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -64,8 +64,23 @@ class Hello(openerpweb.Controller): def ajax_hello_error(self,req): raise Exception("You suck") -class Connection(openerpweb.Controller): - _cp_path = "/base/connection" +class Session(openerpweb.Controller): + _cp_path = "/base/session" + + @openerpweb.jsonrequest + def login(self, req, db, login, password): + req.session.login('trunk', login, password) + res = { + "session_id" : req.session_id, + "uid": req.session._uid, + } + return res + + @openerpweb.jsonrequest + def modules(self, req): + res={} + res["modules"] = ["base","base_hello"] + return res def manifest_glob(self, modlist, key): files = [] @@ -95,50 +110,28 @@ class Connection(openerpweb.Controller): files_concat = "".join(files_content) return files_concat - def list_modules(self, req): - return + @openerpweb.jsonrequest + def csslist(self, req, mods='base,base_hello'): + return {'files': self.manifest_glob(mods.split(','), 'css')} @openerpweb.jsonrequest - def manifest_files(self, req, key, mods): - files = self.manifest_glob(mods, key) - return {'files': files} + def jslist(self, req, mods='base,base_hello'): + return {'files': self.manifest_glob(mods.split(','), 'js')} - def css(self, req): - # TODO http get argument mods is a comma seprated value of modules - mods = 'base,base_hello' + def css(self, req, mods='base,base_hello'): files = self.manifest_glob(mods.split(','), 'css') concat = self.concat_files(files)[0] # TODO request set the Date of last modif and Etag return concat css.exposed=1 - def js(self, req): - # TODO http get argument mods is a comma seprated value of modules - mods = 'base,base_hello' + def js(self, req, mods='base,base_hello'): files = self.manifest_glob(mods.split(','), 'js') concat = self.concat_files(files)[0] # TODO request set the Date of last modif and Etag return concat js.exposed=1 -class Session(openerpweb.Controller): - _cp_path = "/base/session" - - @openerpweb.jsonrequest - def login(self, req, db, login, password): - req.session.login('trunk', login, password) - res = { - "session_id" : req.session_id, - "uid": req.session._uid, - } - return res - - def modules(self, req): - # TODO return the list of all modules - res={} - res["modules"] = ["base","base_hello"] - return res - class Menu(openerpweb.Controller): _cp_path = "/base/menu" diff --git a/addons/base/static/openerp/openerp.base.js b/addons/base/static/openerp/openerp.base.js index 457823ede2f..928756d8967 100644 --- a/addons/base/static/openerp/openerp.base.js +++ b/addons/base/static/openerp/openerp.base.js @@ -83,11 +83,11 @@ var openerp = this.openerp = function() { // this unique id will be replaced by hostname_databasename by // openerp.base.Connection on the first connection - o._unique_id = "unique_id_cause_db_name_is_not_yet_known" - openerp.pool[o._unique_id] = o; + o._session_id = "session" + openerp.sessions.length; + openerp.sessions[o._session_id] = o; o.screen = openerp.screen; - o.pool = openerp.pool; + o.sessions = openerp.sessions; o.base = {}; openerp.base(o); @@ -96,13 +96,12 @@ var openerp = this.openerp = function() { // element_ids registry linked to all controllers on the page // TODO rename to elements, or keep gtk naming? -openerp.screen = {}; +this.openerp.screen = {}; -// per database openerp like namespace -// openerp. for module will to -// openerp.pool.. using a closure -// TODO rename it openerp.connections -openerp.pool = {}; +// Per session namespace +// openerp. will map to +// openerp.sessions.servername_port_dbname_login. using a closure +this.openerp.sessions = {}; })(); @@ -204,37 +203,8 @@ openerp.base.BasicController = Class.extend({ }); openerp.base.Console = openerp.base.BasicController.extend({ -}); - -openerp.base.Database = openerp.base.BasicController.extend({ -// Non Session Controller to manage databases -}) - -openerp.base.Connection = openerp.base.BasicController.extend({ -// This store the webclient servername port and the database -// this correpond to one pool entry -// TODO on first connection: -// rename the uniquename in openerp.connnections -// do the magic of loading all the modules by loading missing module and their -// javascript using a dom nodes with urls: -// /base/connection/css?mod=mod1,mod2,mod3 -// /base/connection/js?mod=mod1,mod2,mod3 -// then init them -// for i in installed_modules: -// call openerp._openerp.(openerp) -}) - -openerp.base.Session = openerp.base.BasicController.extend({ init: function(element_id, server, port) { this._super(element_id); - this.rpc_mode = (server == undefined) ? "ajax" : "jsonp"; - this.server = (server == undefined) ? location.hostname : server; - this.port = (port == undefined) ? location.port : port; - this.login = ""; - this.password = ""; - this.uid = false; - this.session_id = false; - this.context = {}; }, on_log: function() { // TODO this should move to Console and be active only in debug @@ -248,11 +218,29 @@ openerp.base.Session = openerp.base.BasicController.extend({ } }); }, - rpc: function(url, params, success_callback, error_callback) { - // TODO keep a this.ajax_count counter to display LOADING - var self = this; +}); - this.on_rpc_request(); +openerp.base.Database = openerp.base.BasicController.extend({ +// Non Session Controller to manage databases +}) + +openerp.base.Session = openerp.base.BasicController.extend({ + init: function(element_id, server, port) { + this._super(element_id); + this.server = (server == undefined) ? location.hostname : server; + this.port = (port == undefined) ? location.port : port; + this.rpc_mode = (server == location.hostname) ? "ajax" : "jsonp"; + this.debug = true; + this.db = ""; + this.login = ""; + this.password = ""; + this.uid = false; + this.session_id = false; + this.module_list = []; + this.context = {}; + }, + rpc: function(url, params, success_callback, error_callback) { + var self = this; // Construct a JSON-RPC2 request, method is currently unsed params.session_id = this.session_id; @@ -267,9 +255,14 @@ openerp.base.Session = openerp.base.BasicController.extend({ // Use a default error handler unless defined error_callback = typeof(error_callback) != "undefined" ? error_callback : this.on_error; + // Call using the rpc_mode + this.rpc_ajax(url, post, success_callback, error_callback); + }, + rpc_ajax: function(url, post, success_callback, error_callback) { + var self = this; + this.on_rpc_request(); $.ajax({ type: "POST", - //async: false, url: url, dataType: 'json', data: post, @@ -293,11 +286,7 @@ openerp.base.Session = openerp.base.BasicController.extend({ var error = { code: 1, message: "XmlHttpRequestError " + errorThrown, - data: { - type: "xhr"+textStatus, - debug: jqXHR.responseText, - objects: [ jqXHR, errorThrown ] - } + data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } }; error_callback(error); } @@ -328,6 +317,30 @@ openerp.base.Session = openerp.base.BasicController.extend({ if (sucess_callback) sucess_callback(); }); }, + session_check_modules: function() { + // TODO + if(!openerp._modules_loaded) + this.session_load_modules(); + }, + session_load_modules: function() { + var self = this; + this.rpc('/base/session/list_modules', {}, function(result) { + this.module_list = result['modules']; + if(self.debug) { + // add the module code one by one as