summaryrefslogtreecommitdiff
path: root/paste/wsgilib.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2005-05-20 02:40:45 +0000
committerianb <devnull@localhost>2005-05-20 02:40:45 +0000
commit2dbb09bc50d312c2ea9b2ee5d32bc62125d1ee78 (patch)
tree40831ecf372d7b18bb8ac9355e57dd5cf50e1247 /paste/wsgilib.py
parentd141901e18de413dc36a7f1412697a125beb9354 (diff)
downloadpaste-2dbb09bc50d312c2ea9b2ee5d32bc62125d1ee78.tar.gz
Added another PATH_INFO popping function
Diffstat (limited to 'paste/wsgilib.py')
-rw-r--r--paste/wsgilib.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/paste/wsgilib.py b/paste/wsgilib.py
index 9537e9d..b1da553 100644
--- a/paste/wsgilib.py
+++ b/paste/wsgilib.py
@@ -253,3 +253,45 @@ def path_info_split(path_info):
return first, '/' + rest
else:
return path_info, ''
+
+def path_info_pop(environ):
+ """
+ 'Pops' off the next segment of PATH_INFO, pushing it onto
+ SCRIPT_NAME, and returning that segment. For instance::
+
+ >>> def call_it(script_name, path_info):
+ ... env = {'SCRIPT_NAME': script_name, 'PATH_INFO': path_info}
+ ... result = path_info_pop(env)
+ ... print 'SCRIPT_NAME=%r; PATH_INFO=%r; returns=%r' % (
+ ... env['SCRIPT_NAME'], env['PATH_INFO'], result)
+ >>> call_it('/foo', '/bar')
+ SCRIPT_NAME='/foo/bar'; PATH_INFO=''; returns='bar'
+ >>> call_it('/foo/bar', '')
+ SCRIPT_NAME='/foo/bar'; PATH_INFO=''; returns=None
+ >>> call_it('/foo/bar', '/')
+ SCRIPT_NAME='/foo/bar/'; PATH_INFO=''; returns=''
+ >>> call_it('', '/1/2/3')
+ SCRIPT_NAME='/1'; PATH_INFO='/2/3'; returns='1'
+ >>> call_it('', '//1/2')
+ SCRIPT_NAME='//1'; PATH_INFO='/2'; returns='1'
+ """
+ path = environ.get('PATH_INFO', '')
+ if not path:
+ return None
+ while path.startswith('/'):
+ environ['SCRIPT_NAME'] += '/'
+ path = path[1:]
+ if '/' not in path:
+ environ['SCRIPT_NAME'] += path
+ environ['PATH_INFO'] = ''
+ return path
+ else:
+ segment, path = path.split('/', 1)
+ environ['PATH_INFO'] = '/' + path
+ environ['SCRIPT_NAME'] += segment
+ return segment
+
+if __name__ == '__main__':
+ import doctest
+ doctest.testmod()
+