From b51b094c2ba7de39283a7401d0ae8c29bb13d98e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 26 Jan 2021 09:05:35 +0100 Subject: [PATCH] [IMP] http: avoid cycle on request --- addons/http_routing/models/ir_http.py | 5 ++--- addons/web/controllers/main.py | 5 ++--- addons/website/models/website.py | 4 ++-- odoo/http.py | 1 - 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 4af5053e69d..daa76e43b2a 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -16,7 +16,7 @@ except ImportError: slugify_lib = None import odoo -from odoo import api, models, registry, exceptions, tools +from odoo import api, models, registry, exceptions, tools, http from odoo.addons.base.models import ir_http from odoo.addons.base.models.ir_http import RequestUID from odoo.addons.base.models.qweb import QWebException @@ -670,8 +670,7 @@ class IrHttp(models.AbstractModel): @tools.ormcache('path', 'query_args') def url_rewrite(self, path, query_args=None): new_url = False - req = request.httprequest - router = req.app.get_db_router(request.db).bind('') + router = http.root.get_db_router(request.db).bind('') endpoint = False try: endpoint = router.match(path, method='POST', query_args=query_args) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index fc79c8de046..7aa33c0523e 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -108,9 +108,8 @@ def serialize_exception(f): return wrap def abort_and_redirect(url): - r = request.httprequest response = request.redirect(url, 302) - response = r.app.get_response(r, response, explicit_session=False) + response = http.root.get_response(request.httprequest, response, explicit_session=False) werkzeug.exceptions.abort(response) def ensure_db(redirect='/web/database/selector'): @@ -1032,7 +1031,7 @@ class Proxy(http.Controller): from werkzeug.wrappers import BaseResponse base_url = request.httprequest.base_url query_string = request.httprequest.query_string - client = Client(request.httprequest.app, BaseResponse) + client = Client(http.root, BaseResponse) headers = {'X-Openerp-Session-Id': request.session.sid} return client.post('/' + path, base_url=base_url, query_string=query_string, headers=headers, data=data) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 7cda5b1afef..8eb654e0319 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -1137,7 +1137,7 @@ class Website(models.Model): :rtype: list({name: str, url: str}) """ - router = request.httprequest.app.get_db_router(request.db) + router = http.root.get_db_router(request.db) # Force enumeration to be performed as public user url_set = set() @@ -1296,7 +1296,7 @@ class Website(models.Model): """ self.ensure_one() if request.endpoint: - router = request.httprequest.app.get_db_router(request.db).bind('') + router = http.root.get_db_router(request.db).bind('') arguments = dict(request.endpoint_arguments) for key, val in list(arguments.items()): if isinstance(val, models.BaseModel): diff --git a/odoo/http.py b/odoo/http.py index b232fded828..0f382ae4b09 100644 --- a/odoo/http.py +++ b/odoo/http.py @@ -1434,7 +1434,6 @@ class Root(object): """ try: httprequest = werkzeug.wrappers.Request(environ) - httprequest.app = self httprequest.parameter_storage_class = werkzeug.datastructures.ImmutableOrderedMultiDict current_thread = threading.current_thread()