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]
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
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'])
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
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'))