diff --git a/addons/base/common/dispatch.py b/addons/base/common/dispatch.py index 14e1a873830..a70e98717b6 100644 --- a/addons/base/common/dispatch.py +++ b/addons/base/common/dispatch.py @@ -21,15 +21,6 @@ import http # import backendlocal as backend import backendrpc as backend -#----------------------------------------------------------- -# Globals -#----------------------------------------------------------- - -import __main__ - -path_root = __main__.path_root -path_addons = __main__.path_addons - #----------------------------------------------------------- # Globals (wont move into a pool) #----------------------------------------------------------- @@ -270,11 +261,12 @@ class Root(object): def _load_addons(self): statics = {} - if path_addons not in sys.path: - sys.path.insert(0, path_addons) - for module in os.listdir(path_addons): + addons_path = self.config.addons_path + if addons_path not in sys.path: + sys.path.insert(0, addons_path) + for module in os.listdir(addons_path): if module not in addons_module: - manifest_path = os.path.join(path_addons, module, '__openerp__.py') + manifest_path = os.path.join(addons_path, module, '__openerp__.py') if os.path.isfile(manifest_path): manifest = ast.literal_eval(open(manifest_path).read()) print "Loading", module @@ -283,7 +275,7 @@ class Root(object): addons_manifest[module] = manifest statics['/%s/static' % module] = \ - os.path.join(path_addons, module, 'static') + os.path.join(addons_path, module, 'static') for k, v in controllers_class.items(): if k not in controllers_object: o = v() diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 8e094beda94..8d99df3bf03 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -66,16 +66,16 @@ class Xml2Json: # OpenERP Web base Controllers #---------------------------------------------------------- -def manifest_glob(addons, key): +def manifest_glob(addons_path, addons, key): files = [] for addon in addons: globlist = openerpweb.addons_manifest.get(addon, {}).get(key, []) for pattern in globlist: - for path in glob.glob(os.path.join(openerpweb.path_addons, addon, pattern)): - files.append(path[len(openerpweb.path_addons):]) + for path in glob.glob(os.path.join(addons_path, addon, pattern)): + files.append(path[len(addons_path):]) return files -def concat_files(file_list): +def concat_files(addons_path, file_list): """ Concatenate file content return (concat,timestamp) concat: concatenation of file content @@ -84,13 +84,13 @@ def concat_files(file_list): files_content = [] files_timestamp = 0 for i in file_list: - fname = os.path.join(openerpweb.path_addons, i[1:]) + fname = os.path.join(addons_path, i[1:]) ftime = os.path.getmtime(fname) if ftime > files_timestamp: files_timestamp = ftime files_content.append(open(fname).read()) files_concat = "".join(files_content) - return (files_concat,files_timestamp) + return files_concat,files_timestamp home_template = textwrap.dedent(""" @@ -120,23 +120,23 @@ class WebClient(openerpweb.Controller): @openerpweb.jsonrequest def csslist(self, req, mods='base'): - return manifest_glob(mods.split(','), 'css') + return manifest_glob(req.config.addons_path, mods.split(','), 'css') @openerpweb.jsonrequest def jslist(self, req, mods='base'): - return manifest_glob(mods.split(','), 'js') + return manifest_glob(req.config.addons_path, mods.split(','), 'js') @openerpweb.httprequest def css(self, req, mods='base'): - files = manifest_glob(mods.split(','), 'css') - content,timestamp = concat_files(files) + files = manifest_glob(req.config.addons_path, mods.split(','), 'css') + content,timestamp = concat_files(req.config.addons_path, files) # TODO request set the Date of last modif and Etag return req.make_response(content, [('Content-Type', 'text/css')]) @openerpweb.httprequest def js(self, req, mods='base'): - files = manifest_glob(mods.split(','), 'js') - content,timestamp = concat_files(files) + files = manifest_glob(req.config.addons_path, mods.split(','), 'js') + content,timestamp = concat_files(req.config.addons_path, files) # TODO request set the Date of last modif and Etag return req.make_response(content, [('Content-Type', 'application/javascript')]) @@ -145,13 +145,13 @@ class WebClient(openerpweb.Controller): # script tags jslist = ['/base/webclient/js'] if req.debug: - jslist = manifest_glob(['base'], 'js') + jslist = manifest_glob(req.config.addons_path, ['base'], 'js') js = "\n ".join([''%i for i in jslist]) # css tags csslist = ['/base/webclient/css'] if req.debug: - csslist = manifest_glob(['base'], 'css') + csslist = manifest_glob(req.config.addons_path, ['base'], 'css') css = "\n ".join([''%i for i in csslist]) r = home_template % { 'javascript': js, @@ -181,7 +181,7 @@ class WebClient(openerpweb.Controller): transl = {"messages":[]} transs[addon_name] = transl for l in langs: - f_name = os.path.join(openerpweb.path_addons, addon_name, "po", l + ".po") + f_name = os.path.join(req.config.addons_path, addon_name, "po", l + ".po") if not os.path.exists(f_name): continue try: @@ -970,9 +970,9 @@ class Binary(openerpweb.Controller): res = Model.read([int(id)], [field], context)[0].get(field, '') return base64.decodestring(res) except: # TODO: what's the exception here? - return self.placeholder() - def placeholder(self): - return open(os.path.join(openerpweb.path_addons, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() + return self.placeholder(req) + def placeholder(self, req): + return open(os.path.join(req.addons_path, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read() @openerpweb.httprequest def saveas(self, req, model, id, field, fieldname, **kw): diff --git a/openerp-web.py b/openerp-web.py index 54cd1a0bd34..959c10616d7 100755 --- a/openerp-web.py +++ b/openerp-web.py @@ -29,6 +29,7 @@ import base if __name__ == "__main__": (options, args) = optparser.parse_args(sys.argv[1:]) options.serve_static = True + options.addons_path = path_addons os.environ["TZ"] = "UTC" app = base.common.Root(options)