geoseeq 0.5.6a9__py3-none-any.whl → 0.5.6a10__py3-none-any.whl
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.
- geoseeq/cli/download.py +8 -3
- geoseeq/cli/main.py +1 -1
- geoseeq/result/file_upload.py +12 -6
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/METADATA +1 -1
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/RECORD +9 -9
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/LICENSE +0 -0
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/WHEEL +0 -0
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/entry_points.txt +0 -0
- {geoseeq-0.5.6a9.dist-info → geoseeq-0.5.6a10.dist-info}/top_level.txt +0 -0
geoseeq/cli/download.py
CHANGED
@@ -97,13 +97,14 @@ def cli_download_metadata(state, sample_ids):
|
|
97
97
|
|
98
98
|
|
99
99
|
cores_option = click.option('--cores', default=1, help='Number of downloads to run in parallel')
|
100
|
-
|
100
|
+
head_option = click.option('--head', default=None, type=int, help='Download the first N bytes of each file')
|
101
101
|
|
102
102
|
@cli_download.command("files")
|
103
103
|
@use_common_state
|
104
104
|
@cores_option
|
105
105
|
@click.option("--target-dir", default=".")
|
106
106
|
@yes_option
|
107
|
+
@head_option
|
107
108
|
@click.option("--download/--urls-only", default=True, help="Download files or just print urls")
|
108
109
|
@click.option("--folder-type", type=click.Choice(['all', 'sample', 'project'], case_sensitive=False), default="all", help='Download files from sample folders, project folders, or both')
|
109
110
|
@click.option("--folder-name", multiple=True, help='Filter folders for names that include this string. Case insensitive.')
|
@@ -120,6 +121,7 @@ def cli_download_files(
|
|
120
121
|
sample_name_includes,
|
121
122
|
target_dir,
|
122
123
|
yes,
|
124
|
+
head,
|
123
125
|
folder_type,
|
124
126
|
folder_name,
|
125
127
|
file_name,
|
@@ -213,6 +215,7 @@ def cli_download_files(
|
|
213
215
|
ignore_errors=ignore_errors,
|
214
216
|
log_level=state.log_level,
|
215
217
|
progress_tracker_factory=PBarManager().get_new_bar,
|
218
|
+
head=head,
|
216
219
|
)
|
217
220
|
for fname, url in response["links"].items():
|
218
221
|
download_manager.add_download(url, join(target_dir, fname))
|
@@ -230,11 +233,12 @@ def cli_download_files(
|
|
230
233
|
@cores_option
|
231
234
|
@click.option("-t", "--target-dir", default=".")
|
232
235
|
@yes_option
|
236
|
+
@head_option
|
233
237
|
@click.option("--download/--urls-only", default=True, help="Download files or just print urls")
|
234
238
|
@ignore_errors_option
|
235
239
|
@click.option('--hidden/--no-hidden', default=True, help='Download hidden files in folder')
|
236
240
|
@folder_ids_arg
|
237
|
-
def cli_download_folders(state, cores, target_dir, yes, download, ignore_errors, hidden, folder_ids):
|
241
|
+
def cli_download_folders(state, cores, target_dir, yes, head, download, ignore_errors, hidden, folder_ids):
|
238
242
|
"""Download entire folders from GeoSeeq.
|
239
243
|
|
240
244
|
This command downloads folders directly based on their ID. This is used for "manual"
|
@@ -267,6 +271,7 @@ def cli_download_folders(state, cores, target_dir, yes, download, ignore_errors,
|
|
267
271
|
ignore_errors=ignore_errors,
|
268
272
|
log_level=state.log_level,
|
269
273
|
progress_tracker_factory=PBarManager().get_new_bar,
|
274
|
+
head=head,
|
270
275
|
)
|
271
276
|
for result_folder in result_folders:
|
272
277
|
download_manager.add_result_folder_download(
|
@@ -286,7 +291,7 @@ def cli_download_folders(state, cores, target_dir, yes, download, ignore_errors,
|
|
286
291
|
@click.option("-n", "--file-name", multiple=True, help="File name to use for downloaded files. If set you must specify once per ID.")
|
287
292
|
@yes_option
|
288
293
|
@click.option("--download/--urls-only", default=True, help="Download files or just print urls")
|
289
|
-
@
|
294
|
+
@head_option
|
290
295
|
@ignore_errors_option
|
291
296
|
@click.argument("ids", nargs=-1)
|
292
297
|
def cli_download_ids(state, cores, target_dir, file_name, yes, download, head, ignore_errors, ids):
|
geoseeq/cli/main.py
CHANGED
@@ -53,7 +53,7 @@ def version():
|
|
53
53
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
54
54
|
Run `geoseeq eula show` to view the EULA.
|
55
55
|
"""
|
56
|
-
click.echo('0.5.
|
56
|
+
click.echo('0.5.6a10') # remember to update setup
|
57
57
|
|
58
58
|
|
59
59
|
@main.group('advanced')
|
geoseeq/result/file_upload.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
import time
|
3
3
|
import json
|
4
4
|
import os
|
5
|
-
from os.path import basename, getsize, join, dirname, isfile
|
5
|
+
from os.path import basename, getsize, join, dirname, isfile, getctime
|
6
6
|
from pathlib import Path
|
7
7
|
|
8
8
|
import requests
|
@@ -49,7 +49,7 @@ class ResumableUploadTracker:
|
|
49
49
|
self.filepath = filepath
|
50
50
|
self.tracker_file = join(
|
51
51
|
GEOSEEQ_CACHE_DIR, 'upload',
|
52
|
-
tracker_file_prefix + f".{chunk_size}." + basename(filepath)
|
52
|
+
tracker_file_prefix + f".{chunk_size}.{getsize(filepath)}." + basename(filepath)
|
53
53
|
)
|
54
54
|
try:
|
55
55
|
os.makedirs(dirname(self.tracker_file), exist_ok=True)
|
@@ -64,7 +64,7 @@ class ResumableUploadTracker:
|
|
64
64
|
return
|
65
65
|
if self.upload_started:
|
66
66
|
raise GeoseeqGeneralError("Upload has already started.")
|
67
|
-
blob = dict(upload_id=upload_id, urls=urls)
|
67
|
+
blob = dict(upload_id=upload_id, urls=urls, start_time=time.time())
|
68
68
|
serialized = json.dumps(blob)
|
69
69
|
with open(self.tracker_file, "w") as f:
|
70
70
|
f.write(serialized + "\n")
|
@@ -89,6 +89,11 @@ class ResumableUploadTracker:
|
|
89
89
|
with open(self.tracker_file, "r") as f:
|
90
90
|
header_blob = json.loads(f.readline())
|
91
91
|
self.upload_id, self.urls = header_blob["upload_id"], header_blob["urls"]
|
92
|
+
start_time = header_blob["start_time"]
|
93
|
+
if (time.time() - start_time) > (60 * 60 * 23):
|
94
|
+
logger.warning(f"Tracker file {self.tracker_file} is too old. Deleting.")
|
95
|
+
os.remove(self.tracker_file)
|
96
|
+
return
|
92
97
|
self.upload_started = True
|
93
98
|
for line in f:
|
94
99
|
blob = json.loads(line)
|
@@ -161,14 +166,15 @@ class ResultFileUpload:
|
|
161
166
|
http_response.raise_for_status()
|
162
167
|
logger.debug(f"Upload for part {num + 1} succeeded.")
|
163
168
|
break
|
164
|
-
except requests.exceptions.HTTPError:
|
165
|
-
logger.
|
169
|
+
except (requests.exceptions.HTTPError, requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
|
170
|
+
logger.debug(
|
166
171
|
f"Upload for part {num + 1} failed. Attempt {attempts + 1} of {max_retries}."
|
167
172
|
)
|
168
173
|
attempts += 1
|
169
174
|
if attempts == max_retries:
|
170
|
-
raise
|
175
|
+
raise e
|
171
176
|
time.sleep(10**attempts) # exponential backoff, (10 ** 2)s default max
|
177
|
+
|
172
178
|
etag = http_response.headers["ETag"].replace('"', "")
|
173
179
|
blob = {"ETag": etag, "PartNumber": num + 1}
|
174
180
|
if resumable_upload_tracker:
|
@@ -19,10 +19,10 @@ geoseeq/cli/__init__.py,sha256=4WnK87K5seRK3SGJAxNWnQTqyg5uBhdhrOrzB1D4b3M,24
|
|
19
19
|
geoseeq/cli/constants.py,sha256=Do5AUf9lMO9_P8KpFJ3XwwFBAWsxSjZ6sx9_QEGyC_c,176
|
20
20
|
geoseeq/cli/copy.py,sha256=02U9kdrAIbbM8MlRMLL6p-LMYFSuRObE3h5jyvcL__M,2275
|
21
21
|
geoseeq/cli/detail.py,sha256=q8Suu-j2k18knfSVFG-SWWGNsKM-n8y9RMA3LcIIi9Y,4132
|
22
|
-
geoseeq/cli/download.py,sha256=
|
22
|
+
geoseeq/cli/download.py,sha256=_upzZo08K0fAPbEsyi1uN0HGNUaY1pl6OoGPcWmvSUY,17765
|
23
23
|
geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
|
24
24
|
geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
|
25
|
-
geoseeq/cli/main.py,sha256=
|
25
|
+
geoseeq/cli/main.py,sha256=xbSTOVLf1iFdw-aUu6l_UEVeiVrPgi9Liylt5UjNRzU,3260
|
26
26
|
geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
|
27
27
|
geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
|
28
28
|
geoseeq/cli/run.py,sha256=bx2AV6VIqOSTlxUda78xl0XxcZ8TXlQx02-e7iLQPwI,3838
|
@@ -64,7 +64,7 @@ geoseeq/plotting/map/overlay.py,sha256=4VmxqOESTQra9tPr8b8OLEUhJSit9lNipabeSznEY
|
|
64
64
|
geoseeq/result/__init__.py,sha256=IFHIyRV8ZzuKIfwfze1SXgcKwNMcSgMAknLHMkwjXIU,356
|
65
65
|
geoseeq/result/bioinfo.py,sha256=QQtbyogrdro9avJSN0713sxLVnVeA24mFw3hWtKDKyw,1782
|
66
66
|
geoseeq/result/file_download.py,sha256=XQA5bdQJJSZIgbFcN09OvVdLq12fnA98kPCIONAkLk0,5568
|
67
|
-
geoseeq/result/file_upload.py,sha256=
|
67
|
+
geoseeq/result/file_upload.py,sha256=D8gbdsyzw5ztjT7Vmq4InxKhyl7l8n2leH4GYVD-seM,12109
|
68
68
|
geoseeq/result/result_file.py,sha256=1Yj9fkZhds3J-tay6eNH2-EHi00MovHGV1M80_ckHD8,8677
|
69
69
|
geoseeq/result/result_folder.py,sha256=6porOXPh7Tpxw3oX5yMRPYQzNCGYqszqmFJd3SwQmTc,11122
|
70
70
|
geoseeq/result/utils.py,sha256=C-CxGzB3WddlnRiqFSkrY78I_m0yFgNqsTBRzGU-y8Q,2772
|
@@ -80,9 +80,9 @@ geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
|
|
80
80
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
81
|
tests/test_api_client.py,sha256=TS5njc5pcPP_Ycy-ljcfPVT1hQRBsFVdQ0lCqBmoesU,12810
|
82
82
|
tests/test_plotting.py,sha256=TcTu-2ARr8sxZJ7wPQxmbs3-gHw7uRvsgrhhhg0qKik,784
|
83
|
-
geoseeq-0.5.
|
84
|
-
geoseeq-0.5.
|
85
|
-
geoseeq-0.5.
|
86
|
-
geoseeq-0.5.
|
87
|
-
geoseeq-0.5.
|
88
|
-
geoseeq-0.5.
|
83
|
+
geoseeq-0.5.6a10.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
|
84
|
+
geoseeq-0.5.6a10.dist-info/METADATA,sha256=RKguQ4reNa4rH6Pv20JBMCbyo2inLjKcO5VFkcCgyxg,4806
|
85
|
+
geoseeq-0.5.6a10.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
86
|
+
geoseeq-0.5.6a10.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
|
87
|
+
geoseeq-0.5.6a10.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
|
88
|
+
geoseeq-0.5.6a10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|