bec-lib 3.151.2__tar.gz → 3.151.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. {bec_lib-3.151.2 → bec_lib-3.151.3}/PKG-INFO +1 -1
  2. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/managed_redis_connection.py +13 -4
  3. {bec_lib-3.151.2 → bec_lib-3.151.3}/pyproject.toml +1 -1
  4. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_redis_connector_fakeredis.py +29 -0
  5. {bec_lib-3.151.2 → bec_lib-3.151.3}/.gitignore +0 -0
  6. {bec_lib-3.151.2 → bec_lib-3.151.3}/README.md +0 -0
  7. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/__init__.py +0 -0
  8. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/_print_versions.py +0 -0
  9. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/acl_login.py +0 -0
  10. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/actors.py +0 -0
  11. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/alarm_handler.py +0 -0
  12. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/atlas_models.py +0 -0
  13. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/bec_errors.py +0 -0
  14. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/bec_service.py +0 -0
  15. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/bec_yaml_loader.py +0 -0
  16. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/bl_state_manager.py +0 -0
  17. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/bl_states.py +0 -0
  18. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/builtin_actor_hli.py +0 -0
  19. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/callback_handler.py +0 -0
  20. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/channel_monitor.py +0 -0
  21. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/client.py +0 -0
  22. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/codecs.py +0 -0
  23. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/config_helper.py +0 -0
  24. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/config_values.py +0 -0
  25. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/configs/__init__.py +0 -0
  26. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/configs/demo_config.yaml +0 -0
  27. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/configs/openapi_schema.json +0 -0
  28. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/connector.py +0 -0
  29. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/dap_plugin_objects.py +0 -0
  30. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/dap_plugins.py +0 -0
  31. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/device.py +0 -0
  32. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/devicemanager.py +0 -0
  33. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/endpoints.py +0 -0
  34. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/file_utils.py +0 -0
  35. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/live_scan_data.py +0 -0
  36. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/lmfit_serializer.py +0 -0
  37. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/logger.py +0 -0
  38. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/macro_update_handler.py +0 -0
  39. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/messages.py +0 -0
  40. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/messaging_hooks.py +0 -0
  41. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/messaging_services.py +0 -0
  42. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/metadata_schema.py +0 -0
  43. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/numpy_encoder.py +0 -0
  44. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/observer.py +0 -0
  45. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/pdf_writer.py +0 -0
  46. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/plugin_helper.py +0 -0
  47. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/procedures/__init__.py +0 -0
  48. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/procedures/helper.py +0 -0
  49. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/procedures/hli.py +0 -0
  50. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/procedures/status.py +0 -0
  51. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/queue_items.py +0 -0
  52. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/__init__.py +0 -0
  53. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/constants.py +0 -0
  54. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/hli.py +0 -0
  55. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/streams.py +0 -0
  56. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/redis_connector/validation.py +0 -0
  57. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/request_context.py +0 -0
  58. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/request_items.py +0 -0
  59. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_args.py +0 -0
  60. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_data_container.py +0 -0
  61. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_history.py +0 -0
  62. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_input_validator.py +0 -0
  63. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_items.py +0 -0
  64. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_manager.py +0 -0
  65. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_number_container.py +0 -0
  66. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_repeat.py +0 -0
  67. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scan_report.py +0 -0
  68. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scans.py +0 -0
  69. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/scibec_validator.py +0 -0
  70. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/script_executor.py +0 -0
  71. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/serialization.py +0 -0
  72. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/serialization_registry.py +0 -0
  73. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/service_config.py +0 -0
  74. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/signature_serializer.py +0 -0
  75. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/tests/__init__.py +0 -0
  76. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/tests/fixtures.py +0 -0
  77. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/tests/test_config.yaml +0 -0
  78. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/tests/test_service_config.yaml +0 -0
  79. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/tests/utils.py +0 -0
  80. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/user_macros.py +0 -0
  81. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/__init__.py +0 -0
  82. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/copier_jinja_filters.py +0 -0
  83. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/import_utils.py +0 -0
  84. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/json_extended.py +0 -0
  85. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/__init__.py +0 -0
  86. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/_constants.py +0 -0
  87. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/_util.py +0 -0
  88. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/create/__init__.py +0 -0
  89. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/create/device.py +0 -0
  90. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/create/scan.py +0 -0
  91. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/create/templates/v4_scan.py.jinja +0 -0
  92. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/plugin_manager/main.py +0 -0
  93. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/proxy.py +0 -0
  94. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/pydantic_pretty_print.py +0 -0
  95. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/rpc_utils.py +0 -0
  96. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/scan_utils.py +0 -0
  97. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/threading_utils.py +0 -0
  98. {bec_lib-3.151.2 → bec_lib-3.151.3}/bec_lib/utils/user_acls_test.py +0 -0
  99. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/__init__.py +0 -0
  100. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/_additional_for_signature_serializer_test.py +0 -0
  101. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/conftest.py +0 -0
  102. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_acl_login.py +0 -0
  103. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_alarm_handler.py +0 -0
  104. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_atlas_models.py +0 -0
  105. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_beamline_states.py +0 -0
  106. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_bec_logger.py +0 -0
  107. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_bec_messages.py +0 -0
  108. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_bec_service.py +0 -0
  109. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_callback_handler.py +0 -0
  110. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_channel_monitor.py +0 -0
  111. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_client.py +0 -0
  112. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_config_helper.py +0 -0
  113. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_core_utils.py +0 -0
  114. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_dap_plugins.py +0 -0
  115. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_data_container.py +0 -0
  116. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_device_hashing.py +0 -0
  117. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_device_manager.py +0 -0
  118. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_devices.py +0 -0
  119. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_file_utils.py +0 -0
  120. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_hli_connector_fakeredis.py +0 -0
  121. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_hli_redis_connector.py +0 -0
  122. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_import_utils.py +0 -0
  123. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_jinja_plugins.py +0 -0
  124. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_lmfit_serializer.py +0 -0
  125. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_managed_config_values.py +0 -0
  126. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_managed_redis_connection.py +0 -0
  127. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_messaging_hooks.py +0 -0
  128. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_messaging_service.py +0 -0
  129. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_metadata_schema.py +0 -0
  130. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_observer.py +0 -0
  131. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_pdf_writer.py +0 -0
  132. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_plugin_helper.py +0 -0
  133. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_plugin_manager.py +0 -0
  134. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_plugin_system.py +0 -0
  135. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_pydantic_pretty_print.py +0 -0
  136. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_queue_items.py +0 -0
  137. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_context.py +0 -0
  138. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_data.py +0 -0
  139. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_history.py +0 -0
  140. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_items.py +0 -0
  141. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_manager.py +0 -0
  142. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_object.py +0 -0
  143. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_repeat.py +0 -0
  144. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scan_report.py +0 -0
  145. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_scibec_validator.py +0 -0
  146. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_script_executor.py +0 -0
  147. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_serializer.py +0 -0
  148. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_signature_serializer.py +0 -0
  149. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_signature_serializer_with_future_import.py +0 -0
  150. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_stream_subs.py +0 -0
  151. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_user_macros.py +0 -0
  152. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_utils.py +0 -0
  153. {bec_lib-3.151.2 → bec_lib-3.151.3}/tests/test_yaml_loader.py +0 -0
  154. {bec_lib-3.151.2 → bec_lib-3.151.3}/util_scripts/init_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_lib
