large-image-source-zarr 1.29.3.dev24__tar.gz → 1.29.3.dev33__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 (14) hide show
  1. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/PKG-INFO +3 -3
  2. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr/__init__.py +20 -16
  3. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/PKG-INFO +3 -3
  4. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/requires.txt +2 -2
  5. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/LICENSE +0 -0
  6. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/README.rst +0 -0
  7. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr/girder_source.py +0 -0
  8. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/SOURCES.txt +0 -0
  9. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/dependency_links.txt +0 -0
  10. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/entry_points.txt +0 -0
  11. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/large_image_source_zarr.egg-info/top_level.txt +0 -0
  12. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/pyproject.toml +0 -0
  13. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/setup.cfg +0 -0
  14. {large-image-source-zarr-1.29.3.dev24 → large-image-source-zarr-1.29.3.dev33}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image-source-zarr
3
- Version: 1.29.3.dev24
3
+ Version: 1.29.3.dev33
4
4
  Summary: A OME Zarr tilesource for large_image.
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -17,11 +17,11 @@ Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Requires-Python: >=3.6
19
19
  License-File: LICENSE
20
- Requires-Dist: large-image>=1.29.3.dev24
20
+ Requires-Dist: large-image>=1.29.3.dev33
21
21
  Requires-Dist: zarr
22
22
  Requires-Dist: imagecodecs-numcodecs
23
23
  Provides-Extra: girder
24
- Requires-Dist: girder-large-image>=1.29.3.dev24; extra == "girder"
24
+ Requires-Dist: girder-large-image>=1.29.3.dev33; extra == "girder"
25
25
  Provides-Extra: all
26
26
  Requires-Dist: large-image-converter; extra == "all"
27
27
 
@@ -1,4 +1,5 @@
1
1
  import math
2
+ import multiprocessing
2
3
  import os
3
4
  import shutil
4
5
  import tempfile
@@ -127,11 +128,12 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
127
128
  """
128
129
  Initialize the tile class for creating a new image.
129
130
  """
130
- self._tempdir = tempfile.TemporaryDirectory(path)
131
- self._zarr_store = zarr.DirectoryStore(self._tempdir.name)
132
- self._zarr = zarr.open(self._zarr_store, mode='w')
133
- # Make unpickleable
134
- self._unpickleable = True
131
+ self._tempdir = Path(tempfile.gettempdir(), path)
132
+ self._created = False
133
+ if not self._tempdir.exists():
134
+ self._created = True
135
+ self._zarr_store = zarr.DirectoryStore(str(self._tempdir))
136
+ self._zarr = zarr.open(self._zarr_store, mode='a')
135
137
  self._largeImagePath = None
136
138
  self._dims = {}
137
139
  self.sizeX = self.sizeY = self.levels = 0
@@ -140,7 +142,8 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
140
142
  self._output = None
141
143
  self._editable = True
142
144
  self._bandRanges = None
143
- self._addLock = threading.RLock()
145
+ self._threadLock = threading.RLock()
146
+ self._processLock = multiprocessing.Lock()
144
147
  self._framecount = 0
145
148
  self._mm_x = 0
146
149
  self._mm_y = 0
@@ -157,7 +160,8 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
157
160
  except Exception:
158
161
  pass
159
162
  try:
160
- self._tempdir.cleanup()
163
+ if self._created:
164
+ shutil.rmtree(self._tempdir)
161
165
  except Exception:
162
166
  pass
163
167
 
@@ -334,7 +338,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
334
338
  Validate that we can read tiles from the zarr parent group in
335
339
  self._zarr. Set up the appropriate class variables.
336
340
  """
337
- if self._editable:
341
+ if self._editable and hasattr(self, '_axes'):
338
342
  self._writeInternalMetadata()
339
343
  found = self._scanZarrGroup(self._zarr)
340
344
  if found['best'] is None:
@@ -596,7 +600,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
596
600
  }
597
601
  tile, mask, placement, axes = self._validateNewTile(tile, mask, placement, axes)
598
602
 
599
- with self._addLock:
603
+ with self._threadLock and self._processLock:
600
604
  self._axes = {k: i for i, k in enumerate(axes)}
601
605
  new_dims = {
602
606
  a: max(
@@ -673,7 +677,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
673
677
  with an image. The numpy array can have 2 or 3 dimensions.
674
678
  """
