diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-24 10:54:55 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-24 10:54:55 +0000 |
| commit | a1ccfe3a7671874551f319a857980076a06f0110 (patch) | |
| tree | 9abd1a372012bef2139d7580a2601adea8f58d8c | |
| parent | 7292d4d6a7d63c55a718dc50943bc9cbf90ae6fe (diff) | |
| download | pyramid-a1ccfe3a7671874551f319a857980076a06f0110.tar.gz pyramid-a1ccfe3a7671874551f319a857980076a06f0110.tar.bz2 pyramid-a1ccfe3a7671874551f319a857980076a06f0110.zip | |
- Use a homegrown NotFound error instead of ``webob.HTTPNotFound``
(the latter is slow).
| -rw-r--r-- | CHANGES.txt | 3 | ||||
| -rw-r--r-- | repoze/bfg/router.py | 22 |
2 files changed, 20 insertions, 5 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index ab8b6febe..abd884923 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -19,6 +19,9 @@ Behavior Changes Implementation Changes ---------------------- +- Use a homegrown NotFound error instead of ``webob.HTTPNotFound`` + (the latter is slow). + - Various speed micro-tweaks. Bug Fixes diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index c9366477c..84f267791 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -5,7 +5,6 @@ from zope.component.event import dispatch from zope.interface import implements -from webob.exc import HTTPNotFound from webob.exc import HTTPUnauthorized from repoze.bfg.events import NewRequest @@ -40,8 +39,6 @@ from repoze.bfg.view import _view_execution_permitted _marker = object() -# 95090 function calls (95087 primitive calls) in 0.277 CPU seconds - class Router(object): """ The main repoze.bfg WSGI application. """ implements(IRouter) @@ -135,8 +132,9 @@ class Router(object): logger and logger.debug(msg) else: msg = request.url - app = HTTPNotFound(escape(msg)) - return app(environ, start_response) + notfound = NotFound(msg) + start_response(notfound.status, notfound.headerlist) + return notfound.app_iter registry.has_listeners and registry.notify(NewResponse(response)) @@ -150,6 +148,20 @@ class Router(object): finally: registry_manager.pop() +class NotFound(object): + """ Avoid using WebOb's NotFound WSGI response app; it's slow. """ + def __init__(self, msg=''): + html = """<body> + <html><title>404 Not Found</title><body><h1>404 Not Found</h1> + <code>%s</code> + """ % msg + self.headerlist = [ + ('Content-Length', len(html) ), + ('Content-Type', 'text/html') + ] + self.app_iter = [html] + self.status = '404 Not Found' + def make_app(root_factory, package=None, filename='configure.zcml', options=None): """ Return a Router object, representing a ``repoze.bfg`` WSGI |
