[ADD] @multilang attribute in website.route() decorator

bzr revid: fme@openerp.com-20130923115905-ajzm4e3t7w4j123g
This commit is contained in:
Fabien Meghazi 2013-09-23 13:59:05 +02:00
parent db00b45803
commit 8075b1f65c
1 changed files with 21 additions and 7 deletions

View File

@ -15,14 +15,23 @@ from openerp.exceptions import AccessError, AccessDenied
import logging
logger = logging.getLogger(__name__)
def route(*route_args, **route_kwargs):
def route(routes, *route_args, **route_kwargs):
def decorator(f):
@http.route(*route_args, **route_kwargs)
new_routes = routes if isinstance(routes, list) else [routes]
if route_kwargs.get('multilang', False):
route_kwargs.pop('multilang')
for r in list(new_routes):
new_routes.append('/<string(length=5):lang_code>' + r)
@http.route(new_routes, *route_args, **route_kwargs)
@functools.wraps(f, assigned=functools.WRAPPER_ASSIGNMENTS + ('func_name',))
def wrap(*args, **kwargs):
request.route_lang = None # WIP: decorator will support lang argument
request.route_lang = kwargs.get('lang_code', None)
if not hasattr(request, 'website'):
request.website = request.registry['website'].get_current()
if request.route_lang:
lang_ok = [lg.code for lg in request.website.language_ids if lg.code == request.route_lang]
if not lang_ok:
return request.not_found()
request.website.preprocess_request(*args, **kwargs)
return f(*args, **kwargs)
return wrap
@ -78,11 +87,15 @@ class website(osv.osv):
def preprocess_request(self, cr, uid, ids, *args, **kwargs):
is_public_user = request.uid == self.get_public_user().id
lang = self.get_lang()
is_master_lang = lang == request.website.default_lang_id.code
request.context.update({
'lang': lang,
'is_public_user': is_public_user,
'editable': not is_public_user, # TODO: check perms
'is_master_lang': is_master_lang,
'editable': not is_public_user,
'translatable': not is_public_user and not is_master_lang,
})
request.context['lang'] = self.get_lang()
def get_current(self):
# WIP, currently hard coded
@ -106,9 +119,10 @@ class website(osv.osv):
})
qweb_context.update(values)
context = {
context = request.context.copy()
context.update({
'inherit_branding': qweb_context.get('editable', False),
}
})
# check if xmlid of the template exists
try: