[FIX] loading of new modules after installation

bzr revid: xmo@openerp.com-20120113151638-qoa0vlhunxiq1g2p
This commit is contained in:
Xavier Morel
2012-01-13 16:16:38 +01:00
4 changed files with 28 additions and 14 deletions
+1 -1
View File
@@ -334,7 +334,7 @@ def session_context(request, storage_path, session_cookie='sessionid'):
and not value.jsonp_requests
and value._creation_time + (60*5) < time.time() # FIXME do not use a fixed value
):
_logger.info('remove session %s', key)
_logger.debug('remove session %s', key)
del request.session[key]
with session_lock:
+10 -4
View File
@@ -37,6 +37,9 @@ def concat_xml(file_list):
concat: concatenation of file content
timestamp: max(os.path.getmtime of file_list)
"""
if not file_list:
return '', None
root = None
files_timestamp = 0
for fname in file_list:
@@ -56,12 +59,15 @@ def concat_xml(file_list):
return ElementTree.tostring(root, 'utf-8'), files_timestamp
def concat_files(file_list, reader=None):
def concat_files(file_list, reader=None, intersperse=""):
""" Concatenate file content
return (concat,timestamp)
concat: concatenation of file content, read by `reader`
timestamp: max(os.path.getmtime of file_list)
"""
if not file_list:
return '', None
if reader is None:
def reader(f):
with open(f) as fp:
@@ -75,7 +81,7 @@ def concat_files(file_list, reader=None):
files_timestamp = ftime
files_content.append(reader(fname))
files_concat = "".join(files_content)
files_concat = intersperse.join(files_content)
return files_concat,files_timestamp
html_template = """<!DOCTYPE html>
@@ -180,7 +186,7 @@ class WebClient(openerpweb.Controller):
@openerpweb.httprequest
def js(self, req, mods=None):
files = [f[0] for f in self.manifest_glob(req, mods, 'js')]
content,timestamp = concat_files(files)
content, timestamp = concat_files(files, intersperse=';')
# TODO use timestamp to set Last mofified date and E-tag
return req.make_response(content, [('Content-Type', 'application/javascript')])
@@ -431,7 +437,7 @@ class Session(openerpweb.Controller):
@openerpweb.jsonrequest
def modules(self, req):
# Compute available candidates module
loadable = openerpweb.addons_manifest.iterkeys()
loadable = openerpweb.addons_manifest
loaded = req.config.server_wide_modules
candidates = [mod for mod in loadable if mod not in loaded]
+5 -2
View File
@@ -1124,8 +1124,11 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
this.$element.children().remove();
},
do_reload: function() {
return this.session.session_reload().pipe(
$.proxy(this.menu, 'do_reload'));
var self = this;
return this.session.session_reload().pipe(function () {
openerp.connection.load_modules(true).pipe(
self.menu.proxy('do_reload')); });
},
do_notify: function() {
var n = this.notification;
+12 -7
View File
@@ -676,27 +676,31 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
},
/**
* Load additional web addons of that instance and init them
*
* @param {Boolean} [no_session_valid_signal=false] prevents load_module from triggering ``on_session_valid``.
*/
load_modules: function() {
load_modules: function(no_session_valid_signal) {
var self = this;
return this.rpc('/web/session/modules', {}).pipe(function(result) {
self.module_list = result;
var lang = self.user_context.lang;
var params = { mods: ["web"].concat(result), lang: lang};
var modules = self.module_list.join(',');
var to_load = _.difference(result, self.module_list).join(',');
self.module_list = result;
return $.when(
self.rpc('/web/webclient/csslist', {mods: modules}, self.do_load_css),
self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb),
self.rpc('/web/webclient/csslist', {mods: to_load}, self.do_load_css),
self.rpc('/web/webclient/qweblist', {mods: to_load}).pipe(self.do_load_qweb),
self.rpc('/web/webclient/translations', params).pipe(function(trans) {
openerp.web._t.database.set_bundle(trans);
var file_list = ["/web/static/lib/datejs/globalization/" + lang.replace("_", "-") + ".js"];
return self.rpc('/web/webclient/jslist', {mods: modules}).pipe(function(files) {
return self.rpc('/web/webclient/jslist', {mods: to_load}).pipe(function(files) {
return self.do_load_js(file_list.concat(files));
});
})
).then(function() {
self.on_modules_loaded();
self.on_session_valid();
if (!no_session_valid_signal) {
self.on_session_valid();
}
});
});
},
@@ -738,6 +742,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
_.each(files, function(file) {
self.qweb_mutex.exec(function() {
return self.rpc('/web/proxy/load', {path: file}).pipe(function(xml) {
if (!xml) { return; }
openerp.web.qweb.add_template(_.str.trim(xml));
});
});