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):
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"

View File

@ -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.<module> for module will to
// openerp.pool.<dbname>.<module> using a closure
// TODO rename it openerp.connections
openerp.pool = {};
// Per session namespace
// openerp.<module> will map to
// openerp.sessions.servername_port_dbname_login.<module> 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.<i>(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 <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() {
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({
init: function(session, element_id, dataset, view_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({
// 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({
init: function(session, element_id, dataset, view_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({
init: function(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({
init: function(element_id) {
var self = this;
@ -813,6 +856,8 @@ openerp.base.WebClient = openerp.base.Controller.extend({
on_menu_action: function(action) {
this.action.do_action(action);
},
do_about: function() {
},
});
openerp.base.webclient = function(element_id) {