'See if a URL is a candidate for a download URL for a project (the URL
has typically been scraped from an HTML page).
If it is, a dictionary is returned with keys "name", "version",
"filename" and "url"; otherwise, None is returned.'

def convert_url_to_download_info(self, url, project_name):

    def same_project(name1, name2):
        (name1, name2) = (name1.lower(), name2.lower())
        if (name1 == name2):
            result = True
        else:
            result = (name1.replace('_', '-') == name2.replace('_', '-'))
        return result
    result = None
    (scheme, netloc, path, params, query, frag) = urlparse(url)
    if frag.lower().startswith('egg='):
        logger.debug('%s:    version    hint    in    fragment:    %r', project_name, frag)
    m = HASHER_HASH.match(frag)
    if m:
        (algo, digest) = m.groups()
    else:
        (algo, digest) = (None, None)
    origpath = path
    if (path and (path[(-1)] == '/')):
        path = path[:(-1)]
    if path.endswith('.whl'):
        try:
            wheel = Wheel(path)
            if is_compatible(wheel, self.wheel_tags):
                if (project_name is None):
                    include = True
                else:
                    include = same_project(wheel.name, project_name)
                if include:
                    result = {'name': wheel.name, 'version': wheel.version, 'filename': wheel.filename, 'url': urlunparse((scheme, netloc, origpath, params, query, '')), 'python-version': ',    '.join(['.'.join(list(v[2:])) for v in wheel.pyver])}
        except Exception as e:
            logger.warning('invalid    path    for    wheel:    %s', path)
    elif path.endswith(self.downloadable_extensions):
        path = filename = posixpath.basename(path)
        for ext in self.downloadable_extensions:
            if path.endswith(ext):
                path = path[:(- len(ext))]
                t = self.split_filename(path, project_name)
                if (not t):
                    logger.debug('No    match    for    project/version:    %s', path)
                else:
                    (name, version, pyver) = t
                    if ((not project_name) or same_project(project_name, name)):
                        result = {'name': name, 'version': version, 'filename': filename, 'url': urlunparse((scheme, netloc, origpath, params, query, ''))}
                        if pyver:
                            result['python-version'] = pyver
                break
    if (result and algo):
        result[('%s_digest' % algo)] = digest
    return result
