cloud-files 6.0.0__tar.gz → 6.1.1__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.
- {cloud_files-6.0.0 → cloud_files-6.1.1}/ChangeLog +12 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/PKG-INFO +1 -1
- {cloud_files-6.0.0 → cloud_files-6.1.1}/automated_test.py +18 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/PKG-INFO +1 -1
- cloud_files-6.1.1/cloud_files.egg-info/pbr.json +1 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/interfaces.py +8 -8
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/scheduler.py +3 -2
- cloud_files-6.0.0/cloud_files.egg-info/pbr.json +0 -1
- {cloud_files-6.0.0 → cloud_files-6.1.1}/.github/workflows/test-suite.yml +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/AUTHORS +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/LICENSE +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/MANIFEST.in +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/README.md +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/SOURCES.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/dependency_links.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/entry_points.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/not-zip-safe +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/requires.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloud_files.egg-info/top_level.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/__init__.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/cloudfiles.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/compression.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/connectionpools.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/exceptions.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/gcs.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/lib.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/monitoring.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/paths.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/resumable_tools.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/secrets.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/test.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/threaded_queue.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles/typing.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles_cli/LICENSE +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles_cli/__init__.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/cloudfiles_cli/cloudfiles_cli.py +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/requirements.txt +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/setup.cfg +0 -0
- {cloud_files-6.0.0 → cloud_files-6.1.1}/setup.py +0 -0
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
+
6.1.1
|
|
5
|
+
-----
|
|
6
|
+
|
|
7
|
+
* fix(gcs): prefixes added back into listing files
|
|
8
|
+
* fix: don't print a progress bar when uploading zero elements
|
|
9
|
+
|
|
10
|
+
6.1.0
|
|
11
|
+
-----
|
|
12
|
+
|
|
13
|
+
* test: check that raw objects work for mem
|
|
14
|
+
* feat: allow for storing python objects in mem to avoid serialization cost
|
|
15
|
+
|
|
4
16
|
6.0.0
|
|
5
17
|
-----
|
|
6
18
|
|
|
@@ -128,6 +128,24 @@ def test_read_write(s3, protocol, num_threads, green):
|
|
|
128
128
|
if protocol == 'file':
|
|
129
129
|
rmtree(url)
|
|
130
130
|
|
|
131
|
+
def test_read_write_py_objects_mem():
|
|
132
|
+
from cloudfiles import CloudFiles, CloudFile, exceptions
|
|
133
|
+
url = compute_url("mem", "rw")
|
|
134
|
+
|
|
135
|
+
cf = CloudFiles(url)
|
|
136
|
+
|
|
137
|
+
content = set([1,2,3])
|
|
138
|
+
cf.put('my_set', content, compress=None, raw=True, cache_control='no-cache')
|
|
139
|
+
cf['my_set2'] = content
|
|
140
|
+
|
|
141
|
+
f = CloudFile(cf.join(url, "my_set"))
|
|
142
|
+
assert cf.get('my_set') == content
|
|
143
|
+
assert cf['my_set2'] == content
|
|
144
|
+
assert f.get() == content
|
|
145
|
+
assert cf.get('nonexistentfile') is None
|
|
146
|
+
|
|
147
|
+
cf.delete(["my_set", "my_set2"])
|
|
148
|
+
|
|
131
149
|
@pytest.mark.parametrize("protocol", ('mem', 'file', 's3'))#'gs'))
|
|
132
150
|
def test_get_json_order(s3, protocol):
|
|
133
151
|
from cloudfiles import CloudFiles
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "50dc4ad", "is_release": true}
|
|
@@ -446,11 +446,12 @@ class MemoryInterface(StorageInterface):
|
|
|
446
446
|
elif compress:
|
|
447
447
|
raise ValueError("Compression type {} not supported.".format(compress))
|
|
448
448
|
|
|
449
|
-
if
|
|
450
|
-
|
|
451
|
-
and
|
|
452
|
-
and
|
|
453
|
-
|
|
449
|
+
if (
|
|
450
|
+
isinstance(content, str)
|
|
451
|
+
and len(content) > 0
|
|
452
|
+
and content_type
|
|
453
|
+
and re.search('json|te?xt', content_type)
|
|
454
|
+
):
|
|
454
455
|
content = content.encode('utf-8')
|
|
455
456
|
|
|
456
457
|
if hasattr(content, "read") and hasattr(content, "seek"):
|
|
@@ -480,7 +481,7 @@ class MemoryInterface(StorageInterface):
|
|
|
480
481
|
encoding = None
|
|
481
482
|
|
|
482
483
|
result = self._data.get(path, None)
|
|
483
|
-
if result:
|
|
484
|
+
if isinstance(result, (bytes, bytearray, str)):
|
|
484
485
|
result = result[slice(start, end)]
|
|
485
486
|
return (result, encoding, None, None)
|
|
486
487
|
|
|
@@ -850,7 +851,7 @@ class GoogleCloudStorageInterface(StorageInterface):
|
|
|
850
851
|
prefix=path,
|
|
851
852
|
delimiter=delimiter,
|
|
852
853
|
page_size=2500,
|
|
853
|
-
fields="items(name),nextPageToken",
|
|
854
|
+
fields="items(name),nextPageToken,prefixes",
|
|
854
855
|
)
|
|
855
856
|
|
|
856
857
|
for page in blobs.pages:
|
|
@@ -869,7 +870,6 @@ class GoogleCloudStorageInterface(StorageInterface):
|
|
|
869
870
|
elif flat and '/' not in blob.name.removeprefix(path):
|
|
870
871
|
yield filename
|
|
871
872
|
|
|
872
|
-
|
|
873
873
|
@retry
|
|
874
874
|
def subtree_size(self, prefix:str = "") -> tuple[int,int]:
|
|
875
875
|
layer_path = self.get_path_to_file("")
|
|
@@ -98,9 +98,10 @@ def schedule_single_threaded_jobs(
|
|
|
98
98
|
if isinstance(progress, tqdm):
|
|
99
99
|
pbar = progress
|
|
100
100
|
else:
|
|
101
|
+
N = totalfn(fns, total)
|
|
101
102
|
pbar = tqdm(
|
|
102
|
-
total=
|
|
103
|
-
disable=(not progress),
|
|
103
|
+
total=N,
|
|
104
|
+
disable=(not progress or N == 0),
|
|
104
105
|
desc=(progress if isinstance(progress, str) else None)
|
|
105
106
|
)
|
|
106
107
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"git_version": "38a2b59", "is_release": true}
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|