skeleton part1

bzr revid: al@openerp.com-20110310115123-5a4i2wg3lw33kqv5
This commit is contained in:
Antony Lesuisse 2011-03-10 12:51:23 +01:00
parent 6d3ffe53aa
commit 5971491a13
2 changed files with 118 additions and 80 deletions

View File

@ -64,8 +64,23 @@ class Hello(openerpweb.Controller):
def ajax_hello_error(self,req): def ajax_hello_error(self,req):
raise Exception("You suck") raise Exception("You suck")
class Connection(openerpweb.Controller): class Session(openerpweb.Controller):
_cp_path = "/base/connection" _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): def manifest_glob(self, modlist, key):
files = [] files = []
@ -95,50 +110,28 @@ class Connection(openerpweb.Controller):
files_concat = "".join(files_content) files_concat = "".join(files_content)
return files_concat return files_concat
def list_modules(self, req): @openerpweb.jsonrequest
return def csslist(self, req, mods='base,base_hello'):
return {'files': self.manifest_glob(mods.split(','), 'css')}
@openerpweb.jsonrequest @openerpweb.jsonrequest
def manifest_files(self, req, key, mods): def jslist(self, req, mods='base,base_hello'):
files = self.manifest_glob(mods, key) return {'files': self.manifest_glob(mods.split(','), 'js')}
return {'files': files}
def css(self, req): def css(self, req, mods='base,base_hello'):
# TODO http get argument mods is a comma seprated value of modules
mods = 'base,base_hello'
files = self.manifest_glob(mods.split(','), 'css') files = self.manifest_glob(mods.split(','), 'css')
concat = self.concat_files(files)[0] concat = self.concat_files(files)[0]
# TODO request set the Date of last modif and Etag # TODO request set the Date of last modif and Etag
return concat return concat
css.exposed=1 css.exposed=1
def js(self, req): def js(self, req, mods='base,base_hello'):
# TODO http get argument mods is a comma seprated value of modules
mods = 'base,base_hello'
files = self.manifest_glob(mods.split(','), 'js') files = self.manifest_glob(mods.split(','), 'js')
concat = self.concat_files(files)[0] concat = self.concat_files(files)[0]
# TODO request set the Date of last modif and Etag # TODO request set the Date of last modif and Etag
return concat return concat
js.exposed=1 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): class Menu(openerpweb.Controller):
_cp_path = "/base/menu" _cp_path = "/base/menu"

View File

