0
|
1 """
|
|
2 request dispatcher
|
|
3 """
|
|
4
|
|
5 import urlparse
|
|
6 from webob import Request
|
|
7
|
|
8 class Relocator(object):
|
|
9
|
|
10
|
|
11 def __init__(self, app, baseurl):
|
|
12 self.app = app
|
|
13 self.baseurl = list(urlparse.urlsplit(baseurl))
|
|
14
|
|
15 def __call__(self, environ, start_response):
|
|
16 request = Request(environ)
|
|
17 response = request.get_response(self.app)
|
|
18 if 'Location' in response.headers:
|
|
19 parsed = list(urlparse.urlsplit(response.headers['Location']))
|
|
20 location = ['' for i in range(5)] # new location
|
|
21
|
|
22 # overwrite scheme, netloc, and fragment
|
|
23 for i in (0, 1, 4):
|
|
24 location[i] = self.baseurl[i]
|
|
25
|
|
26 # append path and query string
|
|
27 for i in (2, 3):
|
|
28 location[i] = self.baseurl[i] + parsed[i]
|
|
29
|
|
30 response.headers['Location'] = urlparse.urlunsplit(location)
|
|
31 return response(environ, start_response)
|