'Parse path parts of request into a tuple of version, account,
container, obj.  Unspecified path parts are filled in as None,
except version which is always returned as a float using the
configured default response version if not specified in the
request.
:param request: the swob request
:returns: parsed path parts as a tuple with version filled in as
configured default response version if not specified.
:raises ValueError: if path is invalid, message will say why.'

def _parse_path(self, request):

    clean_path = request.path[(len(self.endpoints_path) - 1):]
    try:
        (raw_version, rest) = split_path(clean_path, 1, 2, True)
    except ValueError:
        raise ValueError('No    account    specified')
    try:
        version = self._parse_version(raw_version)
    except ValueError:
        if (raw_version.startswith('v') and ('_' not in raw_version)):
            raise
        version = self.default_response_version
        rest = clean_path
    else:
        rest = (('/' + rest) if rest else '/')
    try:
        (account, container, obj) = split_path(rest, 1, 3, True)
    except ValueError:
        raise ValueError('No    account    specified')
    return (version, account, container, obj)
