blissdata 2.4.3__tar.gz → 2.4.4__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 (101) hide show
  1. {blissdata-2.4.3/src/blissdata.egg-info → blissdata-2.4.4}/PKG-INFO +2 -3
  2. {blissdata-2.4.3 → blissdata-2.4.4}/pyproject.toml +2 -3
  3. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5map/data_items.py +5 -6
  4. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/lima/image_utils.py +6 -4
  5. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/scan.py +6 -1
  6. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/store.py +16 -1
  7. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/plugins/test_plugin_base.py +0 -7
  8. {blissdata-2.4.3 → blissdata-2.4.4/src/blissdata.egg-info}/PKG-INFO +2 -3
  9. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata.egg-info/requires.txt +1 -2
  10. {blissdata-2.4.3 → blissdata-2.4.4}/LICENSE +0 -0
  11. {blissdata-2.4.3 → blissdata-2.4.4}/README.md +0 -0
  12. {blissdata-2.4.3 → blissdata-2.4.4}/setup.cfg +0 -0
  13. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/__init__.py +0 -0
  14. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/__init__.py +0 -0
  15. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/_base.py +0 -0
  16. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/_utils.py +0 -0
  17. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/config.py +0 -0
  18. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/data.py +0 -0
  19. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/beacon/files.py +0 -0
  20. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/deprecation.py +0 -0
  21. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/exceptions.py +0 -0
  22. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/__init__.py +0 -0
  23. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/abstract.py +0 -0
  24. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/dynamic_hdf5.py +0 -0
  25. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/file_arguments.py +0 -0
  26. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/h5_scan_map.py +0 -0
  27. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/redis_hdf5.py +0 -0
  28. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/static_hdf5.py +0 -0
  29. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/__init__.py +0 -0
  30. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/bliss.py +0 -0
  31. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/hdf5.py +0 -0
  32. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/hdf5_retry.py +0 -0
  33. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/lima.py +0 -0
  34. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5api/utils/types.py +0 -0
  35. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5map/__init__.py +0 -0
  36. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/h5map/hdf5_items.py +0 -0
  37. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/lima/__init__.py +0 -0
  38. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/lima/client.py +0 -0
  39. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/py.typed +0 -0
  40. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/__init__.py +0 -0
  41. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/encoding/__init__.py +0 -0
  42. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/encoding/json.py +0 -0
  43. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/encoding/numeric.py +0 -0
  44. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/event_stream.py +0 -0
  45. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/exceptions.py +0 -0
  46. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/identities.py +0 -0
  47. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/redis_engine/memory_tracker.py +0 -0
  48. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/scan.py +0 -0
  49. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/schemas/__init__.py +0 -0
  50. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/schemas/scan_info.py +0 -0
  51. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/schemas/scan_info_display.py +0 -0
  52. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/__init__.py +0 -0
  53. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/base.py +0 -0
  54. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/default.py +0 -0
  55. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/encoding/__init__.py +0 -0
  56. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/encoding/json.py +0 -0
  57. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/encoding/numeric.py +0 -0
  58. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/event_stream.py +0 -0
  59. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/hdf5_fallback/__init__.py +0 -0
  60. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/hdf5_fallback/stream.py +0 -0
  61. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/lima/__init__.py +0 -0
  62. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/lima/stream.py +0 -0
  63. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/scan_sequence/__init__.py +0 -0
  64. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/scan_sequence/stream.py +0 -0
  65. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/streams/sink.py +0 -0
  66. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/__init__.py +0 -0
  67. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/beacon/__init__.py +0 -0
  68. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/beacon/test_config.py +0 -0
  69. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/beacon/test_data.py +0 -0
  70. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/beacon/test_files.py +0 -0
  71. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/conftest.py +0 -0
  72. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/__init__.py +0 -0
  73. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/scanner.py +0 -0
  74. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/test_dynamic_files.py +0 -0
  75. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/test_h5api_lima_utils.py +0 -0
  76. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/test_hdf5_handlers.py +0 -0
  77. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/test_redis_files.py +0 -0
  78. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5api/test_static_files.py +0 -0
  79. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5map/__init__.py +0 -0
  80. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5map/test_data_items.py +0 -0
  81. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/h5map/test_hdf5_items.py +0 -0
  82. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/lima/__init__.py +0 -0
  83. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/lima/test_image_utils.py +0 -0
  84. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/__init__.py +0 -0
  85. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/conftest.py +0 -0
  86. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/test_cursor.py +0 -0
  87. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/test_memory_tracker.py +0 -0
  88. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/test_scan.py +0 -0
  89. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/test_search.py +0 -0
  90. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/redis_engine/utils.py +0 -0
  91. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/encoding/__init__.py +0 -0
  92. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/encoding/test_json.py +0 -0
  93. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/encoding/test_numeric.py +0 -0
  94. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/plugins/__init__.py +0 -0
  95. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/plugins/test_file_backed_stream.py +0 -0
  96. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/plugins/test_lima_stream.py +0 -0
  97. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata/tests/streams/test_event_stream.py +0 -0
  98. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata.egg-info/SOURCES.txt +0 -0
  99. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata.egg-info/dependency_links.txt +0 -0
  100. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata.egg-info/entry_points.txt +0 -0
  101. {blissdata-2.4.3 → blissdata-2.4.4}/src/blissdata.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blissdata
