def handle_monitor_toggle(self, msg): status = msg['msg']['status'] name = msg['msg']['package']['name'] homepage = msg['msg']['package']['upstream_url'] self.log.info("Considering monitored %r with %r" % (name, homepage)) if not status: self.log.info(".. but it was turned off. Dropping.") return anitya = hotness.anitya.Anitya(self.anitya_url) results = anitya.search(name, homepage) total = results['total'] if total > 1: self.log.info("%i projects with %r %r already exist in anitya." % ( total, name, homepage)) return elif total == 1: # The project might exist in anitya, but it might not be mapped to # a Fedora package yet, so map it if necessary. project = results['projects'][0] anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.map_new_package(name, project) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, project=project, success=not bool(reason), reason=reason)) # After mapping, force a check for new tarballs anitya.force_check(project) else: # OTHERWISE, there is *nothing* on anitya about it, so add one. self.log.info("Saw 0 matching projects on anitya. Adding.") anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.add_new_project(name, homepage) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, success=not bool(reason), reason=reason))
def handle_new_package(self, msg, package): name = package['name'] homepage = package['upstream_url'] if not homepage: # If there is not homepage set at the outset in pkgdb, there's # nothing smart we can do with respect to anitya, so.. wait. # pkgdb has a cron script that runs weekly that updates the # upstream url there, so when that happens, we'll be triggered # and can try again. self.log.warn("New package %r has no homepage. Dropping." % name) return self.log.info("Considering new package %r with %r" % (name, homepage)) anitya = hotness.anitya.Anitya(self.anitya_url) results = anitya.search_by_homepage(name, homepage) projects = results['projects'] total = results['total'] if total > 1: self.log.warning("Fail. %i matching projects on anitya." % total) self.publish("project.map", msg=dict( trigger=msg, total=total, success=False)) elif total == 1: self.log.info("Found one match on Anitya.") project = projects[0] anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.map_new_package(name, project) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, project=project, success=not bool(reason), reason=reason)) else: self.log.info("Saw 0 matching projects on anitya. Adding.") anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.add_new_project(name, homepage) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, success=not bool(reason), reason=reason))
def handle_new_package(self, msg): listing = msg['msg']['package_listing'] if listing['collection']['branchname'] != 'master': self.log.debug("Ignoring non-rawhide new package...") return name = listing['package']['name'] homepage = listing['package']['upstream_url'] self.log.info("Considering new package %r with %r" % (name, homepage)) anitya = hotness.anitya.Anitya(self.anitya_url) results = anitya.search(name, homepage) projects = results['projects'] total = results['total'] if total > 1: self.log.warning("Fail. %i matching projects on anitya." % total) self.publish("project.map", msg=dict( trigger=msg, total=total, success=False)) elif total == 1: self.log.info("Found one match on Anitya.") project = projects[0] anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.map_new_package(name, project) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, project=project, success=not bool(reason), reason=reason)) else: self.log.info("Saw 0 matching projects on anitya. Adding.") anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.add_new_project(name, homepage) except hotness.anitya.AnityaException as e: reason = str(e) self.publish("project.map", msg=dict( trigger=msg, success=not bool(reason), reason=reason))
def handle_updated_package(self, msg): self.log.info("Handling pkgdb update msg %r" % msg.get('msg_id')) fields = msg['msg']['fields'] if not 'upstream_url' in fields: self.log.info("Ignoring package edit with no url change.") return package = msg['msg']['package'] name = package['name'] homepage = package['upstream_url'] self.log.info("Trying url change on %s: %s" % (name, homepage)) # There are two possible scenarios here. # 1) the package already *is mapped* in anitya, in which case we can # update the old url there # 2) the package is not mapped there, in which case we handle this like # a new package (and try to create it and map it) anitya = hotness.anitya.Anitya(self.anitya_url) project = anitya.get_project_by_package(name) if project: self.log.info("Found project with name %s" % project['name']) anitya.login(self.anitya_username, self.anitya_password) if project['homepage'] == homepage: self.log.info("No need to update anitya for %s. Homepages" " are already in sync." % project['name']) return self.log.info("Updating anitya url on %s" % project['name']) anitya.update_url(project, homepage) anitya.force_check(project) else: # Just pretend like it's a new package, since its not in anitya. self.handle_new_package(msg, package)
def handle_new_package(self, msg, package): """ Message handler for newly added packages in pkgdb. When a new package is added to pkgdb, this ensures that there is a mapping in release-monitoring.org for that package. If it is not present, this adds it, if possible. Topic: 'org.fedoraproject.prod.pkgdb.package.new', Publish a message to ``project.map`` with the results of the attempt map the package to a project. """ name = package['name'] homepage = package['upstream_url'] if not homepage: # If there is not homepage set at the outset in pkgdb, there's # nothing smart we can do with respect to anitya, so.. wait. # pkgdb has a cron script that runs weekly that updates the # upstream url there, so when that happens, we'll be triggered # and can try again. _log.warn("New package %r has no homepage. Dropping." % name) return _log.info("Considering new package %r with %r" % (name, homepage)) anitya = hotness.anitya.Anitya(self.anitya_url) results = anitya.search_by_homepage(name, homepage) projects = results['projects'] total = results['total'] if total > 1: _log.warning("Fail. %i matching projects on anitya." % total) self.publish("project.map", msg=dict(trigger=msg, total=total, success=False)) elif total == 1: _log.info("Found one match on Anitya.") project = projects[0] anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.map_new_package(name, project) except hotness.anitya.AnityaException as e: reason = str(e) _log.warn("Failed to map: %r" % reason) self.publish("project.map", msg=dict(trigger=msg, project=project, success=not bool(reason), reason=reason)) else: _log.info("Saw 0 matching projects on anitya. Adding.") anitya.login(self.anitya_username, self.anitya_password) reason = None try: anitya.add_new_project(name, homepage) except hotness.anitya.AnityaException as e: reason = str(e) _log.warn("Failed to create: %r" % reason) self.publish("project.map", msg=dict(trigger=msg, success=not bool(reason), reason=reason))