diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 1abfaa7c323..0edfe7ccdda 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import base64 -import glob, os +import base64, glob, os, re from xml.etree import ElementTree from cStringIO import StringIO @@ -55,6 +54,20 @@ class Xml2Json: # OpenERP Web base Controllers #---------------------------------------------------------- +class Database(openerpweb.Controller): + _cp_path = "/base/database" + + @openerpweb.jsonrequest + def get_databases_list(self, req): + proxy = req.session.proxy("db") + dbs = proxy.list() + h = req.httprequest.headers['Host'].split(':')[0] + d = h.split(':')[0] + r = cherrypy.config['openerp.dbfilter'].replace('%h',h).replace('%d',d) + print "h,d",h,d,r + dbs = [i for i in dbs if re.match(r,i)] + return {"db_list": dbs} + class Session(openerpweb.Controller): _cp_path = "/base/session" @@ -103,13 +116,6 @@ class Session(openerpweb.Controller): return req.session.model('ir.ui.view_sc').get_sc(req.session._uid, "ir.ui.menu", req.session.eval_context(req.context)) - @openerpweb.jsonrequest - def get_databases_list(self, req): - proxy = req.session.proxy("db") - dbs = proxy.list() - - return {"db_list": dbs} - @openerpweb.jsonrequest def modules(self, req): return {"modules": [name @@ -230,14 +236,14 @@ class Session(openerpweb.Controller): if not saved_actions: return None return saved_actions["actions"].get(key) - + def eval_context_and_domain(session, context, domain=None): e_context = session.eval_context(context) # should we give the evaluated context as an evaluation context to the domain? e_domain = session.eval_domain(domain or []) return e_context, e_domain - + def load_actions_from_ir_values(req, key, key2, models, meta, context): Values = req.session.model('ir.values') actions = Values.get(key, key2, models, meta, context) @@ -301,7 +307,6 @@ def generate_views(action): return action['views'] = [(view_id, view_modes[0])] - def fix_view_modes(action): """ For historical reasons, OpenERP has weird dealings in relation to view_mode and the view_type attribute (on window actions): @@ -545,7 +550,7 @@ class View(openerpweb.Controller): # todo fme?: check that we should pass the evaluated context here self.process_view(request.session, fvg, context, transform) return fvg - + def process_view(self, session, fvg, context, transform): # depending on how it feels, xmlrpclib.ServerProxy can translate # XML-RPC strings to ``str`` or ``unicode``. ElementTree does not @@ -809,3 +814,5 @@ class Action(openerpweb.Controller): def run(self, req, action_id): return clean_action(req.session.model('ir.actions.server').run( [action_id], req.session.eval_context(req.context)), req.session) + +# diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js index ebaf457daa2..0e07b62ae39 100644 --- a/addons/base/static/src/js/chrome.js +++ b/addons/base/static/src/js/chrome.js @@ -930,7 +930,7 @@ openerp.base.Login = openerp.base.Controller.extend({ }, start: function() { var self = this; - this.rpc("/base/session/get_databases_list", {}, function(result) { + this.rpc("/base/database/get_databases_list", {}, function(result) { self.db_list = result.db_list; self.display(); }, function() { diff --git a/openerpweb/openerpweb.py b/openerpweb/openerpweb.py index f567cf1b812..ee75ac0b1f9 100644 --- a/openerpweb/openerpweb.py +++ b/openerpweb/openerpweb.py @@ -270,6 +270,9 @@ class JsonRequest(object): self.request = request self.params = request.get("params", {}) self.applicationsession = applicationsession + self.httprequest = cherrypy.request + self.httpresponse = cherrypy.response + self.httpsession = cherrypy.session self.httpsession_id = "cookieid" self.httpsession = cherrypy.session self.session_id = self.params.pop("session_id", None) or uuid.uuid4().hex @@ -454,22 +457,19 @@ def main(argv): os.environ["TZ"] = "UTC" DEFAULT_CONFIG = { - 'openerp.server.host': '127.0.0.1', - 'openerp.server.port': 8069, - 'server.socket_port': 8002, 'server.socket_host': '0.0.0.0', 'tools.sessions.on': True, 'tools.sessions.storage_type': 'file', - 'tools.sessions.storage_path': os.path.join(tempfile.gettempdir(), "cpsessions"), 'tools.sessions.timeout': 60 } # Parse config op = optparse.OptionParser() - op.add_option("-p", "--port", dest="server.socket_port", help="listening port", type="int", metavar="NUMBER") - op.add_option("-s", "--session-path", dest="tools.sessions.storage_path", help="directory used for session storage", metavar="DIR") - op.add_option("--server-host", dest="openerp.server.host", help="OpenERP server hostname", metavar="HOST") - op.add_option("--server-port", dest="openerp.server.port", help="OpenERP server port", type="int", metavar="NUMBER") + op.add_option("-p", "--port", dest="server.socket_port", default=8002, help="listening port", type="int", metavar="NUMBER") + op.add_option("-s", "--session-path", dest="tools.sessions.storage_path", default=os.path.join(tempfile.gettempdir(), "cpsessions"), help="directory used for session storage", metavar="DIR") + op.add_option("--server-host", dest="openerp.server.host", default='127.0.0.1', help="OpenERP server hostname", metavar="HOST") + op.add_option("--server-port", dest="openerp.server.port", default=8069, help="OpenERP server port", type="int", metavar="NUMBER") + op.add_option("--db-filter", dest="openerp.dbfilter", default='.*', help="Filter listed database", metavar="REGEXP") (o, args) = op.parse_args(argv[1:]) o = vars(o) for k in o.keys(): @@ -480,8 +480,8 @@ def main(argv): cherrypy.tree.mount(Root()) cherrypy.config.update(config=DEFAULT_CONFIG) - if os.path.exists(os.path.join(os.path.dirname( os.path.dirname(__file__)),'openerp-web.cfg')): - cherrypy.config.update(os.path.join(os.path.dirname( os.path.dirname(__file__)),'openerp-web.cfg')) + if os.path.exists(os.path.join(path_root,'openerp-web.cfg')): + cherrypy.config.update(os.path.join(path_root,'openerp-web.cfg')) if os.path.exists(os.path.expanduser('~/.openerp_webrc')): cherrypy.config.update(os.path.expanduser('~/.openerp_webrc')) cherrypy.config.update(o)