675
679
  data, _ = _imageToNumpy(image)
676
- with self._addLock:
680
+ with self._threadLock and self._processLock:
677
681
  if imageKey is None:
678
682
  # Each associated image should be in its own group
679
683
  num_existing = len(self.getAssociatedImagesList())
@@ -688,7 +692,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
688
692
 
689
693
  def _writeInternalMetadata(self):
690
694
  self._checkEditable()
691
- with self._addLock:
695
+ with self._threadLock and self._processLock:
692
696
  name = str(self._tempdir.name).split('/')[-1]
693
697
  arrays = dict(self._zarr.arrays())
694
698
  channel_axis = self._axes.get('c', self._axes.get('s'))
@@ -700,8 +704,8 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
700
704
  for arr_name in arrays:
701
705
  level = int(arr_name)
702
706
  scale = [1.0 for a in sorted_axes]
703
- scale[self._axes.get('x')] = self._mm_x * (2 ** level)
704
- scale[self._axes.get('y')] = self._mm_y * (2 ** level)
707
+ scale[self._axes.get('x')] = (self._mm_x or 0) * (2 ** level)
708
+ scale[self._axes.get('y')] = (self._mm_y or 0) * (2 ** level)
705
709
  dataset_metadata = {
706
710
  'path': arr_name,
707
711
  'coordinateTransformations': [{
@@ -974,7 +978,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
974
978
  **frame_position,
975
979
  )
976
980
 
977
- source._writeInternalMetadata()
981
+ source._validateZarr()
978
982
 
979
983
  if suffix in ['.zarr', '.db', '.sqlite', '.zip']:
980
984
  if resample is None:
@@ -987,7 +991,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
987
991
  source._writeInternalMetadata() # rewrite with new level datasets
988
992
 
989
993
  if suffix == '.zarr':
990
- shutil.copytree(source._tempdir.name, path)
994
+ shutil.copytree(str(source._tempdir), path)
991
995
  elif suffix in ['.db', '.sqlite']:
992
996
  sqlite_store = zarr.SQLiteStore(path)
993
997
  zarr.copy_store(source._zarr_store, sqlite_store, if_exists='replace')
@@ -1000,7 +1004,7 @@ class ZarrFileTileSource(FileTileSource, metaclass=LruCacheMetaclass):
1000
1004
  else:
1001
1005
  from large_image_converter import convert
1002
1006
 
1003
- attrs_path = Path(source._tempdir.name) / '.zattrs'
1007
+ attrs_path = source._tempdir / '.zattrs'
1004
1008
  params = {}
1005
1009
  if lossy and self.dtype == np.uint8:
1006
1010
  params['compression'] = 'jpeg'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: large-image-source-zarr
3
- Version: 1.29.3.dev24
3
+ Version: 1.29.3.dev33
4
4
  Summary: A OME Zarr tilesource for large_image.
5
5
  Home-page: https://github.com/girder/large_image
6
6
  Author: Kitware, Inc.
@@ -17,11 +17,11 @@ Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Requires-Python: >=3.6
19
19
  License-File: LICENSE
20
- Requires-Dist: large-image>=1.29.3.dev24
20
+ Requires-Dist: large-image>=1.29.3.dev33
21
21
  Requires-Dist: zarr
22
22
  Requires-Dist: imagecodecs-numcodecs
23
23
  Provides-Extra: girder
24
- Requires-Dist: girder-large-image>=1.29.3.dev24; extra == "girder"
24
+ Requires-Dist: girder-large-image>=1.29.3.dev33; extra == "girder"
25
25
  Provides-Extra: all
26
26
  Requires-Dist: large-image-converter; extra == "all"
27
27
 
@@ -1,4 +1,4 @@
1
- large-image>=1.29.3.dev24
1
+ large-image>=1.29.3.dev33
2
2
  zarr
3
3
  imagecodecs-numcodecs
4
4
 
@@ -6,4 +6,4 @@ imagecodecs-numcodecs
6
6
  large-image-converter
7
7
 
8
8
  [girder]
9
- girder-large-image>=1.29.3.dev24
9
+ girder-large-image>=1.29.3.dev33