constants.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. """0MQ Constants."""
  2. # Copyright (c) PyZMQ Developers.
  3. # Distributed under the terms of the Modified BSD License.
  4. from zmq.backend import constants
  5. from zmq.backend import has
  6. from zmq.utils.constant_names import (
  7. base_names,
  8. switched_sockopt_names,
  9. int_sockopt_names,
  10. int64_sockopt_names,
  11. bytes_sockopt_names,
  12. fd_sockopt_names,
  13. ctx_opt_names,
  14. msg_opt_names,
  15. )
  16. #-----------------------------------------------------------------------------
  17. # Python module level constants
  18. #-----------------------------------------------------------------------------
  19. __all__ = [
  20. 'int_sockopts',
  21. 'int64_sockopts',
  22. 'bytes_sockopts',
  23. 'ctx_opts',
  24. 'ctx_opt_names',
  25. 'DRAFT_API',
  26. ]
  27. if constants.VERSION < 40200:
  28. DRAFT_API = False
  29. else:
  30. DRAFT_API = bool(has('draft') and constants.DRAFT_API)
  31. int_sockopts = set()
  32. int64_sockopts = set()
  33. bytes_sockopts = set()
  34. fd_sockopts = set()
  35. ctx_opts = set()
  36. msg_opts = set()
  37. if constants.VERSION < 30000:
  38. int64_sockopt_names.extend(switched_sockopt_names)
  39. else:
  40. int_sockopt_names.extend(switched_sockopt_names)
  41. _UNDEFINED = -9999
  42. def _add_constant(name, container=None):
  43. """add a constant to be defined
  44. optionally add it to one of the sets for use in get/setopt checkers
  45. """
  46. c = getattr(constants, name, _UNDEFINED)
  47. if c == _UNDEFINED:
  48. return
  49. globals()[name] = c
  50. __all__.append(name)
  51. if container is not None:
  52. container.add(c)
  53. return c
  54. for name in base_names:
  55. _add_constant(name)
  56. for name in int_sockopt_names:
  57. _add_constant(name, int_sockopts)
  58. for name in int64_sockopt_names:
  59. _add_constant(name, int64_sockopts)
  60. for name in bytes_sockopt_names:
  61. _add_constant(name, bytes_sockopts)
  62. for name in fd_sockopt_names:
  63. _add_constant(name, fd_sockopts)
  64. for name in ctx_opt_names:
  65. _add_constant(name, ctx_opts)
  66. for name in msg_opt_names:
  67. _add_constant(name, msg_opts)
  68. # ensure some aliases are always defined
  69. aliases = [
  70. ('DONTWAIT', 'NOBLOCK'),
  71. ('XREQ', 'DEALER'),
  72. ('XREP', 'ROUTER'),
  73. ]
  74. for group in aliases:
  75. undefined = set()
  76. found = None
  77. for name in group:
  78. value = getattr(constants, name, -1)
  79. if value != -1:
  80. found = value
  81. else:
  82. undefined.add(name)
  83. if found is not None:
  84. for name in undefined:
  85. globals()[name] = found
  86. __all__.append(name)