__init__.py 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. import pika
  2. from radicale import hook
  3. from radicale.hook import HookNotificationItem
  4. class Hook(hook.BaseHook):
  5. def __init__(self, configuration):
  6. super().__init__(configuration)
  7. endpoint = configuration.get("hook", "rabbitmq_endpoint")
  8. self.topic = configuration.get("hook", "rabbitmq_topic")
  9. self.encoding = configuration.get("encoding", "stock")
  10. self._make_connection_synced(endpoint)
  11. self._make_declare_queue_synced(self.topic)
  12. def _make_connection_synced(self, endpoint):
  13. parameters = pika.URLParameters(endpoint)
  14. self.connection = pika.BlockingConnection(parameters)
  15. self.channel = self.connection.channel()
  16. def _make_declare_queue_synced(self, topic):
  17. self.channel.queue_declare(queue=topic)
  18. def notify(self, notification_item):
  19. if isinstance(notification_item, HookNotificationItem):
  20. self.channel.basic_publish(
  21. exchange='',
  22. routing_key=self.topic,
  23. body=notification_item.to_json().encode(encoding=self.encoding))