[ADD] website.route decorator

bzr revid: fme@openerp.com-20130827170707-xqc8f64dz9xoklo3
This commit is contained in:
Fabien Meghazi
2013-08-27 19:07:07 +02:00
parent 3871d540f8
commit 35c8d2fe95
+24 -7
View File
@@ -15,6 +15,20 @@ from openerp.exceptions import AccessError, AccessDenied
import logging
logger = logging.getLogger(__name__)
def route(*route_args, **route_kwargs):
def decorator(f):
def wrap(*args, **kwargs):
if not hasattr(request, 'webcontext'):
website = request.registry.get("website")
request.webcontext = website.get_rendering_context(lang=kwargs.get('lang', None))
request.context['lang'] = request.webcontext['lang_selected']['code']
return f(*args, **kwargs)
dec = http.route(*route_args, **route_kwargs)
dec(wrap)
wrap.func_name = f.func_name
return wrap
return decorator
def auth_method_public():
registry = openerp.modules.registry.RegistryManager.get(request.db)
@@ -48,7 +62,7 @@ class website(osv.osv):
self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1])
return self.public_user
def get_lang_info(self):
def get_lang_info(self, lang):
fields = ['id', 'name', 'code', 'website_default']
lang_obj = request.registry['res.lang']
languages = lang_obj.search_read(
@@ -59,7 +73,7 @@ class website(osv.osv):
default = default[0] if default else None
# Try to get the language from cookie
lang = request.httprequest.cookies.get('lang', None)
lang = lang or request.httprequest.cookies.get('lang', None)
if not lang or lang not in activated:
# Try to get the default language
if default:
@@ -72,12 +86,12 @@ class website(osv.osv):
raise WebsiteError("Could not aquire default language")
return {
'list': languages,
'default': default,
'selected': (lg for lg in languages if lg['code'] == lang).next(),
'lang_list': languages,
'lang_default': default,
'lang_selected': (lg for lg in languages if lg['code'] == lang).next(),
}
def get_rendering_context(self, additional_values=None):
def get_rendering_context(self, additional_values=None, lang=None):
debug = 'debug' in request.params
is_logged = True
try:
@@ -100,8 +114,9 @@ class website(osv.osv):
'snipped': {
'kanban': self.kanban
},
'lang_info': self.get_lang_info(),
}
values.update(self.get_lang_info(lang))
if additional_values:
values.update(additional_values)
return values
@@ -277,6 +292,8 @@ class res_lang(osv.osv):
'website_default': fields.boolean('Website default language'),
}
# TODO: on write and create set website_default=False on other records if current is True
class res_partner(osv.osv):
_inherit = "res.partner"