geoseeq 0.7.1__py3-none-any.whl → 0.7.3.dev0__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/main.py +54 -36
- geoseeq/cli/upload/upload.py +2 -2
- geoseeq/dashboard/dashboard.py +110 -23
- geoseeq/project.py +5 -0
- {geoseeq-0.7.1.dist-info → geoseeq-0.7.3.dev0.dist-info}/METADATA +15 -5
- {geoseeq-0.7.1.dist-info → geoseeq-0.7.3.dev0.dist-info}/RECORD +9 -9
- {geoseeq-0.7.1.dist-info → geoseeq-0.7.3.dev0.dist-info}/WHEEL +0 -0
- {geoseeq-0.7.1.dist-info → geoseeq-0.7.3.dev0.dist-info}/entry_points.txt +0 -0
- {geoseeq-0.7.1.dist-info → geoseeq-0.7.3.dev0.dist-info}/licenses/LICENSE +0 -0
geoseeq/cli/main.py
CHANGED
@@ -1,35 +1,33 @@
|
|
1
|
-
|
2
1
|
import logging
|
3
2
|
|
4
3
|
import click
|
5
4
|
|
5
|
+
from geoseeq.knex import DEFAULT_ENDPOINT
|
6
|
+
from geoseeq.utils import set_profile
|
6
7
|
|
7
8
|
from .copy import cli_copy
|
8
|
-
from .
|
9
|
+
from .detail import cli_detail
|
9
10
|
from .download import cli_download
|
11
|
+
from .find_grn import cli_find_grn
|
12
|
+
from .get_eula import cli_eula
|
13
|
+
from .manage import cli_manage
|
14
|
+
from .run import cli_app
|
15
|
+
from .search import cli_search
|
16
|
+
from .shared_params.opts_and_args import overwrite_option, yes_option
|
10
17
|
from .upload import cli_upload, cli_upload_advanced
|
11
18
|
from .user import cli_user
|
12
19
|
from .view import cli_view
|
13
|
-
from .search import cli_search
|
14
|
-
|
15
|
-
from geoseeq.knex import DEFAULT_ENDPOINT
|
16
|
-
from geoseeq.utils import set_profile
|
17
|
-
from .shared_params.opts_and_args import overwrite_option, yes_option
|
18
|
-
from .detail import cli_detail
|
19
|
-
from .run import cli_app
|
20
|
-
from .get_eula import cli_eula
|
21
|
-
from .find_grn import cli_find_grn
|
22
20
|
|
23
|
-
logger = logging.getLogger(
|
21
|
+
logger = logging.getLogger("geoseeq_api")
|
24
22
|
handler = logging.StreamHandler()
|
25
|
-
handler.setFormatter(logging.Formatter(
|
23
|
+
handler.setFormatter(logging.Formatter("[%(levelname)s] %(name)s :: %(message)s"))
|
26
24
|
logger.addHandler(handler)
|
27
25
|
|
28
26
|
|
29
|
-
@click.group(context_settings={
|
27
|
+
@click.group(context_settings={"show_default": True})
|
30
28
|
def main():
|
31
29
|
"""Command line interface for the GeoSeeq API.
|
32
|
-
|
30
|
+
|
33
31
|
---
|
34
32
|
|
35
33
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
@@ -37,6 +35,7 @@ def main():
|
|
37
35
|
"""
|
38
36
|
pass
|
39
37
|
|
38
|
+
|
40
39
|
main.add_command(cli_download)
|
41
40
|
main.add_command(cli_upload)
|
42
41
|
main.add_command(cli_manage)
|
@@ -46,86 +45,105 @@ main.add_command(cli_app)
|
|
46
45
|
main.add_command(cli_eula)
|
47
46
|
main.add_command(cli_find_grn)
|
48
47
|
|
48
|
+
|
49
49
|
@main.command()
|
50
50
|
def version():
|
51
51
|
"""Print the version of the Geoseeq API being used.
|
52
52
|
|
53
53
|
---
|
54
|
-
|
54
|
+
|
55
55
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
56
56
|
Run `geoseeq eula show` to view the EULA.
|
57
57
|
"""
|
58
|
-
click.echo(
|
58
|
+
click.echo("0.7.3dev0") # remember to update pyproject.toml
|
59
59
|
|
60
60
|
|
61
|
-
@main.group(
|
61
|
+
@main.group("advanced")
|
62
62
|
def cli_advanced():
|
63
63
|
"""Advanced commands."""
|
64
64
|
pass
|
65
65
|
|
66
|
+
|
66
67
|
cli_advanced.add_command(cli_copy)
|
67
68
|
cli_advanced.add_command(cli_user)
|
68
69
|
cli_advanced.add_command(cli_detail)
|
69
70
|
cli_advanced.add_command(cli_upload_advanced)
|
70
71
|
|
71
|
-
|
72
|
+
|
73
|
+
@cli_advanced.group("experimental")
|
72
74
|
def cli_experimental():
|
73
75
|
"""Experimental commands."""
|
74
76
|
pass
|
75
77
|
|
76
78
|
|
77
|
-
|
78
79
|
try:
|
79
80
|
from geoseeq.vc.cli import cli_vc
|
81
|
+
|
80
82
|
from .project import cli_project
|
83
|
+
|
81
84
|
cli_experimental.add_command(cli_vc)
|
82
85
|
cli_advanced.add_command(cli_project)
|
83
86
|
|
84
87
|
except (ModuleNotFoundError, ImportError):
|
85
88
|
pass
|
86
89
|
|
87
|
-
|
90
|
+
|
91
|
+
@main.command("config")
|
88
92
|
@yes_option
|
89
|
-
@click.option(
|
90
|
-
@click.option(
|
91
|
-
@click.option(
|
93
|
+
@click.option("--api-token", default=None, help="The API token to use.")
|
94
|
+
@click.option("--endpoint", default=None, help="The endpoint to use.")
|
95
|
+
@click.option("-p", "--profile", default=None, help="The profile name to use.")
|
92
96
|
@overwrite_option
|
93
97
|
def cli_config(yes, api_token, endpoint, profile, overwrite):
|
94
98
|
"""Configure the GeoSeeq API.
|
95
99
|
|
96
100
|
---
|
97
|
-
|
101
|
+
|
98
102
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
99
103
|
Run `geoseeq eula show` to view the EULA.
|
100
104
|
"""
|
101
105
|
if not profile and not yes:
|
102
|
-
profile = click.prompt(
|
106
|
+
profile = click.prompt(
|
107
|
+
f"Set custom profile name? (Leave blank for default)", default=""
|
108
|
+
).strip(" \"'")
|
103
109
|
if not endpoint:
|
104
110
|
endpoint = DEFAULT_ENDPOINT
|
105
111
|
if not yes:
|
106
|
-
endpoint = click.prompt(
|
112
|
+
endpoint = click.prompt(
|
113
|
+
f"Enter the URL to use for GeoSeeq (Most users can use the default)",
|
114
|
+
default=DEFAULT_ENDPOINT,
|
115
|
+
).strip(" \"'")
|
107
116
|
if not api_token:
|
108
|
-
api_token = click.prompt(
|
117
|
+
api_token = click.prompt(
|
118
|
+
f"Enter your GeoSeeq API token", hide_input=True
|
119
|
+
).strip(" \"'")
|
109
120
|
if not yes:
|
110
|
-
eula_accepted = click.confirm(
|
121
|
+
eula_accepted = click.confirm(
|
122
|
+
(
|
123
|
+
"Have you read and accepted the GeoSeeq End User License "
|
124
|
+
"Agreement? Use `geoseeq eula show` to view the EULA."
|
125
|
+
)
|
126
|
+
)
|
111
127
|
if not eula_accepted:
|
112
|
-
click.echo(
|
128
|
+
click.echo("You must accept the EULA to use the GeoSeeq API.")
|
113
129
|
return
|
114
130
|
set_profile(api_token, endpoint=endpoint, profile=profile, overwrite=overwrite)
|
115
|
-
click.echo(f
|
131
|
+
click.echo(f"Profile configured.")
|
116
132
|
|
117
133
|
|
118
|
-
@main.command(
|
134
|
+
@main.command("clear-cache")
|
119
135
|
@yes_option
|
120
136
|
def cli_clear_cache(yes):
|
121
137
|
"""Clear the local cache.
|
122
138
|
|
123
139
|
---
|
124
|
-
|
140
|
+
|
125
141
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
126
142
|
Run `geoseeq eula show` to view the EULA.
|
127
143
|
"""
|
128
|
-
from geoseeq.file_system_cache import GEOSEEQ_CACHE_DIR
|
129
144
|
import shutil
|
130
|
-
|
131
|
-
|
145
|
+
|
146
|
+
from geoseeq.file_system_cache import GEOSEEQ_CACHE_DIR
|
147
|
+
|
148
|
+
if yes or click.confirm("Are you sure you want to clear the cache?"):
|
149
|
+
shutil.rmtree(GEOSEEQ_CACHE_DIR, ignore_errors=True)
|
geoseeq/cli/upload/upload.py
CHANGED
@@ -128,9 +128,9 @@ def cli_upload_file(state, cores, threads_per_upload, num_retries, chunk_size_mb
|
|
128
128
|
)
|
129
129
|
for geoseeq_file_name, file_path in name_pairs:
|
130
130
|
if isfile(file_path):
|
131
|
-
upload_manager.add_local_file_to_result_folder(result_folder, file_path)
|
131
|
+
upload_manager.add_local_file_to_result_folder(result_folder, file_path, geoseeq_file_name=geoseeq_file_name)
|
132
132
|
elif isdir(file_path) and recursive:
|
133
|
-
upload_manager.add_local_folder_to_result_folder(result_folder, file_path, recursive=recursive, hidden_files=hidden, prefix=file_path)
|
133
|
+
upload_manager.add_local_folder_to_result_folder(result_folder, file_path, recursive=recursive, hidden_files=hidden, prefix=file_path, geoseeq_file_name=geoseeq_file_name)
|
134
134
|
elif isdir(file_path) and not recursive:
|
135
135
|
raise click.UsageError('Cannot upload a folder without --recursive')
|
136
136
|
click.echo(upload_manager.get_preview_string(), err=True)
|
geoseeq/dashboard/dashboard.py
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
1
|
import logging
|
3
|
-
import json
|
4
2
|
from typing import Literal
|
5
|
-
|
6
|
-
from geoseeq.id_constructors import result_file_from_blob
|
3
|
+
|
7
4
|
from geoseeq import ProjectResultFile
|
5
|
+
from geoseeq.id_constructors import result_file_from_blob
|
6
|
+
from geoseeq.remote_object import RemoteObject
|
8
7
|
|
9
8
|
logger = logging.getLogger("geoseeq_api")
|
10
9
|
|
@@ -32,18 +31,29 @@ class Dashboard(RemoteObject):
|
|
32
31
|
|
33
32
|
def _save(self):
|
34
33
|
self.save_tiles()
|
35
|
-
|
34
|
+
|
36
35
|
def save_tiles(self):
|
37
36
|
post_data = {"tiles": [tile._get_post_data() for tile in self.tiles]}
|
38
|
-
blob = self.knex.post(
|
37
|
+
blob = self.knex.post(
|
38
|
+
f"sample_groups/{self.project.uuid}/dashboard/{self.name}/tiles",
|
39
|
+
json=post_data,
|
40
|
+
json_response=False,
|
41
|
+
)
|
39
42
|
print(blob)
|
40
|
-
|
43
|
+
|
41
44
|
def _create(self):
|
42
45
|
post_data = {"name": self.name, "is_default": self.is_default}
|
43
|
-
blob = self.knex.post(
|
46
|
+
blob = self.knex.post(
|
47
|
+
f"sample_groups/{self.project.uuid}/dashboard", json=post_data
|
48
|
+
)
|
44
49
|
self.load_blob(blob)
|
45
|
-
|
46
|
-
def tile(
|
50
|
+
|
51
|
+
def tile(
|
52
|
+
self,
|
53
|
+
title,
|
54
|
+
result_file,
|
55
|
+
style: Literal["col-span-1", "col-span-2"] = "col-span-1",
|
56
|
+
):
|
47
57
|
result_file.get()
|
48
58
|
tile = DashboardTile(self.knex, self, title, result_file, style=style)
|
49
59
|
self.tiles.append(tile)
|
@@ -59,19 +69,92 @@ class Dashboard(RemoteObject):
|
|
59
69
|
return self._name
|
60
70
|
|
61
71
|
def __str__(self):
|
62
|
-
return f
|
63
|
-
|
72
|
+
return f'<Geoseeq Dashboard: {self.project.grn} "{self.name}"/>'
|
73
|
+
|
64
74
|
def __repr__(self):
|
65
75
|
return str(self)
|
66
|
-
|
76
|
+
|
67
77
|
@property
|
68
78
|
def grn(self):
|
69
|
-
return f
|
70
|
-
|
79
|
+
return f'grn:dashboard:{self.project.uuid}:"{self.name}"'
|
80
|
+
|
71
81
|
def pre_hash(self):
|
72
82
|
return "DASH" + self.project.uuid + self.name
|
73
83
|
|
74
84
|
|
85
|
+
class SampleDashboard(RemoteObject):
|
86
|
+
"""Dashboard client for a single sample."""
|
87
|
+
|
88
|
+
parent_field = "sample"
|
89
|
+
remote_fields = ["is_default"]
|
90
|
+
|
91
|
+
def __init__(self, knex, sample, name="Default dashboard", is_default=False):
|
92
|
+
super().__init__(self)
|
93
|
+
self.knex = knex
|
94
|
+
self.sample = sample
|
95
|
+
self._name = name
|
96
|
+
self.tiles = []
|
97
|
+
self.is_default = is_default
|
98
|
+
|
99
|
+
def _get(self, allow_overwrite=False):
|
100
|
+
blob = self.knex.get(f"samples/{self.sample.uuid}/dashboard-list")
|
101
|
+
blob = blob["dashboard_data"][self.name]
|
102
|
+
for tile_blob in blob["tiles"]:
|
103
|
+
tile = DashboardTile.from_blob(self, tile_blob)
|
104
|
+
self.tiles.append(tile)
|
105
|
+
blob.pop("tiles")
|
106
|
+
self.load_blob(blob, allow_overwrite=allow_overwrite)
|
107
|
+
|
108
|
+
def _save(self):
|
109
|
+
self.save_tiles()
|
110
|
+
|
111
|
+
def save_tiles(self):
|
112
|
+
post_data = {"tiles": [tile._get_post_data() for tile in self.tiles]}
|
113
|
+
self.knex.post(
|
114
|
+
f"samples/{self.sample.uuid}/dashboard/{self.name}/tiles",
|
115
|
+
json=post_data,
|
116
|
+
json_response=False,
|
117
|
+
)
|
118
|
+
|
119
|
+
def _create(self):
|
120
|
+
post_data = {"name": self.name, "is_default": self.is_default}
|
121
|
+
blob = self.knex.post(f"samples/{self.sample.uuid}/dashboard", json=post_data)
|
122
|
+
self.load_blob(blob)
|
123
|
+
|
124
|
+
def tile(
|
125
|
+
self,
|
126
|
+
title,
|
127
|
+
result_file,
|
128
|
+
style: Literal["col-span-1", "col-span-2"] = "col-span-1",
|
129
|
+
):
|
130
|
+
result_file.get()
|
131
|
+
tile = DashboardTile(self.knex, self, title, result_file, style=style)
|
132
|
+
self.tiles.append(tile)
|
133
|
+
self._modified = True
|
134
|
+
return tile
|
135
|
+
|
136
|
+
def add_tile(self, tile):
|
137
|
+
self.tiles.append(tile)
|
138
|
+
self._modified = True
|
139
|
+
|
140
|
+
@property
|
141
|
+
def name(self):
|
142
|
+
return self._name
|
143
|
+
|
144
|
+
def __str__(self):
|
145
|
+
return f'<Geoseeq SampleDashboard: {self.sample.brn} "{self.name}"/>'
|
146
|
+
|
147
|
+
def __repr__(self):
|
148
|
+
return str(self)
|
149
|
+
|
150
|
+
@property
|
151
|
+
def grn(self):
|
152
|
+
return f'grn:dashboard:{self.sample.uuid}:"{self.name}"'
|
153
|
+
|
154
|
+
def pre_hash(self):
|
155
|
+
return "DASH" + self.sample.uuid + self.name
|
156
|
+
|
157
|
+
|
75
158
|
class DashboardTile:
|
76
159
|
|
77
160
|
def __init__(self, knex, dashboard, title, result_file, style="col-span-1"):
|
@@ -82,9 +165,11 @@ class DashboardTile:
|
|
82
165
|
self.result_file = result_file
|
83
166
|
|
84
167
|
def _get_post_data(self):
|
85
|
-
out =
|
168
|
+
out = {
|
86
169
|
"field_uuid": self.result_file.uuid,
|
87
|
-
"field_type":
|
170
|
+
"field_type": (
|
171
|
+
"group" if isinstance(self.result_file, ProjectResultFile) else "sample"
|
172
|
+
),
|
88
173
|
"style": self.style,
|
89
174
|
"title": self.title,
|
90
175
|
"has_related_field": False,
|
@@ -93,11 +178,13 @@ class DashboardTile:
|
|
93
178
|
|
94
179
|
@classmethod
|
95
180
|
def from_blob(cls, dashboard, blob):
|
96
|
-
result_file = result_file_from_blob(blob["viz_field"])
|
97
|
-
return cls(
|
98
|
-
|
181
|
+
result_file = result_file_from_blob(dashboard.knex, blob["viz_field"])
|
182
|
+
return cls(
|
183
|
+
dashboard.knex, dashboard, blob["title"], result_file, style=blob["style"]
|
184
|
+
)
|
185
|
+
|
99
186
|
def __str__(self) -> str:
|
100
|
-
return f
|
101
|
-
|
187
|
+
return f'<Geoseeq DashboardTile: {self.dashboard.grn} "{self.title}" />'
|
188
|
+
|
102
189
|
def __repr__(self) -> str:
|
103
|
-
return str(self)
|
190
|
+
return str(self)
|
geoseeq/project.py
CHANGED
@@ -358,4 +358,9 @@ class Project(RemoteObject):
|
|
358
358
|
def grn(self):
|
359
359
|
return f"grn::project:{self.uuid}"
|
360
360
|
|
361
|
+
def set_description(self, description):
|
362
|
+
self.description = description
|
363
|
+
self._modified = True
|
364
|
+
return self
|
365
|
+
|
361
366
|
SampleGroup = Project # alias for backwards compatibility
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: geoseeq
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.3.dev0
|
4
4
|
Summary: GeoSeeq command line tools and python API
|
5
5
|
Project-URL: Homepage, https://github.com/biotia/geoseeq_api_client
|
6
6
|
Project-URL: Issues, https://github.com/biotia/geoseeq_api_client/issues
|
@@ -15,6 +15,11 @@ Requires-Dist: click
|
|
15
15
|
Requires-Dist: pandas
|
16
16
|
Requires-Dist: requests
|
17
17
|
Requires-Dist: tqdm
|
18
|
+
Provides-Extra: test
|
19
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'test'
|
20
|
+
Requires-Dist: pytest-mock>=3.10; extra == 'test'
|
21
|
+
Requires-Dist: pytest>=7.0; extra == 'test'
|
22
|
+
Requires-Dist: requests-mock>=1.11; extra == 'test'
|
18
23
|
Description-Content-Type: text/markdown
|
19
24
|
|
20
25
|
# Geoseeq API Client
|
@@ -39,7 +44,7 @@ Download this directory and run `python setup.py install`
|
|
39
44
|
|
40
45
|
---
|
41
46
|
|
42
|
-
## Using the Command Line
|
47
|
+
## Using the Command Line
|
43
48
|
|
44
49
|
Run the command line by typing `geoseeq` into a terminal prompt. See available options by adding `--help`
|
45
50
|
|
@@ -55,7 +60,7 @@ Once you have a token you will need to configure GeoSeeq to use it. Run `geoseeq
|
|
55
60
|
|
56
61
|
```
|
57
62
|
$ geoseeq config
|
58
|
-
Set custom profile name? (Leave blank for default) []:
|
63
|
+
Set custom profile name? (Leave blank for default) []:
|
59
64
|
Enter the URL to use for GeoSeeq (Most users can use the default) [https://backend.geoseeq.com]:
|
60
65
|
Enter your GeoSeeq API token:
|
61
66
|
Profile configured.
|
@@ -77,11 +82,11 @@ $ geoseeq download files --extension fastq.gz "GeoSeeq/Example CLI Project"
|
|
77
82
|
|
78
83
|
#### Uploading sequencing data
|
79
84
|
|
80
|
-
GeoSeeq can automatically group fastq files into samples according to their
|
85
|
+
GeoSeeq can automatically group fastq files into samples according to their
|
81
86
|
sample name, read number, and lane number. It supports paired end, single end,
|
82
87
|
and nanopore reads.
|
83
88
|
|
84
|
-
Assume you have data from a single ended sequencing run stored as fastq files:
|
89
|
+
Assume you have data from a single ended sequencing run stored as fastq files:
|
85
90
|
- Sample1_L1_R1.fastq.gz
|
86
91
|
- Sample1_L1_R2.fastq.gz
|
87
92
|
- Sample1_L2_R1.fastq.gz
|
@@ -114,8 +119,13 @@ Note: You will need to have an API token set to use this command (see above)
|
|
114
119
|
|
115
120
|
## Using the Python API in a program
|
116
121
|
|
122
|
+
|
117
123
|
Please see `geoseeq_api/cli/download.py` for examples of how to download data using the Python API directly.
|
118
124
|
|
125
|
+
## Development in GitHub Codespaces
|
126
|
+
|
127
|
+
This repository includes a `.devcontainer` configuration so it can be opened directly in [GitHub Codespaces](https://docs.github.com/codespaces). When the codespace is created the development dependencies are installed and `pre-commit` hooks are set up automatically.
|
128
|
+
|
119
129
|
---
|
120
130
|
|
121
131
|
## Notes
|
@@ -7,7 +7,7 @@ geoseeq/file_system_cache.py,sha256=HzVZWtwLD2fjWWSo_UfWmGeBltm9He4lP_OqzKwNGWg,
|
|
7
7
|
geoseeq/knex.py,sha256=zcjafsmUn9SC3LlRnvvaXpr-pHYZ0IXk7LpzuUoE3MI,8312
|
8
8
|
geoseeq/organization.py,sha256=bJkYL8_D-k6IYAaii2ZbxjwYnXy6lvu6iLXscxKlA3w,2542
|
9
9
|
geoseeq/pipeline.py,sha256=89mhWaecsKnm6tyRkdkaVp4dmZh62_v42Ze0oXf8OTY,9873
|
10
|
-
geoseeq/project.py,sha256=
|
10
|
+
geoseeq/project.py,sha256=_8uttLKc6yVGDdJhPRmQOzzPeMYmUg0zBBPOAJc3yyo,14014
|
11
11
|
geoseeq/remote_object.py,sha256=GYN6PKU7Zz3htIdpFjfZiFejzGqqJHbJyKlefM1Eixk,7151
|
12
12
|
geoseeq/sample.py,sha256=HAfMiDPHp1UJgIA2lI6oGnNit4YKyj7nx9X07CCN98U,8316
|
13
13
|
geoseeq/search.py,sha256=gawad6Cx5FxJBPlYkXWb-UKAO-UC0_yhvyU9Ca1kaNI,3388
|
@@ -25,7 +25,7 @@ geoseeq/cli/download.py,sha256=Znjuc9IFOcIa5_Od9mFXHJdYAJtgw9Bc_wPPcOVXn7s,21298
|
|
25
25
|
geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
|
26
26
|
geoseeq/cli/find_grn.py,sha256=oMDxkzGQBQb2_cCuvmwoeHOsFHqyO9RLeJzrB6bAe5M,439
|
27
27
|
geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
|
28
|
-
geoseeq/cli/main.py,sha256=
|
28
|
+
geoseeq/cli/main.py,sha256=_P_pp_ohm0Pq390FgWjNw-oQA06KGbQPAGbvgY-iL6U,4137
|
29
29
|
geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
|
30
30
|
geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
|
31
31
|
geoseeq/cli/project.py,sha256=V5SdXm2Hwo2lxrkpwRDedw-mAE4XnM2uwT-Gj1D90VQ,3030
|
@@ -42,7 +42,7 @@ geoseeq/cli/shared_params/id_handlers.py,sha256=KtzflnplYVkXsyqI5Ej6r-_BwQnuXVHP
|
|
42
42
|
geoseeq/cli/shared_params/obj_getters.py,sha256=ZSkt6LnDkVFlNVYKgLrjzg60-6BthZMr3eeD3HNqzac,2741
|
43
43
|
geoseeq/cli/shared_params/opts_and_args.py,sha256=_DcJ-TqgrbBaeDd-kuHEx2gLZPQN6EHZYWh8Ag-d8Vg,2091
|
44
44
|
geoseeq/cli/upload/__init__.py,sha256=tRrljqG7uBM6zVBKpDw1zevHz6Vy418HuIYZKwByyWg,862
|
45
|
-
geoseeq/cli/upload/upload.py,sha256=
|
45
|
+
geoseeq/cli/upload/upload.py,sha256=tBga8TW_5qXM4avXH5BAfLrYNms_5eqdyJZex47hZ90,14294
|
46
46
|
geoseeq/cli/upload/upload_advanced.py,sha256=1pjtbe8EidIo4eR1_oVD00rPCTxYj8CRqB8D9buA62M,12432
|
47
47
|
geoseeq/cli/upload/upload_reads.py,sha256=dZK_Mh3a3NdC4zVB4Yyfz-NViCK9_rROQbmLWTrh8Pc,11642
|
48
48
|
geoseeq/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -52,7 +52,7 @@ geoseeq/contrib/ncbi/api.py,sha256=WQeLoGA_-Zha-QeSO8_i7HpvXyD8UkV0qc5okm11KiA,1
|
|
52
52
|
geoseeq/contrib/ncbi/bioproject.py,sha256=_oThTd_iLDOC8cLOlJKAatSr362OBYZCEV3YrqodhFg,4341
|
53
53
|
geoseeq/contrib/ncbi/cli.py,sha256=j9zEcaZPTryK3a4xluRxigcJKDhRpRxbp3KZSx-Bfhk,2400
|
54
54
|
geoseeq/contrib/ncbi/setup_logging.py,sha256=Tp1bY1U0f-o739aHpvVYriG2qdd1lFvCYBXZeXQgt-w,175
|
55
|
-
geoseeq/dashboard/dashboard.py,sha256=
|
55
|
+
geoseeq/dashboard/dashboard.py,sha256=0ISzcTby35oJVsOCeg4b_7Em6hRsh3QzsnbChf946Eo,5564
|
56
56
|
geoseeq/file_system/filesystem_download.py,sha256=8bcnxjWltekmCvb5N0b1guBIjLp4-CL2VtsEok-snv4,16963
|
57
57
|
geoseeq/file_system/main.py,sha256=4HgYGq7WhlF96JlVIf16iFBTDujlBpxImmtoh4VCzDA,3627
|
58
58
|
geoseeq/id_constructors/__init__.py,sha256=w5E0PNQ9UuAxBeZbDI7KBnUoERd85gGz3nScz45bd2o,126
|
@@ -92,8 +92,8 @@ geoseeq/vc/vc_cache.py,sha256=P4LXTbq2zOIv1OhP7Iw5MmypR2vXuy29Pq5K6gRvi-M,730
|
|
92
92
|
geoseeq/vc/vc_dir.py,sha256=A9CLTh2wWCRzZjiLyqXD1vhtsWZGD3OjaMT5KqlfAXI,457
|
93
93
|
geoseeq/vc/vc_sample.py,sha256=qZeioWydXvfu4rGMs20nICfNcp46y_XkND-bHdV6P5M,3850
|
94
94
|
geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
|
95
|
-
geoseeq-0.7.
|
96
|
-
geoseeq-0.7.
|
97
|
-
geoseeq-0.7.
|
98
|
-
geoseeq-0.7.
|
99
|
-
geoseeq-0.7.
|
95
|
+
geoseeq-0.7.3.dev0.dist-info/METADATA,sha256=GqNnxtN09jNv5HRMkxGp5D8ZfrJUyJdxlzL5-6N2Ogw,5415
|
96
|
+
geoseeq-0.7.3.dev0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
97
|
+
geoseeq-0.7.3.dev0.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
|
98
|
+
geoseeq-0.7.3.dev0.dist-info/licenses/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
|
99
|
+
geoseeq-0.7.3.dev0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|