__init__.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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. connection = pika.BlockingConnection(parameters)
  15. self._channel = connection.channel()
  16. def _make_declare_queue_synced(self, topic):
  17. self._channel.queue_declare(queue=topic, durable=True)
  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(
  24. encoding=self._encoding
  25. )
  26. )