#!/usr/bin/python3 import json from pathlib import Path import pika import random import time MY_TASKS_DIR = Path(__file__).parent / "tasks" def listen_events(): connection = pika.BlockingConnection( pika.URLParameters("amqps://opensuse:opensuse@rabbit.opensuse.org") ) channel = connection.channel() channel.exchange_declare( exchange="pubsub", exchange_type="topic", passive=True, durable=False ) result = channel.queue_declare("", exclusive=True) queue_name = result.method.queue channel.queue_bind( exchange="pubsub", queue=queue_name, routing_key="opensuse.obs.package.commit" ) print(" [*] Waiting for logs. To exit press CTRL+C") def callback(ch, method, properties, body): if method.routing_key not in ("opensuse.obs.package.commit",): return body = json.loads(body) if ( "project" in body and "package" in body and body["project"] == "openSUSE:Factory" ): if "/" in body["package"]: return (MY_TASKS_DIR / body["package"]).touch() print(" [x] %r:%r" % (method.routing_key, body["package"])) channel.basic_consume(queue_name, callback, auto_ack=True) channel.start_consuming() def main(): while True: try: listen_events() except (pika.exceptions.ConnectionClosed, pika.exceptions.AMQPHeartbeatTimeout): time.sleep(random.randint(10, 100)) if __name__ == "__main__": main()