summaryrefslogtreecommitdiff
path: root/addons/web/controllers
diff options
context:
space:
mode:
authorniv-openerp <nicolas.vanhoren@openerp.com>2013-08-06 14:07:24 +0200
committerniv-openerp <nicolas.vanhoren@openerp.com>2013-08-06 14:07:24 +0200
commit392e9d260bb692e4fa404848e70c6dc7ea61c36a (patch)
treed3d65a03e90c29deb73cf72a7a5b758d303dd647 /addons/web/controllers
parent122f0aa9b39f0ed26dc26d09e4afffd949730cd1 (diff)
parentcb55e11c700efa298a74da781a108185682325da (diff)
[IMP] Mostly improvements of openerpframework.js . Moved a lot of necessary features to it (jsonrpc, models, translations,...). Added tests. Also some other style improvements.
bzr revid: nicolas.vanhoren@openerp.com-20130806120724-55nsh8ay9qiac72r
Diffstat (limited to 'addons/web/controllers')
-rw-r--r--addons/web/controllers/main.py43
-rw-r--r--addons/web/controllers/testing.py10
2 files changed, 30 insertions, 23 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 5d176122fcf..29cbd8960bb 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -347,13 +347,7 @@ def make_conditional(response, last_modified=None, etag=None):
return response.make_conditional(request.httprequest)
def login_and_redirect(db, login, key, redirect_url='/'):
- wsgienv = request.httprequest.environ
- env = dict(
- base_location=request.httprequest.url_root.rstrip('/'),
- HTTP_HOST=wsgienv['HTTP_HOST'],
- REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
- )
- request.session.authenticate(db, login, key, env)
+ request.session.authenticate(db, login, key)
return set_cookie_and_redirect(redirect_url)
def set_cookie_and_redirect(redirect_url):
@@ -605,7 +599,7 @@ class WebClient(http.Controller):
data = re.sub(
rx_url,
- r"""url(\1%s/""" % (web_dir,),
+ r"url(\1%s/" % (web_dir,),
data,
)
return data.encode('utf-8')
@@ -677,20 +671,26 @@ class WebClient(http.Controller):
return {"modules": translations_per_module,
"lang_parameters": None}
- @http.route('/web/webclient/translations', type='json', auth="user")
- def translations(self, mods, lang):
- res_lang = request.session.model('res.lang')
- ids = res_lang.search([("code", "=", lang)])
+ @http.route('/web/webclient/translations', type='json', auth="admin")
+ def translations(self, mods=None, lang=None):
+ if mods is None:
+ m = request.registry.get('ir.module.module')
+ mods = [x['name'] for x in m.search_read(request.cr, request.uid,
+ [('state','=','installed')], ['name'])]
+ if lang is None:
+ lang = request.context["lang"]
+ res_lang = request.registry.get('res.lang')
+ ids = res_lang.search(request.cr, request.uid, [("code", "=", lang)])
lang_params = None
if ids:
- lang_params = res_lang.read(ids[0], ["direction", "date_format", "time_format",
+ lang_params = res_lang.read(request.cr, request.uid, ids[0], ["direction", "date_format", "time_format",
"grouping", "decimal_point", "thousands_sep"])
# Regional languages (ll_CC) must inherit/override their parent lang (ll), but this is
# done server-side when the language is loaded, so we only need to load the user's lang.
- ir_translation = request.session.model('ir.translation')
+ ir_translation = request.registry.get('ir.translation')
translations_per_module = {}
- messages = ir_translation.search_read([('module','in',mods),('lang','=',lang),
+ messages = ir_translation.search_read(request.cr, request.uid, [('module','in',mods),('lang','=',lang),
('comments','like','openerp-web'),('value','!=',False),
('value','!=','')],
['module','src','value','lang'], order='module')
@@ -832,13 +832,7 @@ class Session(http.Controller):
@http.route('/web/session/authenticate', type='json', auth="none")
def authenticate(self, db, login, password, base_location=None):
- wsgienv = request.httprequest.environ
- env = dict(
- base_location=base_location,
- HTTP_HOST=wsgienv['HTTP_HOST'],
- REMOTE_ADDR=wsgienv['REMOTE_ADDR'],
- )
- request.session.authenticate(db, login, password, env)
+ request.session.authenticate(db, login, password)
return self.session_info()
@@ -1083,7 +1077,10 @@ class DataSet(http.Controller):
names.get(record['id']) or "%s#%d" % (model, (record['id']))
return records
- return getattr(request.session.model(model), method)(*args, **kwargs)
+ if method.startswith('_'):
+ raise Exception("Access denied")
+
+ return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
@http.route('/web/dataset/call', type='json', auth="user")
def call(self, model, method, args, domain_id=None, context_id=None):
diff --git a/addons/web/controllers/testing.py b/addons/web/controllers/testing.py
index 36afbd1e653..b51b12fc53d 100644
--- a/addons/web/controllers/testing.py
+++ b/addons/web/controllers/testing.py
@@ -13,6 +13,8 @@ from openerp.modules import module
from .main import module_topological_sort
from .. import http
+from ..http import request
+
NOMODULE_TEMPLATE = Template(u"""<!DOCTYPE html>
<html>
<head>
@@ -162,3 +164,11 @@ class TestRunnerController(http.Controller):
for path in glob.glob(normalized_pattern):
# replace OS path separators (from join & normpath) by URI ones
yield path[len(root):].replace(os.path.sep, '/')
+
+ @http.route('/web/tests/set_session_value', type='json', auth="none")
+ def set_session_value(self, value):
+ request.session.some_test_value = value
+
+ @http.route('/web/tests/get_session_value', type='json', auth="none")
+ def get_session_value(self):
+ return request.session.some_test_value \ No newline at end of file