annotate wsgintegrate/dispatcher.py @ 15:1a7bbd97dda4

work around a horrible downstream issue
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 17 Nov 2011 11:49:41 -0800
parents e07b0f675c17
children d742aff49859
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 """
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2 multi-application dispatcher for WSGI apps
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 """
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 from webob import Request
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6 from webob import exc
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8 class Dispatcher(object):
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9
14
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
10 def __init__(self, *apps):
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
11 self.apps = apps
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
12 self.codes = set([404])
0
ec815b7cb142 initial commit of wsgintegrate
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13
14
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
14 def __call__(self, environ, start_response):
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
15 request = Request(environ)
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
16 for app in self.apps:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
17 try:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
18 response = request.get_response(app)
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
19 if response.status_int in self.codes:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
20 continue
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
21 break
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
22 except exc.HTTPNotFound:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
23 continue
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
24 except:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
25 print app
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
26 raise
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
27 else:
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
28 response = exc.HTTPNotFound()
15
1a7bbd97dda4 work around a horrible downstream issue
Jeff Hammel <jhammel@mozilla.com>
parents: 14
diff changeset
29 try:
1a7bbd97dda4 work around a horrible downstream issue
Jeff Hammel <jhammel@mozilla.com>
parents: 14
diff changeset
30 return response(environ, start_response)
1a7bbd97dda4 work around a horrible downstream issue
Jeff Hammel <jhammel@mozilla.com>
parents: 14
diff changeset
31 except:
1a7bbd97dda4 work around a horrible downstream issue
Jeff Hammel <jhammel@mozilla.com>
parents: 14
diff changeset
32 response.headerlist = [(i,str(j)) for i, j in response.headerlist]
1a7bbd97dda4 work around a horrible downstream issue
Jeff Hammel <jhammel@mozilla.com>
parents: 14
diff changeset
33 return response(environ, start_response)
14
e07b0f675c17 whitespace
Jeff Hammel <jhammel@mozilla.com>
parents: 11
diff changeset
34