def prepare(self): package_name = self.kwds['package_name'] xapian_conn = get_connector('xapian') result = xapian_conn.get_package_info(package_name) self.package_name = package_name self.package_info = result latest_build = twc.Variable(default='Koji unavailable') super(Details, self).prepare() if result['name'] == package_name: self.summary = result['summary'] self.description = result['description'] else: for subpkg in result['sub_pkgs']: if subpkg['name'] == package_name: self.summary = subpkg['summary'] self.description = subpkg['description'] break self.package_info = result koji = get_connector('koji') try: builds = koji._koji_client.getLatestBuilds('rawhide', package=result['name']) if builds: self.latest_build = builds[0]['version'] + '-' + \ builds[0]['release'] else: self.latest_build = 'Not built in rawhide' except Exception, e: log.error('Unable to query koji: %s' % str(e))
def prepare(self): super(ContentsWidget, self).prepare() self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') xapian = get_connector('xapian') koji = get_connector('koji') if self.subpackage_of: latest_builds = xapian.get_latest_builds(self.subpackage_of) else: latest_builds = xapian.get_latest_builds(self.package_name) if not latest_builds.get('Rawhide'): return self.default_build_id = latest_builds['Rawhide']['build_id'] self.latest_builds = latest_builds build_ids = [] for build_info in self.latest_builds.values(): build_id = build_info['build_id'] if build_id: build_ids.append(build_id) self.default_build_id = build_ids[0] tasks = koji.get_tasks_for_builds(build_ids) self.repo_to_archtask_map = {} # filter tasks to only contain buildArch tasks for (repo_name, build_info) in self.latest_builds.items(): arch_tasks = [] build_tasks = tasks.get(build_info['build_id'], None) if not build_tasks: continue for subtasks in build_tasks.values(): for task in subtasks: if task['method'] == 'buildArch': arch_tasks.append(task) name = self.package_name version = build_info['version'] release = build_info['release'] arch = task['label'] nvr = "%s-%s-%s" % (name, version, release) filename = "%s.%s.rpm" % (nvr, arch) task['nvr'] = nvr task['filename'] = filename task['package'] = name build_info['arch_tasks'] = arch_tasks self.repo_to_archtask_map[repo_name] = arch_tasks
def prepare(self): super(ContentsWidget, self).prepare() self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') xapian = get_connector('xapian') koji = get_connector('koji') if self.subpackage_of: latest_builds = xapian.get_latest_builds(self.subpackage_of) else: latest_builds = xapian.get_latest_builds(self.package_name) if not latest_builds or not latest_builds.get('Rawhide'): return self.default_build_id = latest_builds['Rawhide']['build_id'] self.latest_builds = latest_builds build_ids = [] for build_info in self.latest_builds.values(): build_id = build_info['build_id'] if build_id: build_ids.append(build_id) self.default_build_id = build_ids[0] tasks = koji.get_tasks_for_builds(build_ids) self.repo_to_archtask_map = {} # filter tasks to only contain buildArch tasks for (repo_name, build_info) in self.latest_builds.items(): arch_tasks = [] build_tasks = tasks.get(build_info['build_id'], None) if not build_tasks: continue for subtasks in build_tasks.values(): for task in subtasks: if task['method'] == 'buildArch': arch_tasks.append(task) name = self.package_name version = build_info['version'] release = build_info['release'] arch = task['label'] nvr = "%s-%s-%s" % (name, version, release) filename = "%s.%s.rpm" % (nvr, arch) task['nvr'] = nvr task['filename'] = filename task['package'] = name build_info['arch_tasks'] = arch_tasks self.repo_to_archtask_map[repo_name] = arch_tasks
def prepare(self): super(ContentsWidget, self).prepare() self.package_name = self.kwds["package_name"] self.subpackage_of = self.kwds.get("subpackage_of", "") xapian = get_connector("xapian") koji = get_connector("koji") if self.subpackage_of: latest_builds = xapian.get_latest_builds(self.subpackage_of) else: latest_builds = xapian.get_latest_builds(self.package_name) if not latest_builds or not latest_builds.get("Rawhide"): return self.default_build_id = latest_builds["Rawhide"]["build_id"] self.latest_builds = latest_builds build_ids = [] for build_info in self.latest_builds.values(): build_id = build_info["build_id"] if build_id: build_ids.append(build_id) self.default_build_id = build_ids[0] tasks = koji.get_tasks_for_builds(build_ids) self.repo_to_archtask_map = {} # filter tasks to only contain buildArch tasks for (repo_name, build_info) in self.latest_builds.items(): arch_tasks = [] build_tasks = tasks.get(build_info["build_id"], None) if not build_tasks: continue for subtasks in build_tasks.values(): for task in subtasks: if task["method"] == "buildArch": arch_tasks.append(task) name = self.package_name version = build_info["version"] release = build_info["release"] arch = task["label"] nvr = "%s-%s-%s" % (name, version, release) filename = "%s.%s.rpm" % (nvr, arch) task["nvr"] = nvr task["filename"] = filename task["package"] = name build_info["arch_tasks"] = arch_tasks self.repo_to_archtask_map[repo_name] = arch_tasks
def prepare(self): # Signify that we haven't loaded any bugs yet. self.total_rows = -1 releases = [] self.filters = {'package': self.package} pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) value = str(ver) if ver == 'devel': name = 'Rawhide' ver = 9999999 label = 'Rawhide' value = 'rawhide' if name in ('Fedora', 'Rawhide', 'Fedora EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver }) def _sort(a, b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases super(BugsGrid, self).prepare()
def prepare(self): releases = [] self.filters = {'package': self.package} pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) value = str(ver) if ver == 'devel': name = 'Rawhide' ver = 9999999 label = 'Rawhide' value = 'rawhide' if name in ('Fedora', 'Rawhide', 'Fedora EPEL'): releases.append({'label': label, 'value': value, 'version': ver}) def _sort(a,b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases super(BugsGrid, self).prepare()
def prepare(self): super(ReleaseFilter, self).prepare() releases = [] top_repo = os.path.join(config.get('git_repo_path'), self.package) bodhi = get_connector('bodhi') for collection in bodhi.get_all_releases(): if collection['state'] != 'current': continue name = collection['id_prefix'] ver = collection['version'] label = collection['long_name'] value = "" branchname = collection['branch'] if branchname: repo_path = os.path.join(top_repo, branchname) if not os.path.isdir(repo_path): continue value = branchname if label != 'Fedora devel' and name in ('FEDORA', 'FEDORA-EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver, }) self.releases_table = sorted(releases, reverse=True, cmp=lambda x, y: cmp(x['version'], y['version'])) self.releases_table.insert(0, {'label': 'Rawhide', 'value': 'master'})
def prepare(self): # Signify that we haven't loaded any bugs yet. self.total_rows = -1 releases = [] self.filters = {'package': self.package} bodhi = get_connector('bodhi') for collection in bodhi.get_all_releases(): if collection['state'] != 'current': continue name = collection['id_prefix'] ver = collection['version'] label = collection['long_name'] value = str(ver) if name in ('FEDORA', 'Rawhide', 'FEDORA-EPEL'): releases.append({'label': label, 'value': value, 'version': ver}) releases.append({'label': 'Rawhide', 'value': 'rawhide', 'version': 9999999}) def _sort(a,b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases super(BugsGrid, self).prepare()
def poll(self): self.log.info("Cached cla_done graph") stats_cache = Shove(config.get('stats_cache')) fas_connector = get_connector('fas') data = fas_connector.group_membership_over_time() stats_cache['group_membership_cla_done'] = data return True
def prepare(self): # Signify that we haven't loaded any bugs yet. self.total_rows = -1 releases = [] self.filters = {"package": self.package} pkgdb = get_connector("pkgdb") collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection["name"] ver = collection["version"] label = "%s %s" % (name, ver) value = str(ver) if ver == "devel": name = "Rawhide" ver = 9999999 label = "Rawhide" value = "rawhide" if name in ("Fedora", "Rawhide", "Fedora EPEL"): releases.append({"label": label, "value": value, "version": ver}) def _sort(a, b): return cmp(int(b["version"]), int(a["version"])) releases.sort(_sort) self.release_table = releases super(BugsGrid, self).prepare()
def prepare(self): super(ReleaseFilter, self).prepare() releases = [] top_repo = os.path.join(config.get('git_repo_path'), self.package) pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.iteritems(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) value = "" branchname = collection['gitbranchname'] if branchname: repo_path = os.path.join(top_repo, branchname) if not os.path.isdir(repo_path): continue value = branchname if label != 'Fedora devel' and name in ('Fedora', 'Fedora EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver, }) self.releases_table = sorted( releases, reverse=True, cmp=lambda x, y: cmp(x['version'], y['version'])) self.releases_table.insert(0, {'label': 'Rawhide', 'value': 'master'})
def prepare(self): super(ReleaseFilter, self).prepare() releases = [] top_repo = os.path.join(config.get('git_repo_path'), self.package) pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.iteritems(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) value = "" branchname = collection['branchname'] if branchname: repo_path = os.path.join(top_repo, branchname) if not os.path.isdir(repo_path): continue value = branchname if label != 'Fedora devel' and name in ('Fedora', 'Fedora EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver, }) self.releases_table = sorted(releases, reverse=True, cmp=lambda x, y: cmp(x['version'], y['version'])) self.releases_table.insert(0, {'label': 'Rawhide', 'value': 'master'})
def prepare(self): self.package_name = self.kwds["package_name"] self.subpackage_of = self.kwds.get("subpackage_of", "") main_pkg = self.package_name if self.subpackage_of: main_pkg = self.subpackage_of self.filters = {"package": main_pkg} self.rows_per_page = 10 releases = [] pkgdb = get_connector("pkgdb") collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection["name"] ver = collection["version"] label = "%s %s" % (name, ver) branchname = collection["gitbranchname"] value = "" if branchname: value = branchname if label != "Fedora devel" and name in ("Fedora", "Fedora EPEL"): releases.append({"label": label, "value": value, "version": ver}) def _sort(a, b): return cmp(int(b["version"]), int(a["version"])) releases.sort(_sort) self.release_table = releases # Must do this last for our Grids super(Updates, self).prepare()
def prepare(self): name = self.args.pop(0) self.kwds['package_name'] = name self.kwds['subpackage_of'] = "" self.package_name = name xapian_conn = get_connector('xapian') result = xapian_conn.get_package_info(name) self.package_info = result super(PackageWidget, self).prepare() if not result: tg.redirect('/s/' + name) if result['name'] == name: self.summary = result['summary'] self.description = result['description'] else: self.kwds['subpackage_of'] = result['name'] for subpkg in result['sub_pkgs']: if subpkg['name'] == name: self.summary = subpkg['summary'] self.description = subpkg['description'] break else: tg.redirect('/s/' + name)
def prepare(self): self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') xapian = get_connector('xapian') if self.subpackage_of: latest_builds = xapian.get_latest_builds(self.subpackage_of) else: latest_builds = xapian.get_latest_builds(self.package_name) self.default_build_id = latest_builds['Rawhide']['build_id'] self.latest_builds = latest_builds
def prepare(self): name = self.args.pop(0) self.kwds['package_name'] = name self.kwds['subpackage_of'] = "" self.package_name = name xapian_conn = get_connector('xapian') result = xapian_conn.get_package_info(name) self.package_info = result super(PackageWidget, self).prepare() if not result: tg.redirect('/s/' + name) if result['name'] == name: self.summary = result['summary'] self.description = result['description'] else: self.kwds['subpackage_of'] = result['name'] for subpkg in result['sub_pkgs']: if subpkg['name'] == name: self.summary = subpkg['summary'] self.description = subpkg['description'] break else: tg.redirect('/s/' + name) koji = get_connector('koji') try: builds = koji._koji_client.getLatestBuilds('rawhide', package=result['name']) if builds: self.latest_build = builds[0]['version'] + '-' + \ builds[0]['release'] else: self.latest_build = 'Not built in rawhide' except Exception, e: log.error('Unable to query koji: %s' % str(e))
def prepare(self): super(Details, self).prepare() package_name = self.kwds['package_name'] xapian_conn = get_connector('xapian') result = xapian_conn.get_package_info(package_name) if result['name'] == package_name: self.summary = result['summary'] self.description = result['description'] else: for subpkg in result['sub_pkgs']: if subpkg['name'] == package_name: self.summary = subpkg['summary'] self.description = subpkg['description'] break self.package_info = result
def prepare(self): package_name = self.kwds["package_name"] xapian_conn = get_connector("xapian") result = xapian_conn.get_package_info(package_name) self.package_name = package_name self.package_info = result super(Details, self).prepare() if result["name"] == package_name: self.summary = result["summary"] self.description = result["description"] else: for subpkg in result["sub_pkgs"]: if subpkg["name"] == package_name: self.summary = subpkg["summary"] self.description = subpkg["description"] break self.package_info = result
def prepare(self): super(ReleaseFilter, self).prepare() releases = [] top_repo = os.path.join(config.get("git_repo_path"), self.package) pkgdb = get_connector("pkgdb") collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.iteritems(): name = collection["name"] ver = collection["version"] label = "%s %s" % (name, ver) value = "" branchname = collection["gitbranchname"] if branchname: repo_path = os.path.join(top_repo, branchname) if not os.path.isdir(repo_path): continue value = branchname if label != "Fedora devel" and name in ("Fedora", "Fedora EPEL"): releases.append({"label": label, "value": value, "version": ver}) self.releases_table = sorted(releases, reverse=True, cmp=lambda x, y: cmp(x["version"], y["version"])) self.releases_table.insert(0, {"label": "Rawhide", "value": "master"})
def prepare(self): self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') self.total_rows = -1 main_pkg = self.package_name if self.subpackage_of: main_pkg = self.subpackage_of self.filters = {'package': main_pkg} self.rows_per_page = 10 releases = [] bodhi = get_connector('bodhi') for collection in bodhi.get_all_releases(): if collection['state'] != 'current': continue name = collection['id_prefix'] ver = collection['version'] label = collection['long_name'] branchname = collection['branch'] value = "" if branchname: value = branchname if label != 'Fedora devel' and name in ('FEDORA', 'FEDORA-EPEL' ): releases.append({ 'label': label, 'value': value, 'version': ver, }) def _sort(a,b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases # Must do this last for our Grids super(Updates, self).prepare()
def prepare(self): self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') self.total_rows = -1 main_pkg = self.package_name if self.subpackage_of: main_pkg = self.subpackage_of self.filters = {'package': main_pkg} self.rows_per_page = 10 releases = [] bodhi = get_connector('bodhi') for collection in bodhi.get_all_releases(): if collection['state'] != 'current': continue name = collection['id_prefix'] ver = collection['version'] label = collection['long_name'] branchname = collection['branch'] value = "" if branchname: value = branchname if label != 'Fedora devel' and name in ('FEDORA', 'FEDORA-EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver, }) def _sort(a, b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases # Must do this last for our Grids super(Updates, self).prepare()
def prepare(self): self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') main_pkg = self.package_name if self.subpackage_of: main_pkg = self.subpackage_of self.filters = {'package': main_pkg} self.rows_per_page = 10 releases = [] pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) branchname = collection['branchname'] value = "" if branchname: value = branchname if label != 'Fedora devel' and name in ('Fedora', 'Fedora EPEL' ): releases.append({ 'label': label, 'value': value, 'version': ver, }) def _sort(a,b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases # Must do this last for our Grids super(Updates, self).prepare()
def prepare(self): self.package_name = self.kwds['package_name'] self.subpackage_of = self.kwds.get('subpackage_of', '') main_pkg = self.package_name if self.subpackage_of: main_pkg = self.subpackage_of self.filters = {'package': main_pkg} self.rows_per_page = 10 releases = [] pkgdb = get_connector('pkgdb') collections = pkgdb.get_collection_table(active_only=True) for id, collection in collections.items(): name = collection['name'] ver = collection['version'] label = "%s %s" % (name, ver) branchname = collection['gitbranchname'] value = "" if branchname: value = branchname if label != 'Fedora devel' and name in ('Fedora', 'Fedora EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver, }) def _sort(a, b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases # Must do this last for our Grids super(Updates, self).prepare()
def prepare(self): # Signify that we haven't loaded any bugs yet. self.total_rows = -1 releases = [] self.filters = {'package': self.package} bodhi = get_connector('bodhi') for collection in bodhi.get_all_releases(): if collection['state'] != 'current': continue name = collection['id_prefix'] ver = collection['version'] label = collection['long_name'] value = str(ver) if name in ('FEDORA', 'Rawhide', 'FEDORA-EPEL'): releases.append({ 'label': label, 'value': value, 'version': ver }) releases.append({ 'label': 'Rawhide', 'value': 'rawhide', 'version': 9999999 }) def _sort(a, b): return cmp(int(b['version']), int(a['version'])) releases.sort(_sort) self.release_table = releases super(BugsGrid, self).prepare()
def query_active_releases(self, filters=None, **params): releases = list() queries = list() # Mapping of tag -> release release_tag = dict() # List of testing builds to query bodhi for testing_builds = list() # nvr -> release lookup table testing_builds_row = dict() if not filters: filters = dict() filters = self._query_updates_filter.filter(filters, conn=self) package = filters.get('package') koji = get_connector('koji')._koji_client koji.multicall = True releases_all = self.get_all_releases() releases_all.append({ 'dist_tag': 'rawhide', 'long_name': 'Rawhide', 'stable_tag': 'rawhide', 'testing_tag': 'no_testing_tag_found', 'state': 'current' }) releases_all = sorted(releases_all, key=lambda k: k['dist_tag'], reverse=True) for release in releases_all: if release['state'] not in ['current', 'pending']\ or 'Modular' in release['long_name']: continue tag = release['dist_tag'] name = release['long_name'] r = { 'release': name, 'stable_version': 'None', 'testing_version': 'None' } if tag == 'rawhide': koji.listTagged(tag, package=package, latest=True, inherit=True) queries.append(tag) release_tag[tag] = r else: stable_tag = release['stable_tag'] testing_tag = release['testing_tag'] koji.listTagged(stable_tag, package=package, latest=True, inherit=True) queries.append(stable_tag) release_tag[stable_tag] = r koji.listTagged(testing_tag, package=package, latest=True) queries.append(testing_tag) release_tag[testing_tag] = r releases.append(r) results = koji.multiCall() for i, result in enumerate(results): if isinstance(result, dict): if 'faultString' in result: log.error("FAULT: %s" % result['faultString']) else: log.error("Can't find fault string in result: %s" % result) else: query = queries[i] row = release_tag[query] release = result[0] if query == 'dist-rawhide': if release: nvr = parse_build(release[0]['nvr']) row['stable_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) else: row['stable_version'] = \ 'No builds tagged with %s' % tag row['testing_version'] = HTML.tag('i', c='Not Applicable') continue if release: release = release[0] if query.endswith('-testing'): nvr = parse_build(release['nvr']) row['testing_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) testing_builds.append(release['nvr']) testing_builds_row[release['nvr']] = row else: # stable nvr = parse_build(release['nvr']) row['stable_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) if release['tag_name'].endswith('-updates'): row['stable_version'] += ' (' + HTML.tag( 'a', c='update', href='%s/updates/?builds=%s' % (self._prod_url, nvr['nvr'])) + ')' # If there are updates in testing, then query bodhi with a single call if testing_builds: data = self.call('updates', {'builds': ' '.join(testing_builds)}) updates = data['updates'] for up in updates: for build in up['builds']: if build['nvr'] in testing_builds: break else: continue build = build['nvr'] if up.karma > 1: up.karma_icon = 'good' elif up.karma < 0: up.karma_icon = 'bad' else: up.karma_icon = 'meh' karma_ico_16 = '/images/16_karma-%s.png' % up.karma_icon karma_icon_url = \ self._request.environ.get('SCRIPT_NAME', '') + \ karma_ico_16 karma = 'karma_%s' % up.karma_icon row = testing_builds_row[build] row['testing_version'] += " " + HTML.tag( 'div', c=HTML.tag('a', href="%s/updates/%s" % (self._prod_url, up.alias), c=HTML.tag('img', src=karma_icon_url) + HTML.tag('span', c='%s karma' % up.karma)), **{'class': '%s' % karma}) return (len(releases), releases)
def query_active_releases(self, filters=None, **params): releases = [] queries = [] release_tag = {} # Mapping of tag -> release testing_builds = [] # List of testing builds to query bodhi for testing_builds_row = {} # nvr -> release lookup table if not filters: filters = {} filters = self._query_updates_filter.filter(filters, conn=self) package = filters.get('package') pkgdb = get_connector('pkgdb') koji = get_connector('koji')._koji_client koji.multicall = True for release in pkgdb.get_fedora_releases(): #Tag is really koji_name in this context, not disttag tag = release[2] name = release[1] r = { 'release': name, 'stable_version': 'None', 'testing_version': 'None' } if tag == 'rawhide': koji.listTagged(tag, package=package, latest=True, inherit=True) queries.append(tag) release_tag[tag] = r else: if tag.endswith('epel'): stable_tag = tag testing_tag = tag + '-testing' else: stable_tag = tag + '-updates' testing_tag = stable_tag + '-testing' koji.listTagged(stable_tag, package=package, latest=True, inherit=True) queries.append(stable_tag) release_tag[stable_tag] = r koji.listTagged(testing_tag, package=package, latest=True) queries.append(testing_tag) release_tag[testing_tag] = r releases.append(r) results = koji.multiCall() for i, result in enumerate(results): if isinstance(result, dict): if 'faultString' in result: log.error("FAULT: %s" % result['faultString']) else: log.error("Can't find fault string in result: %s" % result) else: query = queries[i] row = release_tag[query] release = result[0] if query == 'dist-rawhide': if release: nvr = parse_build(release[0]['nvr']) row['stable_version'] = '%(version)s-%(release)s' % nvr else: row['stable_version'] = 'No builds tagged with %s' % tag row['testing_version'] = HTML.tag('i', c='Not Applicable') continue if release: release = release[0] if query.endswith('-testing'): nvr = parse_build(release['nvr']) row['testing_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href='%s/%s' % (self._prod_url, nvr['nvr'])) testing_builds.append(release['nvr']) testing_builds_row[release['nvr']] = row else: # stable nvr = parse_build(release['nvr']) if release['tag_name'].endswith('-updates'): row['stable_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href='%s/%s' % (self._prod_url, nvr['nvr'])) else: row['stable_version'] = '%(version)s-%(release)s' % nvr # If there are updates in testing, then query bodhi with a single call if testing_builds: updates = self.call('get_updates_from_builds', {'builds': ' '.join(testing_builds)}) if updates[1]: for build in updates[1]: if build == 'tg_flash': continue up = updates[1][build] if up.karma > 1: up.karma_icon = 'good' elif up.karma < 0: up.karma_icon = 'bad' else: up.karma_icon = 'meh' karma_icon_url = self._request.environ.get('SCRIPT_NAME', '') + \ '/images/16_karma-%s.png' % up.karma_icon karma = 'karma_%s' % up.karma_icon row = testing_builds_row[build] row['testing_version'] += HTML.tag( 'div', c=HTML.tag('a', href="%s/%s" % (self._prod_url, up.title), c=HTML.tag('img', src=karma_icon_url) + HTML.tag('span', c='%s karma' % up.karma)), **{'class': '%s' % karma}) return (len(releases), releases)
def query_builds(self, start_row=None, rows_per_page=10, order=-1, sort_col=None, filters=None, **params): if not filters: filters = {} filters = self._query_builds_filter.filter(filters, conn=self) username = filters.get('user', '') package = filters.get('package', '') state = filters.get('state') complete_before = None complete_after = None # need a better way to specify this # completed_filter = filters.get('completed') # if completed_filter: # if completed_filter['op'] in ('>', 'after'): # complete_after = completed_filter['value'] # elif completed_filter['op'] in ('<', 'before'): # complete_before = completed_filter['value'] if order < 0: order = '-' + sort_col else: order = sort_col user = None id = None if username: user = self._koji_client.getUser(username) # we need to check if this user exists if username and not user: return (0, []) id = user['id'] pkg_id = None if package: pkg_id = self._koji_client.getPackageID(package) queryOpts = None if state: try: state = int(state) except ValueError: state_list = [] for value in state.split(','): state_list.append(int(value)) state = state_list elif state == '': state = None qo = {} if not (start_row is None): qo['offset'] = int(start_row) if not (rows_per_page is None): qo['limit'] = int(rows_per_page) if order: qo['order'] = order if qo: queryOpts = qo countQueryOpts = {'countOnly': True} self._koji_client.multicall = True self._koji_client.listBuilds(packageID=pkg_id, userID=id, state=state, completeBefore=complete_before, completeAfter=complete_after, queryOpts=countQueryOpts) self._koji_client.listBuilds(packageID=pkg_id, userID=id, state=state, completeBefore=complete_before, completeAfter=complete_after, queryOpts=queryOpts) results = self._koji_client.multiCall() builds_list = results[1][0] total_count = results[0][0] for b in builds_list: state = b['state'] b['state_str'] = koji.BUILD_STATES[state].lower() start = DateTimeDisplay(b['creation_time']) complete = b['completion_time'] completion_display = None if not complete: completion_display = { 'when': 'In progress...', 'should_display_time': False, 'time': '', } completion_display['elapsed'] = start.age(granularity='minute') else: completion_display = {} complete = DateTimeDisplay(b['completion_time']) completion_display['elapsed'] = start.age(complete, granularity='minute') completion_display['when'] = complete.age( granularity='minute', general=True) + ' ago' ident = self._request.environ.get('repoze.who.identity') if ident: username = ident.get('repoze.who.userid') tz = ident['person']['timezone'] completion_display['time'] = \ complete.astimezone(tz).strftime('%I:%M %p %Z') else: completion_display['time'] = \ complete.datetime.strftime('%I:%M %p') + ' UTC' b['completion_time_display'] = completion_display # Query the bodhi update status for each build if filters.get('query_updates'): bodhi = get_connector('bodhi') bodhi.add_updates_to_builds(builds_list) self._koji_client.multicall = False return (total_count, builds_list)
def query_active_releases(self, filters=None, **params): releases = list() queries = list() # Mapping of tag -> release release_tag = dict() # List of testing builds to query bodhi for testing_builds = list() # nvr -> release lookup table testing_builds_row = dict() if not filters: filters = dict() filters = self._query_updates_filter.filter(filters, conn=self) package = filters.get('package') koji = get_connector('koji')._koji_client koji.multicall = True releases_all = self.get_all_releases() releases_all.append({'dist_tag': 'rawhide', 'long_name':'Rawhide', 'stable_tag': 'rawhide', 'testing_tag': 'no_testing_tag_found', 'state': 'current'}) releases_all = sorted(releases_all, key=lambda k: k['dist_tag'], reverse=True) for release in releases_all: if release['state'] not in ['current', 'pending']\ or 'Modular' in release['long_name']: continue tag = release['dist_tag'] name = release['long_name'] r = {'release': name, 'stable_version': 'None', 'testing_version': 'None'} if tag == 'rawhide': koji.listTagged( tag, package=package, latest=True, inherit=True) queries.append(tag) release_tag[tag] = r else: stable_tag = release['stable_tag'] testing_tag = release['testing_tag'] koji.listTagged(stable_tag, package=package, latest=True, inherit=True) queries.append(stable_tag) release_tag[stable_tag] = r koji.listTagged(testing_tag, package=package, latest=True) queries.append(testing_tag) release_tag[testing_tag] = r releases.append(r) results = koji.multiCall() for i, result in enumerate(results): if isinstance(result, dict): if 'faultString' in result: log.error("FAULT: %s" % result['faultString']) else: log.error("Can't find fault string in result: %s" % result) else: query = queries[i] row = release_tag[query] release = result[0] if query == 'dist-rawhide': if release: nvr = parse_build(release[0]['nvr']) row['stable_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) else: row['stable_version'] = \ 'No builds tagged with %s' % tag row['testing_version'] = HTML.tag('i', c='Not Applicable') continue if release: release = release[0] if query.endswith('-testing'): nvr = parse_build(release['nvr']) row['testing_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) testing_builds.append(release['nvr']) testing_builds_row[release['nvr']] = row else: # stable nvr = parse_build(release['nvr']) row['stable_version'] = HTML.tag( 'a', c='%(version)s-%(release)s' % nvr, href=koji_build_url % nvr) if release['tag_name'].endswith('-updates'): row['stable_version'] += ' (' + HTML.tag( 'a', c='update', href='%s/updates/?builds=%s' % ( self._prod_url, nvr['nvr'] ) ) + ')' # If there are updates in testing, then query bodhi with a single call if testing_builds: data = self.call('updates', { 'builds': ' '.join(testing_builds) }) updates = data['updates'] for up in updates: for build in up['builds']: if build['nvr'] in testing_builds: break else: continue build = build['nvr'] if up.karma > 1: up.karma_icon = 'good' elif up.karma < 0: up.karma_icon = 'bad' else: up.karma_icon = 'meh' karma_ico_16 = '/images/16_karma-%s.png' % up.karma_icon karma_icon_url = \ self._request.environ.get('SCRIPT_NAME', '') + \ karma_ico_16 karma = 'karma_%s' % up.karma_icon row = testing_builds_row[build] row['testing_version'] += " " + HTML.tag( 'div', c=HTML.tag( 'a', href="%s/updates/%s" % ( self._prod_url, up.alias), c=HTML.tag( 'img', src=karma_icon_url) + HTML.tag( 'span', c='%s karma' % up.karma)), **{'class': '%s' % karma}) return (len(releases), releases)
def query_active_releases(self, filters=None, **params): releases = [] queries = [] release_tag = {} # Mapping of tag -> release testing_builds = [] # List of testing builds to query bodhi for testing_builds_row = {} # nvr -> release lookup table if not filters: filters = {} filters = self._query_updates_filter.filter(filters, conn=self) package = filters.get('package') pkgdb = get_connector('pkgdb') koji = get_connector('koji')._koji_client koji.multicall = True for release in pkgdb.get_fedora_releases(): #Tag is really koji_name in this context, not disttag tag = release[2] name = release[1] r = {'release': name, 'stable_version': 'None', 'testing_version': 'None'} if tag == 'rawhide': koji.listTagged(tag, package=package, latest=True, inherit=True) queries.append(tag) release_tag[tag] = r else: if tag.endswith('epel'): stable_tag = tag testing_tag = tag + '-testing' else: stable_tag = tag + '-updates' testing_tag = stable_tag + '-testing' koji.listTagged(stable_tag, package=package, latest=True, inherit=True) queries.append(stable_tag) release_tag[stable_tag] = r koji.listTagged(testing_tag, package=package, latest=True) queries.append(testing_tag) release_tag[testing_tag] = r releases.append(r) results = koji.multiCall() for i, result in enumerate(results): if isinstance(result, dict): if 'faultString' in result: log.error("FAULT: %s" % result['faultString']) else: log.error("Can't find fault string in result: %s" % result) else: query = queries[i] row = release_tag[query] release = result[0] if query == 'dist-rawhide': if release: nvr = parse_build(release[0]['nvr']) row['stable_version'] = '%(version)s-%(release)s' % nvr else: row['stable_version'] = 'No builds tagged with %s' % tag row['testing_version'] = HTML.tag('i', c='Not Applicable') continue if release: release = release[0] if query.endswith('-testing'): nvr = parse_build(release['nvr']) row['testing_version'] = HTML.tag('a', c='%(version)s-%(release)s' % nvr, href='%s/%s' % (self._prod_url, nvr['nvr'])) testing_builds.append(release['nvr']) testing_builds_row[release['nvr']] = row else: # stable nvr = parse_build(release['nvr']) if release['tag_name'].endswith('-updates'): row['stable_version'] = HTML.tag('a', c='%(version)s-%(release)s' % nvr, href='%s/%s' % (self._prod_url, nvr['nvr'])) else: row['stable_version'] = '%(version)s-%(release)s' % nvr # If there are updates in testing, then query bodhi with a single call if testing_builds: updates = self.call('get_updates_from_builds', { 'builds': ' '.join(testing_builds) }) if updates[1]: for build in updates[1]: if build == 'tg_flash': continue up = updates[1][build] if up.karma > 1: up.karma_icon = 'good' elif up.karma < 0: up.karma_icon = 'bad' else: up.karma_icon = 'meh' karma_icon_url = self._request.environ.get('SCRIPT_NAME', '') + \ '/images/16_karma-%s.png' % up.karma_icon karma = 'karma_%s' % up.karma_icon row = testing_builds_row[build] row['testing_version'] += HTML.tag('div', c=HTML.tag('a', href="%s/%s" % ( self._prod_url, up.title), c=HTML.tag('img', src=karma_icon_url) + HTML.tag('span', c='%s karma' % up.karma)), **{'class': '%s' %karma}) return (len(releases), releases)
def query_builds(self, start_row=None, rows_per_page=10, order=-1, sort_col=None, filters=None, **params): if not filters: filters = {} filters = self._query_builds_filter.filter(filters, conn=self) username = filters.get('user', '') package = filters.get('package', '') state = filters.get('state') complete_before = None complete_after = None # need a better way to specify this # completed_filter = filters.get('completed') # if completed_filter: # if completed_filter['op'] in ('>', 'after'): # complete_after = completed_filter['value'] # elif completed_filter['op'] in ('<', 'before'): # complete_before = completed_filter['value'] if order < 0: order = '-' + sort_col else: order = sort_col user = None id = None if username: user = self._koji_client.getUser(username) # we need to check if this user exists if username and not user: return (0, []) id = user['id'] pkg_id = None if package: pkg_id = self._koji_client.getPackageID(package) queryOpts = None if state: try: state = int(state) except ValueError: state_list = [] for value in state.split(','): state_list.append(int(value)) state = state_list elif state == '': state = None qo = {} if not (start_row is None): qo['offset'] = int(start_row) if not (rows_per_page is None): qo['limit'] = int(rows_per_page) if order: qo['order'] = order if qo: queryOpts = qo countQueryOpts = {'countOnly': True} self._koji_client.multicall = True self._koji_client.listBuilds( packageID=pkg_id, userID=id, state=state, completeBefore=complete_before, completeAfter=complete_after, queryOpts=countQueryOpts) self._koji_client.listBuilds( packageID=pkg_id, userID=id, state=state, completeBefore=complete_before, completeAfter=complete_after, queryOpts=queryOpts) results = self._koji_client.multiCall() builds_list = results[1][0] total_count = results[0][0] for b in builds_list: state = b['state'] b['state_str'] = koji.BUILD_STATES[state].lower() start = DateTimeDisplay(b['creation_time']) complete = b['completion_time'] completion_display = None if not complete: completion_display = { 'when': 'In progress...', 'should_display_time': False, 'time': '', } completion_display['elapsed'] = start.age(granularity='minute') else: completion_display = {} complete = DateTimeDisplay(b['completion_time']) completion_display['elapsed'] = start.age( complete, granularity='minute') completion_display['when'] = complete.age( granularity='minute', general=True) + ' ago' ident = self._request.environ.get('repoze.who.identity') if ident: username = ident.get('repoze.who.userid') tz = ident['person']['timezone'] completion_display['time'] = \ complete.astimezone(tz).strftime('%I:%M %p %Z') else: completion_display['time'] = \ complete.datetime.strftime('%I:%M %p') + ' UTC' b['completion_time_display'] = completion_display # Query the bodhi update status for each build if filters.get('query_updates'): bodhi = get_connector('bodhi') bodhi.add_updates_to_builds(builds_list) self._koji_client.multicall = False return (total_count, builds_list)