[IMP] Improvement/changes to the http request/response API.

- Get rid of LazyResponses
- Made website.render() an alias to request.render() [just kept in case this is merged in saas-3 but should be removed completely in favor of request.render()]

Need server/trunk's rev#5102

bzr revid: fme@openerp.com-20140226164551-d42a3g057grr722y
This commit is contained in:
Fabien Meghazi 2014-02-26 17:45:51 +01:00
commit 3324351bf6
5 changed files with 28 additions and 33 deletions

View File

@ -8,7 +8,7 @@ from werkzeug.exceptions import BadRequest
import openerp
from openerp import SUPERUSER_ID
from openerp import http
from openerp.http import request, LazyResponse
from openerp.http import request
from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect
from openerp.modules.registry import RegistryManager
from openerp.tools.translate import _
@ -71,7 +71,7 @@ class OAuthLogin(openerp.addons.web.controllers.main.Home):
providers = self.list_providers()
response = super(OAuthLogin, self).web_login(*args, **kw)
if isinstance(response, LazyResponse):
if response.is_qweb:
error = request.params.get('oauth_error')
if error == '1':
error = _("Sign up is not allowed on this database.")
@ -82,9 +82,9 @@ class OAuthLogin(openerp.addons.web.controllers.main.Home):
else:
error = None
response.params['values']['providers'] = providers
response.qcontext['providers'] = providers
if error:
response.params['values']['error'] = error
response.qcontext['error'] = error
return response

View File

@ -24,7 +24,7 @@ import openerp
import openerp.addons.web.controllers.main as webmain
from openerp.addons.auth_signup.res_users import SignupError
from openerp import http
from openerp.http import request, LazyResponse
from openerp.http import request
from openerp.tools.translate import _
from openerp.tools import exception_to_unicode
@ -40,9 +40,9 @@ class AuthSignup(openerp.addons.web.controllers.main.Home):
if request.httprequest.method != 'POST' or mode not in ('reset', 'signup'):
# Default behavior is to try to login, which in reset or signup mode in a non-sense.
super_response = super(AuthSignup, self).web_login(*args, **kw)
response = webmain.render_bootstrap_template(request.session.db, 'auth_signup.signup', qcontext, lazy=True)
if isinstance(super_response, LazyResponse):
response.params['values'].update(super_response.params['values'])
response = webmain.render_bootstrap_template('auth_signup.signup', qcontext)
if super_response.is_qweb:
response.qcontext.update(super_response.qcontext)
token = qcontext.get('token', None)
token_infos = None
if token:
@ -66,8 +66,8 @@ class AuthSignup(openerp.addons.web.controllers.main.Home):
qcontext.update(config)
if 'error' in request.params or mode not in ('reset', 'signup') or (not token and not config[mode]):
if isinstance(super_response, LazyResponse):
super_response.params['values'].update(config)
if super_response.is_qweb:
super_response.qcontext.update(config)
return super_response
if request.httprequest.method == 'GET':

View File

@ -19,7 +19,7 @@ import openerp
from openerp.osv import fields
from openerp.addons.website.models import website
from openerp.addons.web import http
from openerp.addons.web.http import request, LazyResponse
from openerp.http import request, Response
logger = logging.getLogger(__name__)
@ -46,9 +46,7 @@ class Website(openerp.addons.web.controllers.main.Home):
@http.route(website=True, auth="public", multilang=True)
def web_login(self, *args, **kw):
response = super(Website, self).web_login(*args, **kw)
if isinstance(response, LazyResponse):
values = dict(response.params['values'], disable_footer=True)
response = request.website.render(response.params['template'], values)
response.qcontext['disable_footer'] = True
return response
@http.route('/page/<page:page>', type='http', auth="public", website=True, multilang=True)
@ -69,27 +67,27 @@ class Website(openerp.addons.web.controllers.main.Home):
else:
return request.registry['ir.http']._handle_exception(e, 404)
return request.website.render(page, values)
return request.render(page, values)
@http.route(['/robots.txt'], type='http', auth="public", website=True)
def robots(self):
response = request.website.render('website.robots', {'url_root': request.httprequest.url_root})
response.mimetype = 'text/plain'
return response
return request.render('website.robots', {'url_root': request.httprequest.url_root}, mimetype='text/plain')
@http.route('/sitemap', type='http', auth='public', website=True, multilang=True)
def sitemap(self):
return request.website.render('website.sitemap', {
return request.render('website.sitemap', {
'pages': request.website.enumerate_pages()
})
@http.route('/sitemap.xml', type='http', auth="public", website=True)
def sitemap_xml(self):
response = request.website.render('website.sitemap_xml', {
values = {
'pages': request.website.enumerate_pages()
})
response.headers['Content-Type'] = 'application/xml;charset=utf-8'
return response
}
headers = {
'Content-Type': 'application/xml;charset=utf-8',
}
return request.render('website.sitemap_xml', values, headers=headers)
#------------------------------------------------------
# Edit
@ -129,7 +127,7 @@ class Website(openerp.addons.web.controllers.main.Home):
view.write(request.cr, request.uid, [view_id],
{'inherit_id': view_option_id}, context=request.context)
return request.website.render('website.themes', {'theme_changed': True})
return request.render('website.themes', {'theme_changed': True})
@http.route(['/website/snippets'], type='json', auth="public", website=True)
def snippets(self):
@ -408,12 +406,12 @@ class Website(openerp.addons.web.controllers.main.Home):
if action_id:
action_ids = ServerActions.exists(cr, uid, [action_id], context=context)
action_id = action_ids and action_ids[0] or None
# run it, return only LazyResponse that are templates to be rendered
# run it, return only if we got a Response object
if action_id:
action = ServerActions.browse(cr, uid, action_id, context=context)
if action.state == 'code' and action.website_published:
action_res = ServerActions.run(cr, uid, [action_id], context=context)
if isinstance(action_res, LazyResponse):
if isinstance(action_res, Response):
res = action_res
if res:
return res

View File

@ -127,7 +127,7 @@ partners = pool['res.partner'].browse(cr, uid, partner_ids, context=context)
values = {
'partners': partners,
}
response = request.website.render("website.template_partner_comment", values)
response = request.render("website.template_partner_comment", values)
</field>
<field name="state">code</field>
<field name="type">ir.actions.server</field>

View File

@ -18,7 +18,7 @@ except ImportError:
import openerp
from openerp.osv import orm, osv, fields
from openerp.tools.safe_eval import safe_eval
from openerp.addons.web.http import request, LazyResponse
from openerp.addons.web.http import request
logger = logging.getLogger(__name__)
@ -229,11 +229,8 @@ class website(osv.osv):
return self.pool['ir.ui.view'].render(cr, uid, template, values=values, context=context)
def render(self, cr, uid, ids, template, values=None, status_code=None, context=None):
def callback(template, values, context):
return self._render(cr, uid, ids, template, values, context)
if values is None:
values = {}
return LazyResponse(callback, status_code=status_code, template=template, values=values, context=context)
# TODO: remove this. (just kept for backward api compatibility for saas-3)
return request.render(template, values, uid=uid)
def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None, context=None):
# Compute Pager