annotate relocator/relocator.py @ 2:1892dd7d8748 default tip

py3
author Jeff Hammel <k0scist@gmail.com>
date Tue, 03 Nov 2020 09:59:20 -0800
parents 68bea9e91bd2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
1 """
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
2 request dispatcher
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
3 """
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
4
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
5 import urlparse
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
6 from webob import Request
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
7
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
8 class Relocator(object):
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
9
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
10
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
11 def __init__(self, app, baseurl):
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
12 self.app = app
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
13 self.baseurl = list(urlparse.urlsplit(baseurl))
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
14
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
15 def __call__(self, environ, start_response):
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
16 request = Request(environ)
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
17 response = request.get_response(self.app)
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
18 if 'Location' in response.headers:
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
19 parsed = list(urlparse.urlsplit(response.headers['Location']))
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
20 location = ['' for i in range(5)] # new location
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
21
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
22 # overwrite scheme, netloc, and fragment
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
23 for i in (0, 1, 4):
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
24 location[i] = self.baseurl[i]
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
25
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
26 # append path and query string
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
27 for i in (2, 3):
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
28 location[i] = self.baseurl[i] + parsed[i]
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
29
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
30 response.headers['Location'] = urlparse.urlunsplit(location)
68bea9e91bd2 initial import of relocator
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
31 return response(environ, start_response)