예제 #1
0
    def get_remote(self, repo_id=None, cache=False):
        if not repo_id:
            repo_id = self._def_repo_id()
        if cache and repo_id in self.__cache:
            log.debug("Using cached results for %s", repo_id)
            return self.__cache.get(repo_id)

        log.debug("Retrieving available plugins from repo %s", repo_id)

        p = pbi.PBI()
        p.pbid(flags=pbi.PBID_FLAGS_REFRESH, sync=True)

        results = p.browser(repo_id=repo_id, flags=pbi.PBI_BROWSER_FLAGS_VIEWALL)
        if not results:
            log.debug(
                "No results returned for repo %s", repo_id
            )
            return results

        plugins = []
	results.sort(key=lambda x: x['Application'].lower())

        for p in results:
            try:
                index_entry = self.get_index_entry(
                    repo_id,
                    application=p['Application'],
                    arch=p['Arch'],
                    version=p['Version']
                )
                if not index_entry:
                    log.debug("not index entry found for %s", p['Application'])
                    continue

                urls = self.get_mirror_urls(repo_id)

                item = self._get_remote_item(repo_id, p, index_entry, urls)
                if item is False:
                    log.debug("unable to create plugin for %s", p['Application'])
                    continue

                plugins.append(item)
            except Exception as e:
                log.debug("Failed to get remote item: %s", e)

        self.__cache[repo_id] = plugins
        return plugins
예제 #2
0
파일: plugin.py 프로젝트: culot/freenas
    def get_remote(self, repo_id=None, cache=False):
        if not repo_id:
            repo_id = self._def_repo_id()
        if cache and repo_id in self.__cache:
            log.debug("Using cached results for %s", repo_id)
            return self.__cache.get(repo_id)

        log.debug("Retrieving available plugins from repo %s", repo_id)

        p = pbi.PBI()
        p.pbid(flags=pbi.PBID_FLAGS_REFRESH, sync=True)

        results = p.browser(repo_id=repo_id,
                            flags=pbi.PBI_BROWSER_FLAGS_VIEWALL)
        if not results:
            log.debug("No results returned for repo %s", repo_id)
            return results

        plugins = []
        results.sort(key=lambda x: x['Application'].lower())

        for p in results:
            try:
                index_entry = self.get_index_entry(
                    repo_id,
                    application=p['Application'],
                    arch=p['Arch'],
                    version=p['Version'])
                if not index_entry:
                    log.debug("not index entry found for %s", p['Application'])
                    continue

                urls = self.get_mirror_urls(repo_id)

                item = self._get_remote_item(repo_id, p, index_entry, urls)
                if item is False:
                    log.debug("unable to create plugin for %s",
                              p['Application'])
                    continue

                plugins.append(item)
            except Exception as e:
                log.debug("Failed to get remote item: %s", e)

        self.__cache[repo_id] = plugins
        return plugins