Show More
@@ -41,6 +41,7 b' import routes.util' | |||||
41 | import rhodecode |
|
41 | import rhodecode | |
42 | import rhodecode.integrations # do not remove this as it registers celery tasks |
|
42 | import rhodecode.integrations # do not remove this as it registers celery tasks | |
43 | from rhodecode.config import patches |
|
43 | from rhodecode.config import patches | |
|
44 | from rhodecode.config.routing import STATIC_FILE_PREFIX | |||
44 | from rhodecode.config.environment import ( |
|
45 | from rhodecode.config.environment import ( | |
45 | load_environment, load_pyramid_environment) |
|
46 | load_environment, load_pyramid_environment) | |
46 | from rhodecode.lib.middleware import csrf |
|
47 | from rhodecode.lib.middleware import csrf | |
@@ -54,6 +55,25 b' from rhodecode.lib.plugins.utils import ' | |||||
54 | log = logging.getLogger(__name__) |
|
55 | log = logging.getLogger(__name__) | |
55 |
|
56 | |||
56 |
|
57 | |||
|
58 | # this is used to avoid avoid the route lookup overhead in routesmiddleware | |||
|
59 | # for certain routes which won't go to pylons to - eg. static files, debugger | |||
|
60 | # it is only needed for the pylons migration and can be removed once complete | |||
|
61 | class SkippableRoutesMiddleware(RoutesMiddleware): | |||
|
62 | """ Routes middleware that allows you to skip prefixes """ | |||
|
63 | ||||
|
64 | def __init__(self, *args, **kw): | |||
|
65 | self.skip_prefixes = kw.pop('skip_prefixes', []) | |||
|
66 | super(SkippableRoutesMiddleware, self).__init__(*args, **kw) | |||
|
67 | ||||
|
68 | def __call__(self, environ, start_response): | |||
|
69 | for prefix in self.skip_prefixes: | |||
|
70 | if environ['PATH_INFO'].startswith(prefix): | |||
|
71 | return self.app(environ, start_response) | |||
|
72 | ||||
|
73 | return super(SkippableRoutesMiddleware, self).__call__( | |||
|
74 | environ, start_response) | |||
|
75 | ||||
|
76 | ||||
57 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): |
|
77 | def make_app(global_conf, full_stack=True, static_files=True, **app_conf): | |
58 | """Create a Pylons WSGI application and return it |
|
78 | """Create a Pylons WSGI application and return it | |
59 |
|
79 | |||
@@ -142,8 +162,8 b' def make_pyramid_app(global_config, **se' | |||||
142 |
|
162 | |||
143 | load_pyramid_environment(global_config, settings) |
|
163 | load_pyramid_environment(global_config, settings) | |
144 |
|
164 | |||
|
165 | includeme_first(config) | |||
145 | includeme(config) |
|
166 | includeme(config) | |
146 | includeme_last(config) |
|
|||
147 | pyramid_app = config.make_wsgi_app() |
|
167 | pyramid_app = config.make_wsgi_app() | |
148 | pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config) |
|
168 | pyramid_app = wrap_app_in_wsgi_middlewares(pyramid_app, config) | |
149 | return pyramid_app |
|
169 | return pyramid_app | |
@@ -285,20 +305,17 b' def includeme(config):' | |||||
285 | config.add_view(error_handler, context=HTTPError) |
|
305 | config.add_view(error_handler, context=HTTPError) | |
286 |
|
306 | |||
287 |
|
307 | |||
288 |
def includeme_ |
|
308 | def includeme_first(config): | |
289 | """ |
|
|||
290 | The static file catchall needs to be last in the view configuration. |
|
|||
291 | """ |
|
|||
292 | settings = config.registry.settings |
|
|||
293 | config.add_static_view('_static', path='rhodecode:public') |
|
|||
294 |
|
||||
295 | # redirect automatic browser favicon.ico requests to correct place |
|
309 | # redirect automatic browser favicon.ico requests to correct place | |
296 | def favicon_redirect(context, request): |
|
310 | def favicon_redirect(context, request): | |
297 | return redirect( |
|
311 | return redirect( | |
298 | request.static_url('rhodecode:public/images/favicon.ico')) |
|
312 | request.static_url('rhodecode:public/images/favicon.ico')) | |
|
313 | ||||
299 | config.add_view(favicon_redirect, route_name='favicon') |
|
314 | config.add_view(favicon_redirect, route_name='favicon') | |
300 | config.add_route('favicon', '/favicon.ico') |
|
315 | config.add_route('favicon', '/favicon.ico') | |
301 |
|
316 | |||
|
317 | config.add_static_view('_static', path='rhodecode:public') | |||
|
318 | ||||
302 |
|
319 | |||
303 | def wrap_app_in_wsgi_middlewares(pyramid_app, config): |
|
320 | def wrap_app_in_wsgi_middlewares(pyramid_app, config): | |
304 | """ |
|
321 | """ | |
@@ -314,10 +331,10 b' def wrap_app_in_wsgi_middlewares(pyramid' | |||||
314 | pyramid_app = HttpsFixup(pyramid_app, settings) |
|
331 | pyramid_app = HttpsFixup(pyramid_app, settings) | |
315 |
|
332 | |||
316 | # Add RoutesMiddleware to support the pylons compatibility tween during |
|
333 | # Add RoutesMiddleware to support the pylons compatibility tween during | |
317 |
|
||||
318 | # migration to pyramid. |
|
334 | # migration to pyramid. | |
319 | pyramid_app = RoutesMiddleware( |
|
335 | pyramid_app = SkippableRoutesMiddleware( | |
320 |
pyramid_app, config.registry._pylons_compat_config['routes.map'] |
|
336 | pyramid_app, config.registry._pylons_compat_config['routes.map'], | |
|
337 | skip_prefixes=(STATIC_FILE_PREFIX, '/_debug_toolbar')) | |||
321 |
|
338 | |||
322 | if asbool(settings.get('appenlight', 'false')): |
|
339 | if asbool(settings.get('appenlight', 'false')): | |
323 | pyramid_app, _ = wrap_in_appenlight_if_enabled( |
|
340 | pyramid_app, _ = wrap_in_appenlight_if_enabled( |
@@ -36,6 +36,7 b' from rhodecode.config import routing_lin' | |||||
36 |
|
36 | |||
37 | # prefix for non repository related links needs to be prefixed with `/` |
|
37 | # prefix for non repository related links needs to be prefixed with `/` | |
38 | ADMIN_PREFIX = '/_admin' |
|
38 | ADMIN_PREFIX = '/_admin' | |
|
39 | STATIC_FILE_PREFIX = '/_static' | |||
39 |
|
40 | |||
40 | # Default requirements for URL parts |
|
41 | # Default requirements for URL parts | |
41 | URL_NAME_REQUIREMENTS = { |
|
42 | URL_NAME_REQUIREMENTS = { |
General Comments 0
You need to be logged in to leave comments.
Login now