3
- Version: 2.4.3
3
+ Version: 2.4.4
4
4
  Summary: Bliss data streaming client
5
5
  Maintainer: BCU (ESRF)
6
6
  License-Expression: LGPL-3.0-or-later
@@ -39,9 +39,8 @@ Requires-Dist: blissdata[test]; extra == "dev"
39
39
  Requires-Dist: black; extra == "dev"
40
40
  Requires-Dist: flake8>=4; extra == "dev"
41
41
  Requires-Dist: flake8-pep585; extra == "dev"
42
- Requires-Dist: mkdocs; extra == "dev"
42
+ Requires-Dist: mkdocs<2; extra == "dev"
43
43
  Requires-Dist: mkdocs-material; extra == "dev"
44
- Requires-Dist: mkdocstrings[python]>=0.18; extra == "dev"
45
44
  Provides-Extra: beacon
46
45
  Requires-Dist: ruamel.yaml; extra == "beacon"
47
46
  Dynamic: license-file
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "blissdata"
3
- version = "2.4.3"
3
+ version = "2.4.4"
4
4
  description = "Bliss data streaming client"
5
5
  readme = "README.md"
6
6
  license = "LGPL-3.0-or-later"
@@ -46,9 +46,8 @@ dev = [
46
46
  "black",
47
47
  "flake8>=4",
48
48
  "flake8-pep585",
49
- "mkdocs",
49
+ "mkdocs<2",
50
50
  "mkdocs-material",
51
- "mkdocstrings[python]>=0.18",
52
51
  ]
53
52
  beacon = ["ruamel.yaml"]
54
53
 
@@ -211,20 +211,19 @@ class Compound(BaseModel):
211
211
  return rec.view(np.ndarray)
212
212
 
213
213
  @model_validator(mode="after")
214
- @classmethod
215
- def verify_names_and_shapes(cls, value):
214
+ def verify_names_and_shapes(self):
216
215
  """Ensure uniqueness of names and shape equality between columns"""
217
- if len(value.columns) != len({name for name, _ in value.columns}):
216
+ if len(self.columns) != len({name for name, _ in self.columns}):
218
217
  raise ValueError("found columns with same name")
219
218
 
220
- shape_iterator = iter((col.decode().shape for _, col in value.columns))
219
+ shape_iterator = iter((col.decode().shape for _, col in self.columns))
221
220
  try:
222
221
  first_shape = next(shape_iterator)
223
222
  except StopIteration:
224
- return value
223
+ return self
225
224
  if not all(first_shape == shape for shape in shape_iterator):
226
225
  raise ValueError("columns have different shapes")
227
- return value
226
+ return self
228
227
 
229
228
 
230
229
  class Stream(BaseModel):
@@ -273,8 +273,9 @@ def decode_devencoded_video(raw_data: bytes | tuple[str, bytes]) -> ImageData |
273
273
 
274
274
  if mode in MODE_TO_NUMPY:
275
275
  dtype = MODE_TO_NUMPY[mode]
276
- data = numpy.frombuffer(raw_data, offset=header_size, dtype=dtype).copy()
277
- data.shape = image_height, image_width
276
+ data = numpy.frombuffer(raw_data, offset=header_size, dtype=dtype).reshape(
277
+ (image_height, image_width), copy=True
278
+ )
278
279
  elif mode in _RGB_CODECS:
