Projet

Général

Profil

0001-on_request-allow-hook-to-return-a-reponse.patch

Jérôme Schneider, 09 décembre 2014 18:05

Télécharger (4,16 ko)

Voir les différences:

Subject: [PATCH 1/5] on_request: allow hook to return a reponse

Closes #6130
 mandaye/dispatcher.py      | 20 ++++++++++++--------
 mandaye/filters/default.py |  1 -
 mandaye/server.py          |  8 +++-----
 3 files changed, 15 insertions(+), 14 deletions(-)
mandaye/dispatcher.py
6 6
from importlib import import_module
7 7

  
8 8
from mandaye import config
9
from mandaye.http import HTTPRequest, HTTPResponse
9 10
from mandaye.log import logger
10 11
from mandaye.mappers import default
11 12
from mandaye.response import _500, _302
......
37 38
        target_url: the full url of your destination
38 39
        mepper: python module with the mapper
39 40
        """
40
        self.target = urlparse(target_url)
41 41
        self.env = env
42
        self.target = urlparse(target_url)
42 43
        self.env['target'] = self.target
43 44
        self.mapper_name = mapper_name
44 45
        self.mapper = import_mapping(mapper_name)
......
164 165
        for hook in self.req_mapping['on_request']:
165 166
            if not self._is_cond_respected(hook, request, None):
166 167
                continue
167
            new_request = self._call_hook(hook, request)
168
            if new_request:
169
                request = new_request
170
            else:
171
                logger.warning("%s On_request hook %s failed (empty request)" % \
172
                        (self.env['PATH_INFO'], hook['filter']))
173
        return request
168
            response = self._call_hook(hook, request)
169
            if response and isinstance(response, HTTPResponse):
170
                return response
171
            elif response and isinstance(response, HTTPRequest):
172
                logger.warning('DEPRECATED hook %s: a request hook must return None or an HTTPResponse nothing else',
173
                        hook['filter'])
174
            elif response:
175
                logger.warning("%s on_request hook (%s) must return None or an HTTPResponse nothing else",
176
                        self.env['PATH_INFO'], hook['filter'])
177
        return
174 178

  
175 179
    def mod_response(self, request, response):
176 180
        """ Modify the response. This will load on_response filters.
mandaye/filters/default.py
25 25
        # Add forwarded header like Apache
26 26
        request.headers.addheader('X-Forwarded-For', env['REMOTE_ADDR'])
27 27
        request.headers.addheader('X-Forwarded-Host', env['HTTP_HOST'])
28
        return request
29 28

  
30 29
    @staticmethod
31 30
    def on_response(env, values, request, response):
mandaye/server.py
120 120
                                (conf_file, conf['mapper'])
121 121
                        logger.error(err)
122 122
                        raise ImproperlyConfigured, err
123
                    self.env['mandaye.auth_type'] = conf['mapper']
124 123
                    if not config.authentifications.has_key(conf['auth_type']):
125 124
                        err = '%s: authentification %s not found' % \
126 125
                                (conf_file, conf['auth_type'])
......
198 197
    def on_request(self, start_response):
199 198
        request = self._get_request()
200 199
        # Calling the dispatcher hook for the request
201
        request = self.dispatcher.mod_request(request)
202
        if not request:
203
            return self.on_response(start_response,
204
                    _500(self.env["PATH_INFO"], "Empty request"))
200
        response = self.dispatcher.mod_request(request)
201
        if response:
202
            return response
205 203
        if not request.target:
206 204
            response = self.dispatcher.get_response(request)
207 205
        elif not "://" in request.target:
208
-