3
- Version: 3.151.2
3
+ Version: 3.151.3
4
4
  Summary: BEC library
5
5
  Project-URL: Bug Tracker, https://github.com/bec-project/bec/issues
6
6
  Project-URL: Homepage, https://github.com/bec-project/bec
@@ -595,7 +595,9 @@ class ManagedRedisConnection:
595
595
  unsubscribe_list = []
596
596
  with self._topics_cb_lock:
597
597
  for topic in topics:
598
- topics_cb = self._topics_cb[topic]
598
+ topics_cb = self._topics_cb.get(topic)
599
+ if topics_cb is None:
600
+ continue
599
601
  # remove callback from list
600
602
  self._topics_cb[topic] = list(
601
603
  filter(lambda item: cb and item[0]() != cb, topics_cb)
@@ -631,9 +633,16 @@ class ManagedRedisConnection:
631
633
  self._pubsub_conn.unsubscribe(unsubscribe_list)
632
634
  else:
633
635
  with self._topics_cb_lock:
634
- topics = list(self._topics_cb.keys())
635
- self.unregister(topics, cb)
636
- self.unregister(self._stream_subs.all_topics, cb)
636
+ registered_topics = list(self._topics_cb.keys())
637
+ direct_topics = [
638
+ topic for topic in registered_topics if not set("*?[]").intersection(topic)
639
+ ]
640
+ pattern_topics = [topic for topic in registered_topics if topic not in direct_topics]
641
+ if direct_topics:
642
+ self.unregister(topics=direct_topics, cb=cb)
643
+ if pattern_topics:
644
+ self.unregister(patterns=pattern_topics, cb=cb)
645
+ self.unregister(topics=self._stream_subs.all_topics, cb=cb)
637
646
 
638
647
  def _unregister_stream(self, topics: list[str], cb: Callable | None = None) -> bool:
639
648
  """Unregister callbacks from a list of topics. Returns true if any were removed"""
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_lib"
7
- version = "3.151.2"
7
+ version = "3.151.3"
8
8
  description = "BEC library"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -148,6 +148,35 @@ def test_redis_connector_unregister(connected_connector):
148
148
  assert len(connector._topics_cb) == 0
149
149
 
150
150
 
151
+ def test_redis_connector_unregister_all_for_callback(connected_connector):
152
+ connector = connected_connector
153
+ cb_mock = mock.Mock(spec=[])
154
+
155
+ connector.register(topics=["topic1"], cb=cb_mock, start_thread=False)
156
+ connector.register(patterns=["topic2:*"], cb=cb_mock, start_thread=False)
157
+ connector.register(TestStreamEndpoint, cb=cb_mock, start_thread=False)
158
+
159
+ connector.send("topic1", TestMessage(msg="topic1"))
160
+ connector.poll_messages(timeout=1)
161
+ connector.send("topic2:a", TestMessage(msg="topic2"))
162
+ connector.poll_messages(timeout=1)
163
+ connector.xadd("test", {"data": 1})
164
+ connector.poll_messages(timeout=1)
165
+ assert cb_mock.call_count == 3
166
+
167
+ cb_mock.reset_mock()
168
+ connector.unregister(cb=cb_mock)
169
+
170
+ connector.send("topic1", TestMessage(msg="topic1"))
171
+ connector.send("topic2:a", TestMessage(msg="topic2"))
172
+ connector.xadd("test", {"data": 2})
173
+ with pytest.raises(TimeoutError):
174
+ connector.poll_messages(timeout=1)
175
+ assert cb_mock.call_count == 0
176
+ assert len(connector._topics_cb) == 0
177
+ assert connector._stream_subs.all_topics == []
178
+
179
+
151
180
  def test_redis_connector_register_identical(connected_connector):
152
181
  connector = connected_connector
153
182
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes