Show More
@@ -31,9 +31,9 b' from pyramid.authorization import ACLAut' | |||||
31 | from pyramid.config import Configurator |
|
31 | from pyramid.config import Configurator | |
32 | from pyramid.settings import asbool, aslist |
|
32 | from pyramid.settings import asbool, aslist | |
33 | from pyramid.wsgi import wsgiapp |
|
33 | from pyramid.wsgi import wsgiapp | |
34 |
from pyramid.httpexceptions import |
|
34 | from pyramid.httpexceptions import ( | |
|
35 | HTTPError, HTTPInternalServerError, HTTPFound) | |||
35 | from pyramid.events import ApplicationCreated |
|
36 | from pyramid.events import ApplicationCreated | |
36 | import pyramid.httpexceptions as httpexceptions |
|
|||
37 | from pyramid.renderers import render_to_response |
|
37 | from pyramid.renderers import render_to_response | |
38 | from routes.middleware import RoutesMiddleware |
|
38 | from routes.middleware import RoutesMiddleware | |
39 | import routes.util |
|
39 | import routes.util | |
@@ -44,10 +44,10 b' from rhodecode.config import patches' | |||||
44 | from rhodecode.config.routing import STATIC_FILE_PREFIX |
|
44 | from rhodecode.config.routing import STATIC_FILE_PREFIX | |
45 | from rhodecode.config.environment import ( |
|
45 | from rhodecode.config.environment import ( | |
46 | load_environment, load_pyramid_environment) |
|
46 | load_environment, load_pyramid_environment) | |
47 | from rhodecode.lib.exceptions import VCSServerUnavailable |
|
|||
48 | from rhodecode.lib.vcs.exceptions import VCSCommunicationError |
|
|||
49 | from rhodecode.lib.middleware import csrf |
|
47 | from rhodecode.lib.middleware import csrf | |
50 | from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled |
|
48 | from rhodecode.lib.middleware.appenlight import wrap_in_appenlight_if_enabled | |
|
49 | from rhodecode.lib.middleware.error_handling import ( | |||
|
50 | PylonsErrorHandlingMiddleware) | |||
51 | from rhodecode.lib.middleware.https_fixup import HttpsFixup |
|
51 | from rhodecode.lib.middleware.https_fixup import HttpsFixup | |
52 | from rhodecode.lib.middleware.vcs import VCSMiddleware |
|
52 | from rhodecode.lib.middleware.vcs import VCSMiddleware | |
53 | from rhodecode.lib.plugins.utils import register_rhodecode_plugin |
|
53 | from rhodecode.lib.plugins.utils import register_rhodecode_plugin | |
@@ -192,47 +192,15 b' def make_not_found_view(config):' | |||||
192 | pylons_app = VCSMiddleware( |
|
192 | pylons_app = VCSMiddleware( | |
193 | pylons_app, settings, appenlight_client, registry=config.registry) |
|
193 | pylons_app, settings, appenlight_client, registry=config.registry) | |
194 |
|
194 | |||
195 | pylons_app_as_view = wsgiapp(pylons_app) |
|
195 | # Add an error handling middleware to convert errors from the old pylons | |
196 |
|
196 | # app into a proper error page response. | ||
197 | def pylons_app_with_error_handler(context, request): |
|
197 | reraise = (settings.get('debugtoolbar.enabled', False) or | |
198 | """ |
|
198 | rhodecode.disable_error_handler) | |
199 | Handle exceptions from rc pylons app: |
|
199 | pylons_app = PylonsErrorHandlingMiddleware( | |
200 |
|
200 | pylons_app, error_handler, reraise) | ||
201 | - old webob type exceptions get converted to pyramid exceptions |
|
|||
202 | - pyramid exceptions are passed to the error handler view |
|
|||
203 | """ |
|
|||
204 | def is_vcs_response(response): |
|
|||
205 | return 'X-RhodeCode-Backend' in response.headers |
|
|||
206 |
|
||||
207 | def is_http_error(response): |
|
|||
208 | # webob type error responses |
|
|||
209 | return (400 <= response.status_int <= 599) |
|
|||
210 |
|
||||
211 | def is_error_handling_needed(response): |
|
|||
212 | return is_http_error(response) and not is_vcs_response(response) |
|
|||
213 |
|
201 | |||
214 | try: |
|
202 | # Convert WSGI app to pyramid view and return it. | |
215 | response = pylons_app_as_view(context, request) |
|
203 | return wsgiapp(pylons_app) | |
216 | if is_error_handling_needed(response): |
|
|||
217 | response = webob_to_pyramid_http_response(response) |
|
|||
218 | return error_handler(response, request) |
|
|||
219 | except HTTPError as e: # pyramid type exceptions |
|
|||
220 | return error_handler(e, request) |
|
|||
221 | except Exception as e: |
|
|||
222 | log.exception(e) |
|
|||
223 |
|
||||
224 | if (settings.get('debugtoolbar.enabled', False) or |
|
|||
225 | rhodecode.disable_error_handler): |
|
|||
226 | raise |
|
|||
227 |
|
||||
228 | if isinstance(e, VCSCommunicationError): |
|
|||
229 | return error_handler(VCSServerUnavailable(), request) |
|
|||
230 |
|
||||
231 | return error_handler(HTTPInternalServerError(), request) |
|
|||
232 |
|
||||
233 | return response |
|
|||
234 |
|
||||
235 | return pylons_app_with_error_handler |
|
|||
236 |
|
204 | |||
237 |
|
205 | |||
238 | def add_pylons_compat_data(registry, global_config, settings): |
|
206 | def add_pylons_compat_data(registry, global_config, settings): | |
@@ -243,16 +211,6 b' def add_pylons_compat_data(registry, glo' | |||||
243 | registry._pylons_compat_settings = settings |
|
211 | registry._pylons_compat_settings = settings | |
244 |
|
212 | |||
245 |
|
213 | |||
246 | def webob_to_pyramid_http_response(webob_response): |
|
|||
247 | ResponseClass = httpexceptions.status_map[webob_response.status_int] |
|
|||
248 | pyramid_response = ResponseClass(webob_response.status) |
|
|||
249 | pyramid_response.status = webob_response.status |
|
|||
250 | pyramid_response.headers.update(webob_response.headers) |
|
|||
251 | if pyramid_response.headers['content-type'] == 'text/html': |
|
|||
252 | pyramid_response.headers['content-type'] = 'text/html; charset=UTF-8' |
|
|||
253 | return pyramid_response |
|
|||
254 |
|
||||
255 |
|
||||
256 | def error_handler(exception, request): |
|
214 | def error_handler(exception, request): | |
257 | from rhodecode.model.settings import SettingsModel |
|
215 | from rhodecode.model.settings import SettingsModel | |
258 | from rhodecode.lib.utils2 import AttributeDict |
|
216 | from rhodecode.lib.utils2 import AttributeDict |
General Comments 0
You need to be logged in to leave comments.
Login now