Show More
@@ -126,10 +126,6 b' def make_app(global_conf, full_stack=Tru' | |||||
126 | # Appenlight monitoring and error handler |
|
126 | # Appenlight monitoring and error handler | |
127 | app, appenlight_client = wrap_in_appenlight_if_enabled(app, config) |
|
127 | app, appenlight_client = wrap_in_appenlight_if_enabled(app, config) | |
128 |
|
128 | |||
129 | # we want our low level middleware to get to the request ASAP. We don't |
|
|||
130 | # need any pylons stack middleware in them |
|
|||
131 | app = VCSMiddleware(app, config, appenlight_client) |
|
|||
132 |
|
||||
133 | # Establish the Registry for this application |
|
129 | # Establish the Registry for this application | |
134 | app = RegistryManager(app) |
|
130 | app = RegistryManager(app) | |
135 |
|
131 | |||
@@ -178,6 +174,57 b' def make_pyramid_app(global_config, **se' | |||||
178 | return pyramid_app |
|
174 | return pyramid_app | |
179 |
|
175 | |||
180 |
|
176 | |||
|
177 | def make_not_found_view(config): | |||
|
178 | """ | |||
|
179 | This creates the view shich should be registered as not-found-view to | |||
|
180 | pyramid. Basically it contains of the old pylons app, converted to a view. | |||
|
181 | Additionally it is wrapped by some other middlewares. | |||
|
182 | """ | |||
|
183 | settings = config.registry.settings | |||
|
184 | ||||
|
185 | # Make pylons app from unprepared settings. | |||
|
186 | pylons_app = make_app( | |||
|
187 | config.registry._pylons_compat_global_config, | |||
|
188 | **config.registry._pylons_compat_settings) | |||
|
189 | config.registry._pylons_compat_config = pylons_app.config | |||
|
190 | ||||
|
191 | # The VCSMiddleware shall operate like a fallback if pyramid doesn't find | |||
|
192 | # a view to handle the request. Therefore we wrap it around the pylons app | |||
|
193 | # and it will be added as not found view. | |||
|
194 | if settings['vcs.server.enable']: | |||
|
195 | pylons_app = VCSMiddleware( | |||
|
196 | pylons_app, settings, None, registry=config.registry) | |||
|
197 | ||||
|
198 | pylons_app_as_view = wsgiapp(pylons_app) | |||
|
199 | ||||
|
200 | # Protect from VCS Server error related pages when server is not available | |||
|
201 | vcs_server_enabled = asbool(settings.get('vcs.server.enable', 'true')) | |||
|
202 | if not vcs_server_enabled: | |||
|
203 | pylons_app_as_view = DisableVCSPagesWrapper(pylons_app_as_view) | |||
|
204 | ||||
|
205 | def pylons_app_with_error_handler(context, request): | |||
|
206 | """ | |||
|
207 | Handle exceptions from rc pylons app: | |||
|
208 | ||||
|
209 | - old webob type exceptions get converted to pyramid exceptions | |||
|
210 | - pyramid exceptions are passed to the error handler view | |||
|
211 | """ | |||
|
212 | try: | |||
|
213 | response = pylons_app_as_view(context, request) | |||
|
214 | if 400 <= response.status_int <= 599: # webob type error responses | |||
|
215 | return error_handler( | |||
|
216 | webob_to_pyramid_http_response(response), request) | |||
|
217 | except HTTPError as e: # pyramid type exceptions | |||
|
218 | return error_handler(e, request) | |||
|
219 | except Exception: | |||
|
220 | if settings.get('debugtoolbar.enabled', False): | |||
|
221 | raise | |||
|
222 | return error_handler(HTTPInternalServerError(), request) | |||
|
223 | return response | |||
|
224 | ||||
|
225 | return pylons_app_with_error_handler | |||
|
226 | ||||
|
227 | ||||
181 | def add_pylons_compat_data(registry, global_config, settings): |
|
228 | def add_pylons_compat_data(registry, global_config, settings): | |
182 | """ |
|
229 | """ | |
183 | Attach data to the registry to support the Pylons integration. |
|
230 | Attach data to the registry to support the Pylons integration. | |
@@ -274,44 +321,11 b' def includeme(config):' | |||||
274 | for inc in includes: |
|
321 | for inc in includes: | |
275 | config.include(inc) |
|
322 | config.include(inc) | |
276 |
|
323 | |||
277 | pylons_app = make_app( |
|
|||
278 | config.registry._pylons_compat_global_config, |
|
|||
279 | **config.registry._pylons_compat_settings) |
|
|||
280 | config.registry._pylons_compat_config = pylons_app.config |
|
|||
281 |
|
||||
282 | pylons_app_as_view = wsgiapp(pylons_app) |
|
|||
283 |
|
||||
284 | # Protect from VCS Server error related pages when server is not available |
|
|||
285 | vcs_server_enabled = asbool(settings.get('vcs.server.enable', 'true')) |
|
|||
286 | if not vcs_server_enabled: |
|
|||
287 | pylons_app_as_view = DisableVCSPagesWrapper(pylons_app_as_view) |
|
|||
288 |
|
||||
289 |
|
||||
290 | def pylons_app_with_error_handler(context, request): |
|
|||
291 | """ |
|
|||
292 | Handle exceptions from rc pylons app: |
|
|||
293 |
|
||||
294 | - old webob type exceptions get converted to pyramid exceptions |
|
|||
295 | - pyramid exceptions are passed to the error handler view |
|
|||
296 | """ |
|
|||
297 | try: |
|
|||
298 | response = pylons_app_as_view(context, request) |
|
|||
299 | if 400 <= response.status_int <= 599: # webob type error responses |
|
|||
300 | return error_handler( |
|
|||
301 | webob_to_pyramid_http_response(response), request) |
|
|||
302 | except HTTPError as e: # pyramid type exceptions |
|
|||
303 | return error_handler(e, request) |
|
|||
304 | except Exception: |
|
|||
305 | if settings.get('debugtoolbar.enabled', False): |
|
|||
306 | raise |
|
|||
307 | return error_handler(HTTPInternalServerError(), request) |
|
|||
308 | return response |
|
|||
309 |
|
||||
310 | # This is the glue which allows us to migrate in chunks. By registering the |
|
324 | # This is the glue which allows us to migrate in chunks. By registering the | |
311 | # pylons based application as the "Not Found" view in Pyramid, we will |
|
325 | # pylons based application as the "Not Found" view in Pyramid, we will | |
312 | # fallback to the old application each time the new one does not yet know |
|
326 | # fallback to the old application each time the new one does not yet know | |
313 | # how to handle a request. |
|
327 | # how to handle a request. | |
314 | config.add_notfound_view(pylons_app_with_error_handler) |
|
328 | config.add_notfound_view(make_not_found_view(config)) | |
315 |
|
329 | |||
316 | if not settings.get('debugtoolbar.enabled', False): |
|
330 | if not settings.get('debugtoolbar.enabled', False): | |
317 | # if no toolbar, then any exception gets caught and rendered |
|
331 | # if no toolbar, then any exception gets caught and rendered |
General Comments 0
You need to be logged in to leave comments.
Login now