geoseeq 0.5.6a9__py3-none-any.whl → 0.5.6a10__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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
- @click.option('--head', default=None, type=int, help='Download the first N bytes of each file')
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.6a9') # remember to update setup
56
+ click.echo('0.5.6a10') # remember to update setup
57
57
 
58
58
 
59
59
  @main.group('advanced')
@@ -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.warn(
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:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geoseeq
3
- Version: 0.5.6a9
3
+ Version: 0.5.6a10
4
4
  Summary: GeoSeeq command line tools and python API
5
5
  Author: David C. Danko
6
6
  Author-email: "David C. Danko" <dcdanko@biotia.io>
@@ -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=ldpqpnRe00utb1EL1T_5CyPbFrZbtauIvOSOHtxz9qc,17656
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=7-OOKwxZ6npzer0KlnGDjjOzFLHlzQYZIgCpxICrkFg,3259
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=60flgzJ8KZ-EhDfKJEiBf305JmELaJdwoYRXzFIyQWk,11696
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.6a9.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
84
- geoseeq-0.5.6a9.dist-info/METADATA,sha256=kej6OxkIxWfdo77ei6qzYJ1kO8R9lV7llK-Kd8FkXwA,4805
85
- geoseeq-0.5.6a9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
86
- geoseeq-0.5.6a9.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
87
- geoseeq-0.5.6a9.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
88
- geoseeq-0.5.6a9.dist-info/RECORD,,
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,,