[FIX] loading of new modules after installation
bzr revid: xmo@openerp.com-20120113151638-qoa0vlhunxiq1g2p
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user