Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pyro.py 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. """
  2. kombu.transport.pyro
  3. ======================
  4. Pyro transport.
  5. Requires the :mod:`Pyro4` library to be installed.
  6. """
  7. from __future__ import absolute_import
  8. import sys
  9. from kombu.five import reraise
  10. from kombu.utils import cached_property
  11. from . import virtual
  12. try:
  13. import Pyro4 as pyro
  14. from Pyro4.errors import NamingError
  15. except ImportError: # pragma: no cover
  16. pyro = NamingError = None # noqa
  17. DEFAULT_PORT = 9090
  18. E_LOOKUP = """\
  19. Unable to locate pyro nameserver {0.virtual_host} on host {0.hostname}\
  20. """
  21. class Channel(virtual.Channel):
  22. def queues(self):
  23. return self.shared_queues.get_queue_names()
  24. def _new_queue(self, queue, **kwargs):
  25. if queue not in self.queues():
  26. self.shared_queues.new_queue(queue)
  27. def _get(self, queue, timeout=None):
  28. queue = self._queue_for(queue)
  29. msg = self.shared_queues._get(queue)
  30. return msg
  31. def _queue_for(self, queue):
  32. if queue not in self.queues():
  33. self.shared_queues.new_queue(queue)
  34. return queue
  35. def _put(self, queue, message, **kwargs):
  36. queue = self._queue_for(queue)
  37. self.shared_queues._put(queue, message)
  38. def _size(self, queue):
  39. return self.shared_queues._size(queue)
  40. def _delete(self, queue, *args):
  41. self.shared_queues._delete(queue)
  42. def _purge(self, queue):
  43. return self.shared_queues._purge(queue)
  44. def after_reply_message_received(self, queue):
  45. pass
  46. @cached_property
  47. def shared_queues(self):
  48. return self.connection.shared_queues
  49. class Transport(virtual.Transport):
  50. Channel = Channel
  51. #: memory backend state is global.
  52. state = virtual.BrokerState()
  53. default_port = DEFAULT_PORT
  54. driver_type = driver_name = 'pyro'
  55. def _open(self):
  56. conninfo = self.client
  57. pyro.config.HMAC_KEY = conninfo.virtual_host
  58. try:
  59. nameserver = pyro.locateNS(host=conninfo.hostname,
  60. port=self.default_port)
  61. # name of registered pyro object
  62. uri = nameserver.lookup(conninfo.virtual_host)
  63. return pyro.Proxy(uri)
  64. except NamingError:
  65. reraise(NamingError, NamingError(E_LOOKUP.format(conninfo)),
  66. sys.exc_info()[2])
  67. def driver_version(self):
  68. return pyro.__version__
  69. @cached_property
  70. def shared_queues(self):
  71. return self._open()