~0x44/nova/extdoc

« back to all changes in this revision

Viewing changes to nova/api/openstack/common.py

Fixes an issue where 'invalid literal for int' would occur when listing images after making a v1.1 server snapshot (with a UUID).

v1.1 image id's are now treated as strings (not integer ID's). The v1.0 API still tries to treat image id's as integers but doesn't fail miserably if they are uuid's either.

This should pave the way for image ID's as uuids and more closely matches the v1.1 spec with regards to images and the server refs they contain.

Show diffs side-by-side

added added

removed removed

Lines of Context:
187
187
 
188
188
 
189
189
def get_id_from_href(href):
190
 
    """Return the id portion of a url as an int.
 
190
    """Return the id or uuid portion of a url.
191
191
 
192
192
    Given: 'http://www.foo.com/bar/123?q=4'
193
 
    Returns: 123
 
193
    Returns: '123'
194
194
 
195
 
    In order to support local hrefs, the href argument can be just an id:
196
 
    Given: '123'
197
 
    Returns: 123
 
195
    Given: 'http://www.foo.com/bar/abc123?q=4'
 
196
    Returns: 'abc123'
198
197
 
199
198
    """
200
 
    LOG.debug(_("Attempting to treat %(href)s as an integer ID.") % locals())
201
 
 
202
 
    try:
203
 
        return int(href)
204
 
    except ValueError:
205
 
        pass
206
 
 
207
 
    LOG.debug(_("Attempting to treat %(href)s as a URL.") % locals())
208
 
 
209
 
    try:
210
 
        return int(urlparse.urlsplit(href).path.split('/')[-1])
211
 
    except ValueError as error:
212
 
        LOG.debug(_("Failed to parse ID from %(href)s: %(error)s") % locals())
213
 
        raise
 
199
    return urlparse.urlsplit("%s" % href).path.split('/')[-1]
214
200
 
215
201
 
216
202
def remove_version_from_href(href):