279
280
  data = decode_rgb_data(
280
281
  raw_data, image_width, image_height, mode, offset=header_size
@@ -411,8 +412,9 @@ def decode_devencoded_image(raw_data: bytes | tuple[str, bytes]) -> ImageData:
411
412
  except Exception:
412
413
  raise ImageFormatNotSupported("Data format %s is not supported" % mode)
413
414
 
414
- data = numpy.frombuffer(raw_data, offset=header_size, dtype=dtype)
415
- data.shape = dim2, dim1
415
+ data = numpy.frombuffer(raw_data, offset=header_size, dtype=dtype).reshape(
416
+ (dim2, dim1)
417
+ )
416
418
 
417
419
  # Create a memory copy only if it is needed
418
420
  if not data.flags.writeable:
@@ -357,6 +357,7 @@ class Scan:
357
357
 
358
358
  stream = self._wrap_event_stream(event_stream)
359
359
  if isinstance(stream, BrokenStream):
360
+ event_stream._sink.stop()
360
361
  raise stream._exception
361
362
  self._model.data_streams[name] = model
362
363
  self._writer_streams[name] = stream
@@ -374,7 +375,11 @@ class Scan:
374
375
  multiple places."""
375
376
  model = self._model.data_streams[name]
376
377
  rw_event_stream = EventStream.create(self._data_store, name, model)
377
- return self._wrap_event_stream(rw_event_stream)
378
+ stream = self._wrap_event_stream(rw_event_stream)
379
+ if isinstance(stream, BrokenStream):
380
+ rw_event_stream._sink.stop()
381
+ raise stream._exception
382
+ return stream
378
383
 
379
384
  @needs_write_permission
380
385
  def _close_writer_streams(self):
@@ -109,6 +109,16 @@ class DataStore:
109
109
  f"Cannot re-index a non-empty Redis database, {nb_keys} keys are already present"
110
110
  )
111
111
 
112
+ # Ensure ReJSON and RediSearch modules are installed on server side
113
+ installed_modules = {
114
+ module[b"name"].decode() for module in self._redis.module_list()
115
+ }
116
+ for module in ["ReJSON", "search"]:
117
+ if module not in installed_modules:
118
+ raise RuntimeError(
119
+ f"Redis server is missing '{module}' module for blissdata to function"
120
+ )
121
+
112
122
  # Configure RediSearch indexing with redis-om, but block redis-om mechanism which auto-discover any
113
123
  # model class for indexing. Instead we set model_registry by hand to only enable self._scan_model indexing
114
124
  # and not to interfer with existing DataStores.
@@ -122,7 +132,12 @@ class DataStore:
122
132
 
123
133
  # TODO how to ensure this is always greater than the number of scan in redis ?
124
134
  # otherwise search results may be truncated without warning
125
- self._redis.ft().config_set("MAXPREFIXEXPANSIONS", 2000)
135
+ try:
136
+ # redis-server 8+ API
137
+ self._redis.config_set("search-max-prefix-expansions", 2000)
138
+ except redis.exceptions.ResponseError:
139
+ # fallback to legacy API
140
+ self._redis.ft().config_set("MAXPREFIXEXPANSIONS", 2000)
126
141
 
127
142
  # Server side sealing function:
128
143
  # For the seal to contain the complete length of the stream, we
@@ -1,6 +1,5 @@
1
1
  import pytest
2
2
  import numpy as np
3
- import gc
4
3
  from contextlib import contextmanager
5
4
  import blissdata.redis_engine.scan
6
5
  from blissdata.exceptions import MissingPluginException
@@ -77,12 +76,6 @@ def test_missing_plugin_create(dummy_scan):
77
76
  with pytest.raises(MissingPluginException):
78
77
  _ = dummy_scan.create_stream(stream_definition)
79
78
 
80
- # In this test an event stream was created and then abandoned. It owns a
81
- # sink with a redis connection that will be returned to the pool at garbage
82
- # collection. With gevent, this leads to frequent race conditions blocking
83
- # tests. Forcing gc.collect here prevent this issue.
84
- gc.collect()
85
-
86
79
 
87
80
  def test_missing_plugin_load(dummy_scan, mock_plugin):
88
81
  with mock_plugin():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blissdata
3
- Version: 2.4.3
3
+ Version: 2.4.4
4
4
  Summary: Bliss data streaming client
5
5
  Maintainer: BCU (ESRF)
6
6
  License-Expression: LGPL-3.0-or-later
@@ -39,9 +39,8 @@ Requires-Dist: blissdata[test]; extra == "dev"
39
39
  Requires-Dist: black; extra == "dev"
40
40
  Requires-Dist: flake8>=4; extra == "dev"
41
41
  Requires-Dist: flake8-pep585; extra == "dev"
42
- Requires-Dist: mkdocs; extra == "dev"
42
+ Requires-Dist: mkdocs<2; extra == "dev"
43
43
  Requires-Dist: mkdocs-material; extra == "dev"
44
- Requires-Dist: mkdocstrings[python]>=0.18; extra == "dev"
45
44
  Provides-Extra: beacon
46
45
  Requires-Dist: ruamel.yaml; extra == "beacon"
47
46
  Dynamic: license-file
@@ -17,9 +17,8 @@ blissdata[test]
17
17
  black
18
18
  flake8>=4
19
19
  flake8-pep585
20
- mkdocs
20
+ mkdocs<2
21
21
  mkdocs-material
22
- mkdocstrings[python]>=0.18
23
22
 
24
23
  [lima2]
25
24
  blissdata-lima2>=2.0
File without changes
File without changes
File without changes