Example #1
0
 def get_versiondata(self, stage, data):
     path = data['path']
     version = data.get('version')
     key = (path, version)
     if key not in self._metadata:
         name = data['name']
         metadata = {}
         if version and is_project_cached(stage, name):
             metadata = stage.get_versiondata(name, version)
             if metadata is None:
                 metadata = {}
         self._metadata[key] = metadata
     return self._metadata[key]
Example #2
0
File: views.py Project: t-8ch/devpi
 def get_versiondata(self, stage, data):
     path = data['path']
     version = data.get('version')
     key = (path, version)
     if key not in self._metadata:
         name = data['name']
         metadata = {}
         if version and is_project_cached(stage, name):
             metadata = stage.get_versiondata(name, version)
             if metadata is None:
                 metadata = {}
         self._metadata[key] = metadata
     return self._metadata[key]
Example #3
0
 def search_index_packages(self, query):
     search_index = self.request.registry['search_index']
     result = search_index.query_projects(query, page=None)
     context = ContextWrapper(self.request.context)
     sro = dict((x.name, i) for i, x in enumerate(context.stage.sro()))
     # first gather basic info and only get most relevant info based on
     # stage resolution order
     name2stage = {}
     name2data = {}
     for item in result['items']:
         data = item['data']
         path = data['path']
         stage = self.get_stage(path)
         if stage is None:
             continue
         if stage.name not in sro:
             continue
         name = data['name']
         current_stage = name2stage.get(name)
         if current_stage is None or sro[stage.name] < sro[
                 current_stage.name]:
             name2stage[name] = stage
             try:
                 score = item['score']
             except KeyError:
                 score = False
                 sub_hits = item.get('sub_hits')
                 if sub_hits:
                     score = sub_hits[0].get('score', False)
             name2data[name] = dict(version=data.get('version', ''),
                                    score=score)
     # then gather more info if available and build results
     hits = []
     for name, stage in name2stage.items():
         data = name2data[name]
         version = data['version']
         if version and is_project_cached(stage, name):
             metadata = stage.get_versiondata(name, version)
             version = metadata.get('version', version)
             summary = metadata.get('summary', '')
         else:
             summary = ''
         hits.append(
             dict(name="/%s/%s" % (stage.name, name),
                  summary=summary,
                  version=version,
                  _pypi_ordering=data['score']))
     return hits
Example #4
0
def devpiserver_on_changed_versiondata(stage, project, version, metadata):
    if stage is None:
        # TODO we don't have enough info to delete the project
        return
    if not metadata:
        if is_project_cached(stage, project) and not stage.has_project_perstage(project):
            delete_project(stage, project)
            return
        versions = stage.list_versions(project)
        if versions:
            version = get_latest_version(versions)
            if version:
                threadlog.debug("A version of %s was deleted, using latest version %s for indexing" % (
                    project, version))
                metadata = stage.get_versiondata(project, version)
    if metadata:
        index_project(stage, metadata['name'])
Example #5
0
 def _search_packages(self, query, sro):
     result = self.query_projects(query, page=None)
     # first gather basic info and only get most relevant info based on
     # stage resolution order
     stagename2order = {x.name: i for i, x in enumerate(sro)}
     stagename2stage = {x.name: x for x in sro}
     name2stage = {}
     name2data = {}
     for item in result['items']:
         data = item['data']
         (user, index, name) = data['path'][1:].split('/')
         stage = stagename2stage.get('%s/%s' % (user, index))
         if stage is None:
             continue
         current_stage = name2stage.get(name)
         if current_stage is None or stagename2order[
                 stage.name] < stagename2order[current_stage.name]:
             name2stage[name] = stage
             try:
                 score = item['score']
             except KeyError:
                 score = False
                 sub_hits = item.get('sub_hits')
                 if sub_hits:
                     score = sub_hits[0].get('score', False)
             name2data[name] = dict(version=data.get('version', ''),
                                    score=score)
     # then gather more info if available and build results
     hits = []
     for name, stage in name2stage.items():
         data = name2data[name]
         version = data['version']
         summary = '[%s]' % stage.name
         if version and is_project_cached(stage, name):
             metadata = stage.get_versiondata(name, version)
             version = metadata.get('version', version)
             summary += ' %s' % metadata.get('summary', '')
         hits.append(
             dict(name=name,
                  summary=summary,
                  version=version,
                  _pypi_ordering=data['score']))
     return hits
Example #6
0
 def query_packages(self, searchinfo, sro):
     hits = []
     matcher = self._matcher(searchinfo)
     found = set()
     for stage in sro:
         names = stage.list_projects_perstage()
         for name in names:
             if matcher(name) is None:
                 continue
             if name in found:
                 continue
             found.add(name)
             version = ''
             summary = '[%s]' % stage.name
             if is_project_cached(stage, name):
                 version = stage.get_latest_version(name)
                 metadata = stage.get_versiondata(name, version)
                 summary += ' %s' % metadata.get('summary', '')
             hits.append(dict(
                 name=name, summary=summary.strip(), version=version,
                 _pypi_ordering=0))
     return sorted(hits, key=itemgetter('name'))