Пример #1
0
def preprocess_project(stage, name):
    try:
        user = stage.user.name
        index = stage.index
    except AttributeError:
        user, index = stage.name.split('/')
    if not is_project_cached(stage, name):
        return dict(name=name, user=user, index=index)
    setuptools_metadata = frozenset((
        'author', 'author_email', 'classifiers', 'description', 'download_url',
        'home_page', 'keywords', 'license', 'platform', 'summary'))
    versions = get_sorted_versions(stage.list_versions_perstage(name))
    result = dict(name=name)
    for i, version in enumerate(versions):
        verdata = stage.get_versiondata(name, version)
        if not i:
            result.update(verdata)
        links = stage.get_linkstore_perstage(name, version).get_links(rel="doczip")
        if links:
            # we assume it has been unpacked
            result['doc_version'] = version
            result['+doczip'] = iter_doc_contents(stage, name, version)
            break
        else:
            assert '+doczip' not in result

    result[u'user'] = user
    result[u'index'] = index
    for key in setuptools_metadata:
        if key in result:
            value = result[key]
            if value == 'UNKNOWN' or not value:
                del result[key]
    return result
Пример #2
0
 def stable_versions(self):
     versions = self.stage.list_versions(self.project)
     if not versions:
         raise HTTPNotFound("The project %s does not exist." % self.project)
     versions = get_sorted_versions(versions, stable=True)
     if not versions:
         raise HTTPNotFound("The project %s has no stable release." % self.project)
     return versions
Пример #3
0
 def get_matching_versioninfo(self, pkgname, indexname):
     req = next(pkg_resources.parse_requirements(pkgname))
     projurl = self.current.get_project_url(
         req.project_name, indexname=indexname).url
     r = self.hub.http_api("get", projurl)
     for version in get_sorted_versions(r.result):
         if version not in req:
             continue
         return ViewLinkStore(projurl, r.result[version])
Пример #4
0
def preprocess_project(project):
    stage = project.stage
    pm = get_pluginmanager(stage.xom.config)
    name = normalize_name(project.name)
    try:
        user = stage.user.name
        index = stage.index
    except AttributeError:
        user, index = stage.name.split('/')
    user = ensure_unicode(user)
    index = ensure_unicode(index)
    if not is_project_cached(stage, name):
        result = dict(name=name, user=user, index=index)
        pm.hook.devpiweb_modify_preprocess_project_result(project=project,
                                                          result=result)
        return result
    stage.offline = True
    if not stage.has_project_perstage(name):
        # project doesn't exist anymore
        return
    setuptools_metadata = frozenset(getattr(stage, 'metadata_keys', ()))
    versions = get_sorted_versions(stage.list_versions_perstage(name))
    result = dict(name=name)
    for i, version in enumerate(versions):
        if i == 0:
            verdata = stage.get_versiondata_perstage(name, version)
            result.update(verdata)
        links = stage.get_linkstore_perstage(name,
                                             version).get_links(rel="doczip")
        if links:
            docs = Docs(stage, name, version)
            if docs.exists():
                result['doc_version'] = version
                result['+doczip'] = docs
            break
        else:
            assert '+doczip' not in result

    result[u'user'] = user
    result[u'index'] = index
    for key in setuptools_metadata:
        if key in result:
            value = result[key]
            if value == 'UNKNOWN' or not value:
                del result[key]
    pm.hook.devpiweb_modify_preprocess_project_result(project=project,
                                                      result=result)
    return result
Пример #5
0
def out_project(hub, reply, req):
    data = reply.result
    index = hub.current.index[len(hub.current.rooturl):]
    num = 0
    maxshow = 2
    for version in get_sorted_versions(data):
        if version not in req:
            continue
        if num > maxshow and not hub.args.all:
            num += 1
            continue
        verdata = data[version]
        if out_project_version_files(hub, reply.url, verdata, version, index):
            num += 1
        shadowing = data[version].get("+shadowing", [])
        for verdata in shadowing:
            if out_project_version_files(hub, reply.url, verdata, version, None):
                num += 1
    if not hub.args.all and num > (maxshow+1):
        hub.info("%s older versions not shown, use --all to see" %
                 (num-maxshow-1))
Пример #6
0
 def versions(self):
     versions = self.stage.list_versions(self.project)
     if not versions:
         raise HTTPNotFound("The project %s does not exist." % self.project)
     return get_sorted_versions(versions)
Пример #7
0
def project_get(context, request):
    context = ContextWrapper(context)
    try:
        releaselinks = context.stage.get_releaselinks(context.verified_project)
        stage_versions = context.stage.list_versions_perstage(context.verified_project)
    except context.stage.UpstreamError as e:
        log.error(e.msg)
        raise HTTPBadGateway(e.msg)
    version_info = {}
    seen = set()
    for release in releaselinks:
        user, index = release.entrypath.split("/", 2)[:2]
        name, version = release.project, release.version
        if not version or version == 'XXX':
            continue
        seen_key = (user, index, name, version)
        if seen_key in seen:
            continue
        version_info[version] = dict(
            index_title="%s/%s" % (user, index),
            index_url=request.stage_url(user, index),
            title=version,
            url=request.route_url(
                "/{user}/{index}/{project}/{version}",
                user=user, index=index, project=name, version=version),
            docs=None,
            _release=release)
        seen.add(seen_key)
    user = context.username
    index = context.stage.index
    index_title = "%s/%s" % (user, index)
    name = context.verified_project
    index_url = request.stage_url(user, index)
    for version in stage_versions:
        linkstore = context.stage.get_linkstore_perstage(name, version)
        docs = get_docs_info(request, context.stage, linkstore)
        if not docs:
            continue
        if version not in version_info:
            version_info[version] = dict(
                index_title=index_title,
                index_url=index_url,
                title=version,
                url=request.route_url(
                    "/{user}/{index}/{project}/{version}",
                    user=user, index=index, project=name, version=version),
                docs=docs,
                _release=None)
        else:
            version_info[version]['docs'] = docs
    versions = []
    for version in get_sorted_versions(version_info):
        versions.append(version_info[version])
    if hasattr(context.stage, 'get_mirror_whitelist_info'):
        whitelist_info = context.stage.get_mirror_whitelist_info(context.project)
    else:
        whitelist_info = dict(
            has_mirror_base=context.stage.has_mirror_base(context.project),
            blocked_by_mirror_whitelist=None)
    return dict(
        title="%s/: %s versions" % (context.stage.name, context.project),
        blocked_by_mirror_whitelist=whitelist_info['blocked_by_mirror_whitelist'],
        versions=versions)
Пример #8
0
 def _stable_versions(self):
     return get_sorted_versions(self._versions, stable=True)
Пример #9
0
 def _versions(self):
     return get_sorted_versions(self.stage.list_versions_perstage(
         self.project),
                                stable=False)
Пример #10
0
 def versions(self):
     versions = self.stage.list_versions(self.name)
     if not versions:
         raise HTTPNotFound("The project %s does not exist." % self.name)
     return get_sorted_versions(versions)