@ -83,11 +83,11 @@ var openerp = this.openerp = function() {
// this unique id will be replaced by hostname_databasename by // this unique id will be replaced by hostname_databasename by
// openerp.base.Connection on the first connection // openerp.base.Connection on the first connection
o._unique_id = "unique_id_cause_db_name_is_not_yet_known" o._session_id = "session" + openerp.sessions.length;
openerp.pool[o._unique_id] = o; openerp.sessions[o._session_id] = o;
o.screen = openerp.screen; o.screen = openerp.screen;
o.pool = openerp.pool; o.sessions = openerp.sessions;
o.base = {}; o.base = {};
openerp.base(o); openerp.base(o);
@ -96,13 +96,12 @@ var openerp = this.openerp = function() {
// element_ids registry linked to all controllers on the page // element_ids registry linked to all controllers on the page
// TODO rename to elements, or keep gtk naming? // TODO rename to elements, or keep gtk naming?
openerp.screen = {}; this.openerp.screen = {};
// per database openerp like namespace // Per session namespace
// openerp.<module> for module will to // openerp.<module> will map to
// openerp.pool.<dbname>.<module> using a closure // openerp.sessions.servername_port_dbname_login.<module> using a closure
// TODO rename it openerp.connections this.openerp.sessions = {};
openerp.pool = {};
})(); })();
@ -204,37 +203,8 @@ openerp.base.BasicController = Class.extend({
}); });
openerp.base.Console = openerp.base.BasicController.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.<i>(openerp)
})
openerp.base.Session = openerp.base.BasicController.extend({
init: function(element_id, server, port) { init: function(element_id, server, port) {
this._super(element_id); 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() { on_log: function() {
// TODO this should move to Console and be active only in debug // 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 // Construct a JSON-RPC2 request, method is currently unsed
params.session_id = this.session_id; params.session_id = this.session_id;
@ -267,9 +255,14 @@ openerp.base.Session = openerp.base.BasicController.extend({
// Use a default error handler unless defined // Use a default error handler unless defined
error_callback = typeof(error_callback) != "undefined" ? error_callback : this.on_error; 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({ $.ajax({
type: "POST", type: "POST",
//async: false,
url: url, url: url,
dataType: 'json', dataType: 'json',
data: post, data: post,
@ -293,11 +286,7 @@ openerp.base.Session = openerp.base.BasicController.extend({
var error = { var error = {
code: 1, code: 1,
message: "XmlHttpRequestError " + errorThrown, message: "XmlHttpRequestError " + errorThrown,
data: { data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] }
type: "xhr"+textStatus,
debug: jqXHR.responseText,
objects: [ jqXHR, errorThrown ]
}
}; };
error_callback(error); error_callback(error);
} }
@ -328,6 +317,30 @@ openerp.base.Session = openerp.base.BasicController.extend({
if (sucess_callback) sucess_callback(); 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 <script>
} else {
// load merged ones
// /base/session/css?mod=mod1,mod2,mod3
// /base/session/js?mod=mod1,mod2,mod3
}
// then init them
// for i in installed_modules:
// call openerp._openerp.<i>(openerp)
openerp._modules_loaded = true;
});
this.uid = false;
},
session_logout: function() { session_logout: function() {
this.uid = false; this.uid = false;
}, },
@ -518,6 +531,10 @@ openerp.base.DataRecord = openerp.base.Controller.extend({
}, },
}); });
openerp.base.XmlInput = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.FormView = openerp.base.Controller.extend({ openerp.base.FormView = openerp.base.Controller.extend({
init: function(session, element_id, dataset, view_id) { init: function(session, element_id, dataset, view_id) {
this._super(session, element_id); this._super(session, element_id);
@ -616,6 +633,9 @@ openerp.base.ListView = openerp.base.Controller.extend({
}, },
}); });
openerp.base.TreeView = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.SearchViewInput = openerp.base.Controller.extend({ openerp.base.SearchViewInput = openerp.base.Controller.extend({
// TODO not sure should we create a controler for every input ? // TODO not sure should we create a controler for every input ?
@ -631,7 +651,6 @@ openerp.base.SearchViewInput = openerp.base.Controller.extend({
}); });
openerp.base.SearchView = openerp.base.Controller.extend({ openerp.base.SearchView = openerp.base.Controller.extend({
init: function(session, element_id, dataset, view_id) { init: function(session, element_id, dataset, view_id) {
this._super(session, element_id); this._super(session, element_id);
@ -690,6 +709,18 @@ openerp.base.SearchView = openerp.base.Controller.extend({
}, },
}); });
openerp.base.ProcessView = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.HelpView = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.View = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.Action = openerp.base.Controller.extend({ openerp.base.Action = openerp.base.Controller.extend({
init: function(session, element_id) { init: function(session, element_id) {
this._super(session, element_id); this._super(session, element_id);
@ -769,6 +800,18 @@ openerp.base.Action = openerp.base.Controller.extend({
}, },
}); });
openerp.base.Preferences = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.ImportExport = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.Homepage = openerp.base.BasicController.extend({
// Non Session Controller to manage databases
})
openerp.base.WebClient = openerp.base.Controller.extend({ openerp.base.WebClient = openerp.base.Controller.extend({
init: function(element_id) { init: function(element_id) {
var self = this; var self = this;
@ -813,6 +856,8 @@ openerp.base.WebClient = openerp.base.Controller.extend({
on_menu_action: function(action) { on_menu_action: function(action) {
this.action.do_action(action); this.action.do_action(action);
}, },
do_about: function() {
},
}); });
openerp.base.webclient = function(element_id) { openerp.base.webclient = function(element_id) {