Skip to content

Made Session.parse_url accept urls without versions as it should#3

Closed
suonto wants to merge 1 commit into
openstack:masterfrom
suonto:master
Closed

Made Session.parse_url accept urls without versions as it should#3
suonto wants to merge 1 commit into
openstack:masterfrom
suonto:master

Conversation

@suonto

@suonto suonto commented May 17, 2016

Copy link
Copy Markdown

Fixed a clear bug. If catalog (supports multiple versions) returns endpoint without version, url path is stripped to empty string. In my opinion, the correct way to handle it is just to append the version, like in this patch.

OLD VERSION:

def parse_url(filt, url):
    print '**** parse_url ****'
    print 'arg filt:', filt
    print 'arg url:', url
    result = parse.urlparse(url)
    print 'result', result
    path = result.path
    print 'path', path
    vstr = VERSION_PATTERN.search(path)
    print 'vstr', vstr
    print result.scheme + "://" + result.netloc + "/" + filt.get_path()
    if not vstr:
        print 'not vstr!'
        print result.scheme + "://" + result.netloc + "/" + filt.get_path()
        print '-------------------'
        return result.scheme + "://" + result.netloc + "/" + filt.get_path()
    start, end = vstr.span()
    print 'start, end', start, end
    prefix = path[:start]
    print 'prefix', prefix
    version = '/' + filt.get_path(path[start + 1:end])
    print 'version', version
    postfix = path[end:].rstrip('/') if path[end:] else ''
    print 'postfix', postfix
    url = result.scheme + "://" + result.netloc + prefix + version + postfix
    print 'url', url
    print '-------------------'
    return url

output:
**** parse_url ****
arg filt: <class 'openstack.network.network_service.NetworkService'>
arg url: https://example.com/api/region1/neutron
result ParseResult(scheme=u'https', netloc=u'example.com', path=u'/api/region1/neutron', params='', query='', fragment='')
path /api/region1/neutron
vstr None
not vstr!

https://example.com/v2.0


NEW FIXED VERSION

def parse_url(filt, url):
    print '**** parse_url ****'
    print 'arg filt:', filt
    print 'arg url:', url
    result = parse.urlparse(url)
    print 'result', result
    path = result.path
    print 'path', path
    vstr = VERSION_PATTERN.search(path)
    print 'vstr', vstr
    print result.scheme + "://" + result.netloc + "/" + filt.get_path()
    if not vstr:
        print 'not vstr!'
        # return result.scheme + "://" + result.netloc + "/" + filt.get_path()
        path += '/' + filt.get_path()
        vstr = VERSION_PATTERN.search(path)
    start, end = vstr.span()
    print 'start, end', start, end
    prefix = path[:start]
    print 'prefix', prefix
    version = '/' + filt.get_path(path[start + 1:end])
    print 'version', version
    postfix = path[end:].rstrip('/') if path[end:] else ''
    print 'postfix', postfix
    url = result.scheme + "://" + result.netloc + prefix + version + postfix
    print 'url', url
    print '-------------------'
    return url

output:
**** parse_url ****
arg filt: <class 'openstack.network.network_service.NetworkService'>
arg url: https://example.com/api/region1/neutron
result ParseResult(scheme=u'https', netloc=u'example.com', path=u'/api/region1/neutron', params='', query='', fragment='')
path /api/region1/neutron
vstr None
https://example.com/v2.0
not vstr!
start, end 18 23
prefix /api/region1/neutron
version /v2.0
postfix

url https://example.com/api/region1/neutron/v2.0


@openstack-gerrit

Copy link
Copy Markdown

Thank you for contributing to openstack/python-openstacksdk!

openstack/python-openstacksdk uses Gerrit for code review.

If you have never contributed to OpenStack before make sure you have read the
getting started documentation:
http://docs.openstack.org/infra/manual/developers.html#getting-started

Otherwise please visit
http://docs.openstack.org/infra/manual/developers.html#development-workflow
and follow the instructions there to upload your change to Gerrit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants