diff options
| author | ianb <devnull@localhost> | 2005-05-20 02:40:45 +0000 |
|---|---|---|
| committer | ianb <devnull@localhost> | 2005-05-20 02:40:45 +0000 |
| commit | 2dbb09bc50d312c2ea9b2ee5d32bc62125d1ee78 (patch) | |
| tree | 40831ecf372d7b18bb8ac9355e57dd5cf50e1247 /paste/wsgilib.py | |
| parent | d141901e18de413dc36a7f1412697a125beb9354 (diff) | |
| download | paste-2dbb09bc50d312c2ea9b2ee5d32bc62125d1ee78.tar.gz | |
Added another PATH_INFO popping function
Diffstat (limited to 'paste/wsgilib.py')
| -rw-r--r-- | paste/wsgilib.py | 42 |
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() + |
