cloud-files 5.0.2__tar.gz → 5.1.0__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 (37) hide show
  1. {cloud_files-5.0.2 → cloud_files-5.1.0}/ChangeLog +12 -0
  2. {cloud_files-5.0.2 → cloud_files-5.1.0}/PKG-INFO +1 -1
  3. {cloud_files-5.0.2 → cloud_files-5.1.0}/automated_test.py +7 -0
  4. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/PKG-INFO +1 -1
  5. cloud_files-5.1.0/cloud_files.egg-info/pbr.json +1 -0
  6. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/cloudfiles.py +1 -1
  7. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/interfaces.py +12 -6
  8. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/paths.py +6 -0
  9. cloud_files-5.0.2/cloud_files.egg-info/pbr.json +0 -1
  10. {cloud_files-5.0.2 → cloud_files-5.1.0}/.github/workflows/test-suite.yml +0 -0
  11. {cloud_files-5.0.2 → cloud_files-5.1.0}/AUTHORS +0 -0
  12. {cloud_files-5.0.2 → cloud_files-5.1.0}/LICENSE +0 -0
  13. {cloud_files-5.0.2 → cloud_files-5.1.0}/MANIFEST.in +0 -0
  14. {cloud_files-5.0.2 → cloud_files-5.1.0}/README.md +0 -0
  15. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/SOURCES.txt +0 -0
  16. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/dependency_links.txt +0 -0
  17. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/entry_points.txt +0 -0
  18. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/not-zip-safe +0 -0
  19. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/requires.txt +0 -0
  20. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloud_files.egg-info/top_level.txt +0 -0
  21. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/__init__.py +0 -0
  22. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/compression.py +0 -0
  23. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/connectionpools.py +0 -0
  24. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/exceptions.py +0 -0
  25. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/gcs.py +0 -0
  26. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/lib.py +0 -0
  27. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/resumable_tools.py +0 -0
  28. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/scheduler.py +0 -0
  29. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/secrets.py +0 -0
  30. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/threaded_queue.py +0 -0
  31. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles/typing.py +0 -0
  32. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles_cli/LICENSE +0 -0
  33. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles_cli/__init__.py +0 -0
  34. {cloud_files-5.0.2 → cloud_files-5.1.0}/cloudfiles_cli/cloudfiles_cli.py +0 -0
  35. {cloud_files-5.0.2 → cloud_files-5.1.0}/requirements.txt +0 -0
  36. {cloud_files-5.0.2 → cloud_files-5.1.0}/setup.cfg +0 -0
  37. {cloud_files-5.0.2 → cloud_files-5.1.0}/setup.py +0 -0
@@ -1,6 +1,18 @@
1
1
  CHANGES
2
2
  =======
3
3
 
4
+ 5.1.0
5
+ -----
6
+
7
+ * fix: remove precomputed suffix from cloudfiles during normalization
8
+ * feat: accept the new |neuroglancer-precomputed: suffix
9
+
10
+ 5.0.3
11
+ -----
12
+
13
+ * docs: describe why this works
14
+ * fix(gcs): flat listing works
15
+
4
16
  5.0.2
5
17
  -----
6
18
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloud-files
3
- Version: 5.0.2
3
+ Version: 5.1.0
4
4
  Summary: Fast access to cloud storage and local FS.
5
5
  Home-page: https://github.com/seung-lab/cloud-files/
6
6
  Author: William Silversmith
@@ -531,6 +531,13 @@ def test_path_extraction():
531
531
 
532
532
  shoulderror('ou3bouqjsa fkj aojsf oaojf ojsaf')
533
533
 
534
+ assert (
535
+ paths.extract('gs://bucket/dataset/layer|neuroglancer-precomputed:')
536
+ == ExtractedPath(
537
+ 'precomputed', 'gs', 'bucket',
538
+ 'dataset/layer', None, None
539
+ ))
540
+
534
541
  okgoogle('gs://bucket/dataset/layer/')
535
542
  # shoulderror('gs://bucket/dataset/layer/info')
536
543
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloud-files
3
- Version: 5.0.2
3
+ Version: 5.1.0
4
4
  Summary: Fast access to cloud storage and local FS.
5
5
  Home-page: https://github.com/seung-lab/cloud-files/
6
6
  Author: William Silversmith
@@ -0,0 +1 @@
1
+ {"git_version": "4678ea6", "is_release": true}
@@ -243,7 +243,7 @@ class CloudFiles:
243
243
  cloudpath = paths.to_https_protocol(cloudpath)
244
244
 
245
245
  cloudpath = paths.normalize(cloudpath)
246
-
246
+
247
247
  self.cloudpath = cloudpath
248
248
  self.progress = progress
249
249
  self.secrets = secrets
@@ -808,18 +808,24 @@ class GoogleCloudStorageInterface(StorageInterface):
808
808
  path = posixpath.join(layer_path, prefix)
809
809
 
810
810
  delimiter = '/' if flat else None
811
+
811
812
  blobs = self._bucket.list_blobs(
812
813
  prefix=path,
813
814
  delimiter=delimiter,
814
815
  )
815
816
 
816
- if blobs.prefixes:
817
- yield from (
818
- item.removeprefix(path)
819
- for item in blobs.prefixes
820
- )
821
-
817
+ first = True
822
818
  for blob in blobs:
819
+ # This awkward construction is necessary
820
+ # because the request that populates prefixes
821
+ # isn't made until the iterator is activated.
822
+ if first and blobs.prefixes:
823
+ yield from (
824
+ item.removeprefix(path)
825
+ for item in blobs.prefixes
826
+ )
827
+ first = False
828
+
823
829
  filename = blob.name.removeprefix(layer_path)
824
830
  if not filename:
825
831
  continue
@@ -18,6 +18,8 @@ ExtractedPath = namedtuple('ExtractedPath',
18
18
  ('format', 'protocol', 'bucket', 'path', 'host', 'alias')
19
19
  )
20
20
 
21
+ PRECOMPUTED_SUFFIX = '|neuroglancer-precomputed:'
22
+
21
23
  ALIAS_FILE = os.path.join(CLOUD_FILES_DIR, "aliases.json")
22
24
  OFFICIAL_ALIASES = {
23
25
  "matrix": "s3://https://s3-hpcrc.rc.princeton.edu/",
@@ -161,6 +163,9 @@ for alias, host in OFFICIAL_ALIASES.items():
161
163
 
162
164
  @lru_cache(maxsize=10, typed=False)
163
165
  def normalize(path):
166
+
167
+ path = path.removesuffix(PRECOMPUTED_SUFFIX)
168
+
164
169
  fmt, proto, endpoint, cloudpath, alias = extract_format_protocol(
165
170
  path, allow_defaults=False
166
171
  )
@@ -294,6 +299,7 @@ def extract_format_protocol(cloudpath:str, allow_defaults=True) -> tuple:
294
299
 
295
300
  groups = m.groups()
296
301
  cloudpath = re.sub(CLOUDPATH_REGEXP, '', cloudpath, count=1)
302
+ cloudpath = cloudpath.removesuffix(PRECOMPUTED_SUFFIX)
297
303
 
298
304
  fmt = m.group('fmt')
299
305
  if not fmt and allow_defaults:
@@ -1 +0,0 @@
1
- {"git_version": "b480c53", "is_release": true}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes