geoseeq 0.4.1__py3-none-any.whl → 0.5.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
geoseeq/cli/main.py CHANGED
@@ -13,7 +13,7 @@ from .view import cli_view
13
13
  from .search import cli_search
14
14
  from geoseeq.vc.cli import cli_vc
15
15
  from geoseeq.knex import DEFAULT_ENDPOINT
16
- from .shared_params.config import set_profile
16
+ from geoseeq.utils import set_profile
17
17
  from .shared_params.opts_and_args import overwrite_option
18
18
  from .detail import cli_detail
19
19
  from .run import cli_app
@@ -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.4.1') # remember to update setup
56
+ click.echo('0.5.0') # remember to update setup
57
57
 
58
58
 
59
59
  @main.group('advanced')
@@ -4,7 +4,7 @@ import click
4
4
  from geoseeq.knex import DEFAULT_ENDPOINT
5
5
 
6
6
  from geoseeq import Knex
7
- from .config import load_profile
7
+ from geoseeq.utils import load_profile
8
8
 
9
9
  logger = logging.getLogger('geoseeq_api')
10
10
 
@@ -24,4 +24,4 @@ org_id_arg = click.argument('org_id', nargs=1)
24
24
  project_id_arg = click.argument('project_id', nargs=1)
25
25
  pipeline_id_arg = click.argument('pipeline_id', nargs=1)
26
26
  sample_ids_arg = click.argument('sample_ids', nargs=-1)
27
- folder_id_arg = click.argument('folder_id', nargs=1)
27
+ folder_id_arg = click.argument('folder_id', nargs=1)
geoseeq/constants.py CHANGED
@@ -1,2 +1,10 @@
1
+ from os import environ
2
+ from os.path import join
3
+
1
4
  FIVE_MB = 5 * (1024 ** 2)
2
- FASTQ_MODULE_NAMES = ['short_read::paired_end', 'short_read::single_end', 'long_read::nanopore']
5
+ FASTQ_MODULE_NAMES = ['short_read::paired_end', 'short_read::single_end', 'long_read::nanopore']
6
+ DEFAULT_ENDPOINT = "https://backend.geoseeq.com"
7
+
8
+ CONFIG_FOLDER = environ.get("XDG_CONFIG_HOME", join(environ["HOME"], ".config"))
9
+ CONFIG_DIR = environ.get("GEOSEEQ_CONFIG_DIR", join(CONFIG_FOLDER, "geoseeq"))
10
+ PROFILES_PATH = join(CONFIG_DIR, "profiles.json")
@@ -1,6 +1,8 @@
1
1
  from geoseeq import GeoseeqNotFoundError
2
+ from geoseeq.knex import with_knex
2
3
 
3
4
 
5
+ @with_knex
4
6
  def org_from_blob(knex, blob, already_fetched=True, modified=False):
5
7
  """Return an Organization object from a blob."""
6
8
  from geoseeq.organization import Organization # import here to avoid circular import
@@ -11,6 +13,7 @@ def org_from_blob(knex, blob, already_fetched=True, modified=False):
11
13
  return org
12
14
 
13
15
 
16
+ @with_knex
14
17
  def project_from_blob(knex, blob, already_fetched=True, modified=False):
15
18
  """Return a Project object from a blob."""
16
19
  org = org_from_blob(
@@ -27,6 +30,7 @@ def project_from_blob(knex, blob, already_fetched=True, modified=False):
27
30
  sample_group_from_blob = project_from_blob # Alias
28
31
 
29
32
 
33
+ @with_knex
30
34
  def sample_from_blob(knex, blob, already_fetched=True, modified=False):
31
35
  """Return a Sample object from a blob."""
32
36
  lib = sample_group_from_blob(
@@ -40,6 +44,7 @@ def sample_from_blob(knex, blob, already_fetched=True, modified=False):
40
44
  return sample
41
45
 
42
46
 
47
+ @with_knex
43
48
  def project_result_folder_from_blob(knex, blob, already_fetched=True, modified=False):
44
49
  """Return a ProjectResultFolder object from a blob."""
45
50
  group = project_from_blob(
@@ -58,6 +63,7 @@ def project_result_folder_from_blob(knex, blob, already_fetched=True, modified=F
58
63
  sample_group_ar_from_blob = project_result_folder_from_blob # Alias
59
64
 
60
65
 
66
+ @with_knex
61
67
  def sample_result_folder_from_blob(knex, blob, already_fetched=True, modified=False):
62
68
  """Return a SampleResultFolder object from a blob."""
63
69
  sample = sample_from_blob(
@@ -76,6 +82,7 @@ def sample_result_folder_from_blob(knex, blob, already_fetched=True, modified=Fa
76
82
  sample_ar_from_blob = sample_result_folder_from_blob # Alias
77
83
 
78
84
 
85
+ @with_knex
79
86
  def sample_result_file_from_blob(knex, blob, already_fetched=True, modified=False):
80
87
  """Return a SampleResultFile object from a blob."""
81
88
  ar = sample_result_folder_from_blob(
@@ -92,6 +99,7 @@ def sample_result_file_from_blob(knex, blob, already_fetched=True, modified=Fals
92
99
  sample_ar_field_from_blob = sample_result_file_from_blob # Alias
93
100
 
94
101
 
102
+ @with_knex
95
103
  def project_result_file_from_blob(knex, blob, already_fetched=True, modified=False):
96
104
  """Return a ProjectResultFile object from a blob."""
97
105
  ar = project_result_folder_from_blob(
@@ -108,6 +116,7 @@ def project_result_file_from_blob(knex, blob, already_fetched=True, modified=Fal
108
116
  sample_group_ar_field_from_blob = project_result_file_from_blob # Alias
109
117
 
110
118
 
119
+ @with_knex
111
120
  def pipeline_from_blob(knex, blob, already_fetched=True, modified=False):
112
121
  """Return a Pipeline object from a blob."""
113
122
  from geoseeq.pipeline import Pipeline # import here to avoid circular import
@@ -120,6 +129,7 @@ def pipeline_from_blob(knex, blob, already_fetched=True, modified=False):
120
129
  app_from_blob = pipeline_from_blob # Alias
121
130
 
122
131
 
132
+ @with_knex
123
133
  def pipeline_run_from_blob(knex, blob, already_fetched=True, modified=False):
124
134
  """Return a Pipeline run object from a blob."""
125
135
  from geoseeq.pipeline import PipelineRun # import here to avoid circular import
@@ -22,6 +22,7 @@ from .from_names import (
22
22
  result_file_from_name,
23
23
  )
24
24
  from .utils import is_grn_or_uuid, is_name
25
+ from geoseeq.knex import with_knex
25
26
 
26
27
 
27
28
  def _generic_from_id(knex, id, from_uuid_func, from_name_func):
@@ -33,31 +34,37 @@ def _generic_from_id(knex, id, from_uuid_func, from_name_func):
33
34
  raise ValueError(f'"{id}" is not a GRN, UUID, or name')
34
35
 
35
36
 
37
+ @with_knex
36
38
  def org_from_id(knex, id):
37
39
  """Return the organization object which the id points to."""
38
40
  return _generic_from_id(knex, id, org_from_uuid, org_from_name)
39
41
 
40
42
 
43
+ @with_knex
41
44
  def project_from_id(knex, id):
42
45
  """Return the project object which the id points to."""
43
46
  return _generic_from_id(knex, id, project_from_uuid, project_from_name)
44
47
 
45
48
 
49
+ @with_knex
46
50
  def sample_from_id(knex, id):
47
51
  """Return the sample object which the id points to."""
48
52
  return _generic_from_id(knex, id, sample_from_uuid, sample_from_name)
49
53
 
50
54
 
55
+ @with_knex
51
56
  def sample_result_folder_from_id(knex, id):
52
57
  """Return the sample result folder object which the id points to."""
53
58
  return _generic_from_id(knex, id, sample_result_folder_from_uuid, sample_result_folder_from_name)
54
59
 
55
60
 
61
+ @with_knex
56
62
  def project_result_folder_from_id(knex, id):
57
63
  """Return the project result folder object which the id points to."""
58
64
  return _generic_from_id(knex, id, project_result_folder_from_uuid, project_result_folder_from_name)
59
65
 
60
66
 
67
+ @with_knex
61
68
  def result_folder_from_id(knex, id):
62
69
  """Return a result folder object which the id points to.
63
70
 
@@ -66,16 +73,19 @@ def result_folder_from_id(knex, id):
66
73
  return _generic_from_id(knex, id, result_folder_from_uuid, result_folder_from_name)
67
74
 
68
75
 
76
+ @with_knex
69
77
  def sample_result_file_from_id(knex, id):
70
78
  """Return the sample result file object which the id points to."""
71
79
  return _generic_from_id(knex, id, sample_result_file_from_uuid, sample_result_file_from_name)
72
80
 
73
81
 
82
+ @with_knex
74
83
  def project_result_file_from_id(knex, id):
75
84
  """Return the project result file object which the id points to."""
76
85
  return _generic_from_id(knex, id, project_result_file_from_uuid, project_result_file_from_name)
77
86
 
78
87
 
88
+ @with_knex
79
89
  def result_file_from_id(knex, id):
80
90
  """Return a result file object which the id points to.
81
91
 
@@ -14,8 +14,10 @@ This makes them more human-readable, but not reliable for permanent references.
14
14
  """
15
15
  from geoseeq.organization import Organization
16
16
  from geoseeq import GeoseeqNotFoundError
17
+ from geoseeq.knex import with_knex
17
18
 
18
19
 
20
+ @with_knex
19
21
  def org_from_name(knex, name):
20
22
  """Return the organization object which the name points to.
21
23
 
@@ -28,6 +30,7 @@ def org_from_name(knex, name):
28
30
  return org
29
31
 
30
32
 
33
+ @with_knex
31
34
  def project_from_name(knex, name):
32
35
  """Return the project object which the name points to.
33
36
 
@@ -41,6 +44,7 @@ def project_from_name(knex, name):
41
44
  return proj
42
45
 
43
46
 
47
+ @with_knex
44
48
  def sample_from_name(knex, name):
45
49
  """Return the sample object which the name points to.
46
50
 
@@ -54,6 +58,7 @@ def sample_from_name(knex, name):
54
58
  return sample
55
59
 
56
60
 
61
+ @with_knex
57
62
  def sample_result_folder_from_name(knex, name):
58
63
  """Return the sample result folder object which the name points to.
59
64
 
@@ -67,6 +72,7 @@ def sample_result_folder_from_name(knex, name):
67
72
  return ar
68
73
 
69
74
 
75
+ @with_knex
70
76
  def project_result_folder_from_name(knex, name):
71
77
  """Return the project result folder object which the name points to.
72
78
 
@@ -80,6 +86,7 @@ def project_result_folder_from_name(knex, name):
80
86
  return rf
81
87
 
82
88
 
89
+ @with_knex
83
90
  def result_folder_from_name(knex, name):
84
91
  """Return a result folder object which the name points to.
85
92
 
@@ -95,6 +102,7 @@ def result_folder_from_name(knex, name):
95
102
  return project_result_folder_from_name(knex, name)
96
103
 
97
104
 
105
+ @with_knex
98
106
  def sample_result_file_from_name(knex, name):
99
107
  """Return the sample result file object which the name points to.
100
108
 
@@ -108,6 +116,7 @@ def sample_result_file_from_name(knex, name):
108
116
  return r_file
109
117
 
110
118
 
119
+ @with_knex
111
120
  def project_result_file_from_name(knex, name):
112
121
  """Return the project result file object which the name points to.
113
122
 
@@ -121,6 +130,7 @@ def project_result_file_from_name(knex, name):
121
130
  return r_file
122
131
 
123
132
 
133
+ @with_knex
124
134
  def result_file_from_name(knex, name):
125
135
  """Return a result file object which the name points to.
126
136
 
@@ -1,8 +1,9 @@
1
1
  from geoseeq import GeoseeqNotFoundError
2
-
2
+ from geoseeq.knex import with_knex
3
3
  from .from_blobs import *
4
4
 
5
5
 
6
+ @with_knex
6
7
  def org_from_uuid(knex, uuid):
7
8
  """Return the organization object which the uuid points to."""
8
9
  blob = knex.get(f"organizations/{uuid}")
@@ -10,6 +11,7 @@ def org_from_uuid(knex, uuid):
10
11
  return org
11
12
 
12
13
 
14
+ @with_knex
13
15
  def project_from_uuid(knex, uuid):
14
16
  """Return the project object which the uuid points to."""
15
17
  blob = knex.get(f"sample_groups/{uuid}")
@@ -20,6 +22,7 @@ def project_from_uuid(knex, uuid):
20
22
  sample_group_from_uuid = project_from_uuid # Alias
21
23
 
22
24
 
25
+ @with_knex
23
26
  def sample_from_uuid(knex, uuid):
24
27
  """Return the sample object which the uuid points to."""
25
28
  blob = knex.get(f"samples/{uuid}")
@@ -27,6 +30,7 @@ def sample_from_uuid(knex, uuid):
27
30
  return sample
28
31
 
29
32
 
33
+ @with_knex
30
34
  def sample_result_folder_from_uuid(knex, uuid):
31
35
  """Return the sample result folder object which the uuid points to."""
32
36
  blob = knex.get(f"sample_ars/{uuid}")
@@ -37,6 +41,7 @@ def sample_result_folder_from_uuid(knex, uuid):
37
41
  sample_ar_from_uuid = sample_result_folder_from_uuid # Alias
38
42
 
39
43
 
44
+ @with_knex
40
45
  def project_result_folder_from_uuid(knex, uuid):
41
46
  """Return the project result folder object which the uuid points to."""
42
47
  blob = knex.get(f"sample_group_ars/{uuid}")
@@ -47,6 +52,7 @@ def project_result_folder_from_uuid(knex, uuid):
47
52
  sample_group_ar_from_uuid = project_result_folder_from_uuid # Alias
48
53
 
49
54
 
55
+ @with_knex
50
56
  def result_folder_from_uuid(knex, uuid):
51
57
  """Return a result folder object which the uuid points to.
52
58
 
@@ -58,6 +64,7 @@ def result_folder_from_uuid(knex, uuid):
58
64
  return project_result_folder_from_uuid(knex, uuid)
59
65
 
60
66
 
67
+ @with_knex
61
68
  def sample_result_file_from_uuid(knex, uuid):
62
69
  """Return the sample result file object which the uuid points to."""
63
70
  blob = knex.get(f"sample_ar_fields/{uuid}")
@@ -68,6 +75,7 @@ def sample_result_file_from_uuid(knex, uuid):
68
75
  sample_ar_field_from_uuid = sample_result_file_from_uuid # Alias
69
76
 
70
77
 
78
+ @with_knex
71
79
  def project_result_file_from_uuid(knex, uuid):
72
80
  """Return the project result file object which the uuid points to."""
73
81
  blob = knex.get(f"sample_group_ar_fields/{uuid}")
@@ -78,6 +86,7 @@ def project_result_file_from_uuid(knex, uuid):
78
86
  sample_group_ar_field_from_uuid = project_result_file_from_uuid # Alias
79
87
 
80
88
 
89
+ @with_knex
81
90
  def result_file_from_uuid(knex, uuid):
82
91
  """Return a result file object which the uuid points to.
83
92
 
@@ -89,6 +98,7 @@ def result_file_from_uuid(knex, uuid):
89
98
  return project_result_file_from_uuid(knex, uuid)
90
99
 
91
100
 
101
+ @with_knex
92
102
  def pipeline_from_uuid(knex, uuid):
93
103
  """Return the pipeline object which the uuid points to."""
94
104
  blob = knex.get(f"pipelines/{uuid}")
@@ -99,6 +109,7 @@ def pipeline_from_uuid(knex, uuid):
99
109
  app_from_uuid = pipeline_from_uuid # Alias
100
110
 
101
111
 
112
+ @with_knex
102
113
  def pipeline_run_from_uuid(knex, uuid):
103
114
  """Return a pipeline run object which the uuid points to."""
104
115
  blob = knex.get(f"app_runs/{uuid}")
@@ -22,8 +22,10 @@ from .from_names import (
22
22
  result_file_from_name,
23
23
  )
24
24
  from .utils import is_name, is_grn
25
+ from geoseeq.knex import with_knex
25
26
 
26
27
 
28
+ @with_knex
27
29
  def resolve_id(knex, id):
28
30
  """Return the object which the id points to."""
29
31
  if is_grn(id):
@@ -33,6 +35,7 @@ def resolve_id(knex, id):
33
35
  raise ValueError(f'"{id}" is not a GRN, or name. UUIDs cannot be resolved without a type')
34
36
 
35
37
 
38
+ @with_knex
36
39
  def resolve_name(knex, name):
37
40
  """Return the object which the name points to."""
38
41
  assert is_name(name), f'"{name}" is not a name'
@@ -56,6 +59,7 @@ def resolve_name(knex, name):
56
59
  raise GeoseeqNotFoundError(f'Name "{name}" not found')
57
60
 
58
61
 
62
+ @with_knex
59
63
  def resolve_grn(knex, grn):
60
64
  """Return the object which the grn points to."""
61
65
  assert is_grn(grn), f'"{grn}" is not a GRN'
geoseeq/knex.py CHANGED
@@ -2,8 +2,8 @@ import logging
2
2
  import requests
3
3
  from os import environ
4
4
  from .file_system_cache import FileSystemCache
5
-
6
- DEFAULT_ENDPOINT = "https://backend.geoseeq.com"
5
+ from geoseeq.utils import load_auth_profile
6
+ from geoseeq.constants import DEFAULT_ENDPOINT
7
7
 
8
8
 
9
9
  logger = logging.getLogger("geoseeq_api") # Same name as calling module
@@ -205,3 +205,36 @@ class Knex:
205
205
  response = self.sess.delete(f"{self.endpoint_url}/{url}", json=json)
206
206
  logger.debug(f"DELETE request response:\n{response}")
207
207
  return self._handle_response(response, json_response=False, **kwargs)
208
+
209
+ @classmethod
210
+ def load_profile(cls, profile=""):
211
+ """Return a knex authenticated with a profile."""
212
+ endpoint, token = load_auth_profile(profile)
213
+ knex = cls(endpoint)
214
+ knex.add_api_token(token)
215
+ return knex
216
+
217
+
218
+ def with_knex(func):
219
+ def wrapper(*args, **kwargs):
220
+ # check if any of the arguments are a knex instance
221
+ any_knex = any([isinstance(arg, Knex) for arg in args])
222
+ if any_knex:
223
+ return func(*args, **kwargs)
224
+ else:
225
+ varnames = [
226
+ varname for varname in func.__code__.co_varnames
227
+ if varname != "knex"
228
+ ]
229
+ kwargs.update(zip(varnames, args))
230
+ if "knex" not in kwargs:
231
+ profile = kwargs.pop("profile", "")
232
+ kwargs['knex'] = Knex.load_profile(profile=profile)
233
+ # reorder kwargs to match the function signature
234
+ reordered = {
235
+ key: kwargs[key] for key in func.__code__.co_varnames
236
+ if key in kwargs
237
+ }
238
+ return func(**reordered)
239
+ return wrapper
240
+
geoseeq/utils.py CHANGED
@@ -4,11 +4,47 @@ import logging
4
4
  from ftplib import FTP
5
5
  from threading import Timer
6
6
  from .file_system_cache import FileSystemCache
7
+ from os.path import join, exists
8
+ import json
9
+ from os import environ, makedirs
10
+ from .constants import CONFIG_DIR, PROFILES_PATH, DEFAULT_ENDPOINT
7
11
 
8
12
  logger = logging.getLogger('geoseeq_api') # Same name as calling module
9
13
  logger.addHandler(logging.NullHandler()) # No output unless configured by calling program
10
14
 
11
15
 
16
+ def load_auth_profile(profile=""):
17
+ """Return an endpoit and a token"""
18
+ profile = profile or "__default__"
19
+ with open(PROFILES_PATH, "r") as f:
20
+ profiles = json.load(f)
21
+ if profile in profiles:
22
+ return profiles[profile]["endpoint"], profiles[profile]["token"]
23
+ raise KeyError(f"Profile {profile} not found.")
24
+
25
+
26
+ def set_profile(token, endpoint=DEFAULT_ENDPOINT, profile="", overwrite=False):
27
+ """Write a profile to a config file.
28
+
29
+ Raises KeyError if profile already exists.
30
+ """
31
+ if not exists(PROFILES_PATH):
32
+ makedirs(CONFIG_DIR)
33
+ with open(PROFILES_PATH, "w") as f:
34
+ json.dump({}, f)
35
+ with open(PROFILES_PATH, "r") as f:
36
+ profiles = json.load(f)
37
+ profile = profile or "__default__"
38
+ if profile in profiles and not overwrite:
39
+ raise KeyError(f"Profile {profile} already exists.")
40
+ profiles[profile] = {
41
+ "token": token,
42
+ "endpoint": endpoint,
43
+ }
44
+ with open(PROFILES_PATH, "w") as f:
45
+ json.dump(profiles, f, indent=4)
46
+
47
+
12
48
  def paginated_iterator(knex, initial_url, error_handler=None):
13
49
  cache = FileSystemCache()
14
50
  result = cache.get_cached_blob(initial_url)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: geoseeq
3
- Version: 0.4.1
3
+ Version: 0.5.0
4
4
  Summary: # Geoseeq API Client
5
5
  Author: David C. Danko
6
6
  Author-email: dcdanko@biotia.io
@@ -2,9 +2,9 @@ geoseeq/__init__.py,sha256=FxA5ioZVxUR3XAjllE5F2mtcUk8NDSBD-VYmMp6U254,864
2
2
  geoseeq/app.py,sha256=Y6d1UzxFLfE3RNccATbFCVi6kH3eFmzwoUbeR2Ry09A,2387
3
3
  geoseeq/blob_constructors.py,sha256=AkWpDQY0EdGMxF1p6eRspyHKubcUdiW4it-_Q7S2QWk,188
4
4
  geoseeq/bulk_creators.py,sha256=pdn-Dv7yv5SFv-PfDuQbuOnw2W4-BfIfRJVRAhM8U6s,2115
5
- geoseeq/constants.py,sha256=2sO50sItJsBCHFvfUCvB2NziQnJKG6lFOFDMu3IHzaw,122
5
+ geoseeq/constants.py,sha256=h9RURz4xs2bZyDrSGocej7ANJvRLr_H1H7JRxpNUXJM,431
6
6
  geoseeq/file_system_cache.py,sha256=7pdM-1VncOvjkYv2pOocPHOXnEWz0jKhH6sm1LaXtoU,3405
7
- geoseeq/knex.py,sha256=tPYgb-V7dleI2pKjG3pIoeIE6X5XX50b2zKRqsPlN0s,6732
7
+ geoseeq/knex.py,sha256=6fPO8F8yxgBgBXZiliMJvYYjgf_16chfJPyWLe-kpPk,7898
8
8
  geoseeq/organization.py,sha256=a9xmGDE0tQsjPJfyFkYnWagxZ8xpdeckkwvkhH6LNIk,2462
9
9
  geoseeq/pipeline.py,sha256=89mhWaecsKnm6tyRkdkaVp4dmZh62_v42Ze0oXf8OTY,9873
10
10
  geoseeq/project.py,sha256=NylHnDY8yWP2cyj4eUuLDnu-65UfjD5ehABQFww7W9g,13660
@@ -12,7 +12,7 @@ geoseeq/remote_object.py,sha256=6owZTIubA2wwbA4AiL0HdfWDMpZjOhUgqv_KxNG2XZg,6613
12
12
  geoseeq/sample.py,sha256=TRz3zqTX8cK4xIicbqLGS4hAmMfsnNhDBCcHqquKdLg,7069
13
13
  geoseeq/search.py,sha256=gawad6Cx5FxJBPlYkXWb-UKAO-UC0_yhvyU9Ca1kaNI,3388
14
14
  geoseeq/user.py,sha256=tol8i1UGLRrbMw5jeJDnna1ikRgrCDd50Jxz0a1lSgg,690
15
- geoseeq/utils.py,sha256=S5V4ybms-3SPQ6GRdCsKNli--yuzYuDVGBw02r4MJ-Q,2387
15
+ geoseeq/utils.py,sha256=PDRiEQIZYTcfEV9AYvloQVvfqs5JaebcFZodAa2SUW8,3577
16
16
  geoseeq/work_orders.py,sha256=5uLVVfdKE8qh4gGaHkdBpXJGRTujuSg59knWCqEET4A,8071
17
17
  geoseeq/cli/__init__.py,sha256=4WnK87K5seRK3SGJAxNWnQTqyg5uBhdhrOrzB1D4b3M,24
18
18
  geoseeq/cli/constants.py,sha256=Do5AUf9lMO9_P8KpFJ3XwwFBAWsxSjZ6sx9_QEGyC_c,176
@@ -21,7 +21,7 @@ geoseeq/cli/detail.py,sha256=q8Suu-j2k18knfSVFG-SWWGNsKM-n8y9RMA3LcIIi9Y,4132
21
21
  geoseeq/cli/download.py,sha256=tOEy6zRWN_m8UBgkD2REFt7jqINSyA-o-w8eKACetdM,16212
22
22
  geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
23
23
  geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
24
- geoseeq/cli/main.py,sha256=x8yDy-rSb4lSdhXAYvcbRq0I0BYJB5llHS1mwwSmlMs,2916
24
+ geoseeq/cli/main.py,sha256=ZIitwb0FmonOAizsRum9NxB0vj7zq13v4qzaKR4_hzo,2908
25
25
  geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
26
26
  geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
27
27
  geoseeq/cli/run.py,sha256=bx2AV6VIqOSTlxUda78xl0XxcZ8TXlQx02-e7iLQPwI,3838
@@ -30,11 +30,11 @@ geoseeq/cli/user.py,sha256=fARv_5vx-QYT765Hsjgwr6J5ddA_viCPQdv9iUoVX6w,925
30
30
  geoseeq/cli/utils.py,sha256=f0wX5-19uDrYZ8d-aBLplqfbGOkr5BH8x3AMSAyPCes,2873
31
31
  geoseeq/cli/view.py,sha256=P-o2YKBkTrPzSI-JOv7xROc63HLSUygZNZsjp9TGvSw,6783
32
32
  geoseeq/cli/shared_params/__init__.py,sha256=dfnfWjYIHyKkeewhCl4SzKA31bCQQNp31TOdAHwn4YY,255
33
- geoseeq/cli/shared_params/common_state.py,sha256=gK01o4AcVg8qrJ8mREX7TEoEfr6q59geRNYSHns1fvw,3534
33
+ geoseeq/cli/shared_params/common_state.py,sha256=pZVaoJ4M4DFKF6Yfhqmj3TCjiezlKLsC8T-v58_rxNI,3540
34
34
  geoseeq/cli/shared_params/config.py,sha256=06KrZhC3zljveo_21YvaZPcKIzyDBGHT_Yr79prr3eE,1412
35
35
  geoseeq/cli/shared_params/id_handlers.py,sha256=rG6Wq2nYc0Pdu9MDNzV7PxiYj0lGHMRjSOyJKifpbGw,7195
36
36
  geoseeq/cli/shared_params/obj_getters.py,sha256=ZSkt6LnDkVFlNVYKgLrjzg60-6BthZMr3eeD3HNqzac,2741
37
- geoseeq/cli/shared_params/opts_and_args.py,sha256=HM-4NFodH7zkbyG7EAvazb5wu5gYXWVs9Oaqd2lsHfI,1580
37
+ geoseeq/cli/shared_params/opts_and_args.py,sha256=6nytDMCcNqbIKZNiA4LfSPAKz7yImRc_w2qZkoPpIt8,1581
38
38
  geoseeq/cli/upload/__init__.py,sha256=Wf30XGLllFFnnfeOnpYsO3SXyaq8yclHcYxGUNdSh6o,562
39
39
  geoseeq/cli/upload/upload.py,sha256=Ikly-vfLzDXpaMpyFTim1CfgqNjtrnRQHgOMi_7JubU,6367
40
40
  geoseeq/cli/upload/upload_advanced.py,sha256=Jq5eGe-wOdrzxGWVwaFPg0BAJcW0YSx_eHEmYjJeKuA,3434
@@ -46,11 +46,11 @@ geoseeq/contrib/ncbi/bioproject.py,sha256=_oThTd_iLDOC8cLOlJKAatSr362OBYZCEV3Yrq
46
46
  geoseeq/contrib/ncbi/cli.py,sha256=j9zEcaZPTryK3a4xluRxigcJKDhRpRxbp3KZSx-Bfhk,2400
47
47
  geoseeq/contrib/ncbi/setup_logging.py,sha256=Tp1bY1U0f-o739aHpvVYriG2qdd1lFvCYBXZeXQgt-w,175
48
48
  geoseeq/id_constructors/__init__.py,sha256=w5E0PNQ9UuAxBeZbDI7KBnUoERd85gGz3nScz45bd2o,126
49
- geoseeq/id_constructors/from_blobs.py,sha256=KC1paQQTy8NnL1mW5c0waI8DKghanyPY4X12kncwgB4,5043
50
- geoseeq/id_constructors/from_ids.py,sha256=xFv_TeXpN03ajQTSUVeaiXQFoB5M_QIf0SlX09rW3sM,2916
51
- geoseeq/id_constructors/from_names.py,sha256=Ikx2nsjIt_7-v1_2zGZZdkCQwXv8faZjSAyws5aHTSI,4040
52
- geoseeq/id_constructors/from_uuids.py,sha256=eCK9GqAhBmmxd-aZFVtBO7QZq3e4UxRCJaBBS_sSOGQ,3150
53
- geoseeq/id_constructors/resolvers.py,sha256=zTp4uWFkThj4GhlPVnFTt7JQ7dmmUD9vRyIbTJpPcRU,2608
49
+ geoseeq/id_constructors/from_blobs.py,sha256=uuFSG99_5R2JrN2rNj_vKWOT-I7h80y_w8ANSjawiSc,5177
50
+ geoseeq/id_constructors/from_ids.py,sha256=zBAKTzv1ZY9kCKl1QBTWsKg610nCVQgJ0IA9c1umd40,3050
51
+ geoseeq/id_constructors/from_names.py,sha256=RqgFjDsAwQcidMkZwX7oB00OvBAKTiilHYetTPogJ40,4174
52
+ geoseeq/id_constructors/from_uuids.py,sha256=5NrQoRBNBfiB48SIB6QFZvO0lxNrxAHbu1MDkNRSu_4,3305
53
+ geoseeq/id_constructors/resolvers.py,sha256=8hp5xJSCoZrAXtMT54Hp4okt63l909XqJU3IQx-VCgc,2676
54
54
  geoseeq/id_constructors/utils.py,sha256=CKlZHGMiqi1b6r1KtgD3czSAomH99Gdfx5ziqaahz-0,723
55
55
  geoseeq/plotting/__init__.py,sha256=RkGoXxgu7jEfK0B7NmdalPS2AbU7I7dZwDbi4rn9CKM,154
56
56
  geoseeq/plotting/constants.py,sha256=CGUlm8WAFG3YRKdicc9Rcy5hFxUdUm2RgK0iXZWLuX8,285
@@ -79,9 +79,9 @@ geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
79
79
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  tests/test_api_client.py,sha256=TS5njc5pcPP_Ycy-ljcfPVT1hQRBsFVdQ0lCqBmoesU,12810
81
81
  tests/test_plotting.py,sha256=TcTu-2ARr8sxZJ7wPQxmbs3-gHw7uRvsgrhhhg0qKik,784
82
- geoseeq-0.4.1.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
83
- geoseeq-0.4.1.dist-info/METADATA,sha256=lvj62JYFllTPvEwXSXB_ihkfG6inmD-be60zQZ-zzY8,454
84
- geoseeq-0.4.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
85
- geoseeq-0.4.1.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
86
- geoseeq-0.4.1.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
87
- geoseeq-0.4.1.dist-info/RECORD,,
82
+ geoseeq-0.5.0.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
83
+ geoseeq-0.5.0.dist-info/METADATA,sha256=Ys96LvjvqsNyOfAgaHy4Y-RnN0qdc8UQ_VS0h89Icaw,454
84
+ geoseeq-0.5.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
85
+ geoseeq-0.5.0.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
86
+ geoseeq-0.5.0.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
87
+ geoseeq-0.5.0.dist-info/RECORD,,