geoseeq 0.6.13.dev1__py3-none-any.whl → 0.6.14.dev1__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/__init__.py +2 -1
- geoseeq/cli/find_grn.py +19 -0
- geoseeq/cli/main.py +3 -2
- geoseeq/id_constructors/from_blobs.py +57 -9
- geoseeq/id_constructors/from_ids.py +4 -1
- geoseeq/id_constructors/from_uuids.py +9 -0
- geoseeq/knex.py +4 -4
- geoseeq/smart_table.py +180 -0
- geoseeq/upload_download_manager.py +1 -1
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/METADATA +1 -1
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/RECORD +15 -13
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/LICENSE +0 -0
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/WHEEL +0 -0
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/entry_points.txt +0 -0
- {geoseeq-0.6.13.dev1.dist-info → geoseeq-0.6.14.dev1.dist-info}/top_level.txt +0 -0
geoseeq/__init__.py
CHANGED
@@ -32,4 +32,5 @@ from .work_orders import (
|
|
32
32
|
)
|
33
33
|
from .app import App
|
34
34
|
from .id_constructors import *
|
35
|
-
from .upload_download_manager import GeoSeeqDownloadManager, GeoSeeqUploadManager
|
35
|
+
from .upload_download_manager import GeoSeeqDownloadManager, GeoSeeqUploadManager
|
36
|
+
from .smart_table import SmartTable
|
geoseeq/cli/find_grn.py
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
import click
|
2
|
+
from geoseeq.id_constructors import resolve_id
|
3
|
+
from .shared_params import (
|
4
|
+
use_common_state,
|
5
|
+
)
|
6
|
+
|
7
|
+
|
8
|
+
@click.command('find-grn')
|
9
|
+
@use_common_state
|
10
|
+
@click.argument('grn')
|
11
|
+
def cli_find_grn(state, grn):
|
12
|
+
"""Find objects by id"""
|
13
|
+
kind, obj = resolve_id(state.get_knex(), grn)
|
14
|
+
print(obj)
|
15
|
+
parent = getattr(obj, 'parent', None)
|
16
|
+
while parent:
|
17
|
+
print(parent)
|
18
|
+
parent = getattr(parent, 'parent', None)
|
19
|
+
|
geoseeq/cli/main.py
CHANGED
@@ -18,7 +18,7 @@ from .shared_params.opts_and_args import overwrite_option, yes_option
|
|
18
18
|
from .detail import cli_detail
|
19
19
|
from .run import cli_app
|
20
20
|
from .get_eula import cli_eula
|
21
|
-
|
21
|
+
from .find_grn import cli_find_grn
|
22
22
|
|
23
23
|
logger = logging.getLogger('geoseeq_api')
|
24
24
|
handler = logging.StreamHandler()
|
@@ -44,6 +44,7 @@ main.add_command(cli_view)
|
|
44
44
|
main.add_command(cli_search)
|
45
45
|
main.add_command(cli_app)
|
46
46
|
main.add_command(cli_eula)
|
47
|
+
main.add_command(cli_find_grn)
|
47
48
|
|
48
49
|
@main.command()
|
49
50
|
def version():
|
@@ -54,7 +55,7 @@ def version():
|
|
54
55
|
Use of this tool implies acceptance of the GeoSeeq End User License Agreement.
|
55
56
|
Run `geoseeq eula show` to view the EULA.
|
56
57
|
"""
|
57
|
-
click.echo('0.6.
|
58
|
+
click.echo('0.6.14dev1') # remember to update pyproject.toml
|
58
59
|
|
59
60
|
|
60
61
|
@main.group('advanced')
|
@@ -5,7 +5,10 @@ from geoseeq.knex import with_knex
|
|
5
5
|
@with_knex
|
6
6
|
def org_from_blob(knex, blob, already_fetched=True, modified=False):
|
7
7
|
"""Return an Organization object from a blob."""
|
8
|
-
from geoseeq.organization import
|
8
|
+
from geoseeq.organization import (
|
9
|
+
Organization, # import here to avoid circular import
|
10
|
+
)
|
11
|
+
|
9
12
|
org = Organization(knex, blob["name"])
|
10
13
|
org.load_blob(blob)
|
11
14
|
org._already_fetched = already_fetched
|
@@ -17,9 +20,13 @@ def org_from_blob(knex, blob, already_fetched=True, modified=False):
|
|
17
20
|
def project_from_blob(knex, blob, already_fetched=True, modified=False):
|
18
21
|
"""Return a Project object from a blob."""
|
19
22
|
org = org_from_blob(
|
20
|
-
knex,
|
23
|
+
knex,
|
24
|
+
blob["organization_obj"],
|
25
|
+
already_fetched=already_fetched,
|
26
|
+
modified=modified,
|
21
27
|
)
|
22
28
|
from geoseeq.project import Project # import here to avoid circular import
|
29
|
+
|
23
30
|
grp = Project(knex, org, blob["name"], is_library=blob["is_library"])
|
24
31
|
grp.load_blob(blob)
|
25
32
|
grp._already_fetched = already_fetched
|
@@ -37,6 +44,7 @@ def sample_from_blob(knex, blob, already_fetched=True, modified=False):
|
|
37
44
|
knex, blob["library_obj"], already_fetched=already_fetched, modified=modified
|
38
45
|
)
|
39
46
|
from geoseeq.sample import Sample # import here to avoid circular import
|
47
|
+
|
40
48
|
sample = Sample(knex, lib, blob["name"], metadata=blob["metadata"])
|
41
49
|
sample.load_blob(blob)
|
42
50
|
sample._already_fetched = already_fetched
|
@@ -48,11 +56,21 @@ def sample_from_blob(knex, blob, already_fetched=True, modified=False):
|
|
48
56
|
def project_result_folder_from_blob(knex, blob, already_fetched=True, modified=False):
|
49
57
|
"""Return a ProjectResultFolder object from a blob."""
|
50
58
|
group = project_from_blob(
|
51
|
-
knex,
|
59
|
+
knex,
|
60
|
+
blob["sample_group_obj"],
|
61
|
+
already_fetched=already_fetched,
|
62
|
+
modified=modified,
|
52
63
|
)
|
53
|
-
from geoseeq.result import
|
64
|
+
from geoseeq.result import (
|
65
|
+
ProjectResultFolder, # import here to avoid circular import
|
66
|
+
)
|
67
|
+
|
54
68
|
ar = ProjectResultFolder(
|
55
|
-
knex,
|
69
|
+
knex,
|
70
|
+
group,
|
71
|
+
blob["module_name"],
|
72
|
+
replicate=blob["replicate"],
|
73
|
+
metadata=blob["metadata"],
|
56
74
|
)
|
57
75
|
ar.load_blob(blob)
|
58
76
|
ar._already_fetched = already_fetched
|
@@ -69,9 +87,16 @@ def sample_result_folder_from_blob(knex, blob, already_fetched=True, modified=Fa
|
|
69
87
|
sample = sample_from_blob(
|
70
88
|
knex, blob["sample_obj"], already_fetched=already_fetched, modified=modified
|
71
89
|
)
|
72
|
-
from geoseeq.result import
|
90
|
+
from geoseeq.result import (
|
91
|
+
SampleResultFolder, # import here to avoid circular import
|
92
|
+
)
|
93
|
+
|
73
94
|
ar = SampleResultFolder(
|
74
|
-
knex,
|
95
|
+
knex,
|
96
|
+
sample,
|
97
|
+
blob["module_name"],
|
98
|
+
replicate=blob["replicate"],
|
99
|
+
metadata=blob["metadata"],
|
75
100
|
)
|
76
101
|
ar.load_blob(blob)
|
77
102
|
ar._already_fetched = already_fetched
|
@@ -86,9 +111,13 @@ sample_ar_from_blob = sample_result_folder_from_blob # Alias
|
|
86
111
|
def sample_result_file_from_blob(knex, blob, already_fetched=True, modified=False):
|
87
112
|
"""Return a SampleResultFile object from a blob."""
|
88
113
|
ar = sample_result_folder_from_blob(
|
89
|
-
knex,
|
114
|
+
knex,
|
115
|
+
blob["analysis_result_obj"],
|
116
|
+
already_fetched=already_fetched,
|
117
|
+
modified=modified,
|
90
118
|
)
|
91
119
|
from geoseeq.result import SampleResultFile # import here to avoid circular import
|
120
|
+
|
92
121
|
arf = SampleResultFile(knex, ar, blob["name"], data=blob["stored_data"])
|
93
122
|
arf.load_blob(blob)
|
94
123
|
ar._already_fetched = already_fetched
|
@@ -104,9 +133,13 @@ sample_ar_field_from_blob = sample_result_file_from_blob # Alias
|
|
104
133
|
def project_result_file_from_blob(knex, blob, already_fetched=True, modified=False):
|
105
134
|
"""Return a ProjectResultFile object from a blob."""
|
106
135
|
ar = project_result_folder_from_blob(
|
107
|
-
knex,
|
136
|
+
knex,
|
137
|
+
blob["analysis_result_obj"],
|
138
|
+
already_fetched=already_fetched,
|
139
|
+
modified=modified,
|
108
140
|
)
|
109
141
|
from geoseeq.result import ProjectResultFile # import here to avoid circular import
|
142
|
+
|
110
143
|
arf = ProjectResultFile(knex, ar, blob["name"], data=blob["stored_data"])
|
111
144
|
arf.load_blob(blob)
|
112
145
|
ar._already_fetched = already_fetched
|
@@ -136,12 +169,14 @@ def result_file_from_blob(knex, blob, already_fetched=True, modified=False):
|
|
136
169
|
def pipeline_from_blob(knex, blob, already_fetched=True, modified=False):
|
137
170
|
"""Return a Pipeline object from a blob."""
|
138
171
|
from geoseeq.pipeline import Pipeline # import here to avoid circular import
|
172
|
+
|
139
173
|
pipeline = Pipeline(knex, blob["name"])
|
140
174
|
pipeline.load_blob(blob)
|
141
175
|
pipeline._already_fetched = already_fetched
|
142
176
|
pipeline._modified = modified
|
143
177
|
return pipeline
|
144
178
|
|
179
|
+
|
145
180
|
app_from_blob = pipeline_from_blob # Alias
|
146
181
|
|
147
182
|
|
@@ -149,6 +184,7 @@ app_from_blob = pipeline_from_blob # Alias
|
|
149
184
|
def pipeline_run_from_blob(knex, blob, already_fetched=True, modified=False):
|
150
185
|
"""Return a Pipeline run object from a blob."""
|
151
186
|
from geoseeq.pipeline import PipelineRun # import here to avoid circular import
|
187
|
+
|
152
188
|
pipeline_run = PipelineRun(
|
153
189
|
knex,
|
154
190
|
blob["sample_group"],
|
@@ -160,3 +196,15 @@ def pipeline_run_from_blob(knex, blob, already_fetched=True, modified=False):
|
|
160
196
|
pipeline_run._already_fetched = already_fetched
|
161
197
|
pipeline_run._modified = modified
|
162
198
|
return pipeline_run
|
199
|
+
|
200
|
+
|
201
|
+
@with_knex
|
202
|
+
def smart_table_from_blob(knex, blob, already_fetched=True, modified=False):
|
203
|
+
"""Return a smart tavle object from a blob."""
|
204
|
+
from geoseeq.smart_table import SmartTable # import here to avoid circular import
|
205
|
+
|
206
|
+
tbl = SmartTable(knex, name=blob["name"])
|
207
|
+
tbl.load_blob(blob)
|
208
|
+
tbl._already_fetched = already_fetched
|
209
|
+
tbl._modified = modified
|
210
|
+
return tbl
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from geoseeq import GeoseeqNotFoundError
|
2
|
+
import logging
|
2
3
|
from .from_uuids import (
|
3
4
|
org_from_uuid,
|
4
5
|
project_from_uuid,
|
@@ -24,10 +25,12 @@ from .from_names import (
|
|
24
25
|
from .utils import is_grn_or_uuid, is_name
|
25
26
|
from geoseeq.knex import with_knex
|
26
27
|
|
28
|
+
logger = logging.getLogger("geoseeq_api") # Same name as calling module
|
29
|
+
|
27
30
|
|
28
31
|
def _generic_from_id(knex, id, from_uuid_func, from_name_func):
|
29
32
|
"""Return the object which the id points to."""
|
30
|
-
logger.
|
33
|
+
logger.debug(f'Getting object from id: {id}, knex: {knex}, from_uuid_func: {from_uuid_func}, from_name_func: {from_name_func}')
|
31
34
|
if is_grn_or_uuid(id):
|
32
35
|
id = id.split(':')[-1] # if this is a GRN, get the UUID. Won't hurt if it's already a UUID.
|
33
36
|
return from_uuid_func(knex, id)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from geoseeq import GeoseeqNotFoundError
|
2
2
|
from geoseeq.knex import with_knex
|
3
|
+
|
3
4
|
from .from_blobs import *
|
4
5
|
|
5
6
|
|
@@ -115,3 +116,11 @@ def pipeline_run_from_uuid(knex, uuid):
|
|
115
116
|
blob = knex.get(f"app_runs/{uuid}")
|
116
117
|
pipeline_run = pipeline_run_from_blob(knex, blob)
|
117
118
|
return pipeline_run
|
119
|
+
|
120
|
+
|
121
|
+
@with_knex
|
122
|
+
def smart_table_from_uuid(knex, uuid):
|
123
|
+
"""Return a smart table object which the uuid points to."""
|
124
|
+
blob = knex.get(f"table/{uuid}")
|
125
|
+
table = smart_table_from_blob(knex, blob)
|
126
|
+
return table
|
geoseeq/knex.py
CHANGED
@@ -222,20 +222,20 @@ class Knex:
|
|
222
222
|
def with_knex(func):
|
223
223
|
def wrapper(*args, **kwargs):
|
224
224
|
# check if any of the arguments are a knex instance
|
225
|
-
logger.
|
225
|
+
logger.debug(f"Checking for knex in args: {args}, kwargs: {kwargs}")
|
226
226
|
any_knex = any([isinstance(arg, Knex) for arg in args])
|
227
227
|
if any_knex:
|
228
|
-
logger.
|
228
|
+
logger.debug("knex found in args args: {args}, kwargs: {kwargs}")
|
229
229
|
return func(*args, **kwargs)
|
230
230
|
else:
|
231
|
-
logger.
|
231
|
+
logger.debug("knex not found in args args: {args}, kwargs: {kwargs}")
|
232
232
|
varnames = [
|
233
233
|
varname for varname in func.__code__.co_varnames
|
234
234
|
if varname != "knex"
|
235
235
|
]
|
236
236
|
kwargs.update(zip(varnames, args))
|
237
237
|
if "knex" not in kwargs:
|
238
|
-
logger.
|
238
|
+
logger.debug("knex not found in kwargs args: {args}, kwargs: {kwargs}")
|
239
239
|
profile = kwargs.pop("profile", "")
|
240
240
|
kwargs['knex'] = Knex.load_profile(profile=profile)
|
241
241
|
# reorder kwargs to match the function signature
|
geoseeq/smart_table.py
ADDED
@@ -0,0 +1,180 @@
|
|
1
|
+
import math
|
2
|
+
from typing import Literal
|
3
|
+
|
4
|
+
import pandas as pd
|
5
|
+
|
6
|
+
from geoseeq.id_constructors.from_blobs import smart_table_from_blob
|
7
|
+
from geoseeq.id_constructors.from_uuids import (
|
8
|
+
project_result_file_from_uuid,
|
9
|
+
result_file_from_uuid,
|
10
|
+
sample_result_file_from_uuid,
|
11
|
+
)
|
12
|
+
from geoseeq.remote_object import RemoteObject
|
13
|
+
from geoseeq.result.result_folder import ProjectResultFolder, SampleResultFolder
|
14
|
+
|
15
|
+
|
16
|
+
def convert_pandas_col_type_to_geoseeq_type(col_type: str):
|
17
|
+
if col_type == "int64":
|
18
|
+
return "number"
|
19
|
+
elif col_type == "float64":
|
20
|
+
return "number"
|
21
|
+
elif col_type == "category":
|
22
|
+
return None
|
23
|
+
return None
|
24
|
+
|
25
|
+
|
26
|
+
class SmartTable(RemoteObject):
|
27
|
+
remote_fields = [
|
28
|
+
"uuid",
|
29
|
+
"description",
|
30
|
+
"created_at",
|
31
|
+
"updated_at",
|
32
|
+
"sample_group",
|
33
|
+
"columns",
|
34
|
+
"connected_file_id",
|
35
|
+
]
|
36
|
+
parent_field = None
|
37
|
+
|
38
|
+
def __init__(self, knex, name, connected_file_id=None, description=""):
|
39
|
+
super().__init__(self)
|
40
|
+
self.knex = knex
|
41
|
+
self.name = name
|
42
|
+
self.description = description
|
43
|
+
self.connected_file_id = connected_file_id
|
44
|
+
|
45
|
+
def create(
|
46
|
+
self,
|
47
|
+
result_folder,
|
48
|
+
description="",
|
49
|
+
without_default_columns=True,
|
50
|
+
):
|
51
|
+
"""
|
52
|
+
Creating a smart table includes creating a file for it in the selected result folder
|
53
|
+
|
54
|
+
without_default_columns: if False the server creates 3 example columns.
|
55
|
+
"""
|
56
|
+
|
57
|
+
data = {
|
58
|
+
"name": self.name,
|
59
|
+
"folder_id": result_folder.uuid,
|
60
|
+
"description": description,
|
61
|
+
}
|
62
|
+
url = f"table?without_default_columns={without_default_columns}"
|
63
|
+
blob = self.knex.post(url, json=data)
|
64
|
+
result_file = result_file_from_uuid(self.knex, blob["connected_file_id"])
|
65
|
+
result_file.upload_json({"__type__": "smartTable", "tableId": blob["uuid"]})
|
66
|
+
self.load_blob(blob)
|
67
|
+
return self
|
68
|
+
|
69
|
+
def refetch(self):
|
70
|
+
"""After operations like import create column, columns in not in the response so we have to update"""
|
71
|
+
if not self.uuid:
|
72
|
+
return
|
73
|
+
blob = self.knex.get(f"table/{self.uuid}")
|
74
|
+
self.load_blob(blob, allow_overwrite=True)
|
75
|
+
return self
|
76
|
+
|
77
|
+
def import_data(
|
78
|
+
self, column_names, rows, column_types={}, id_column=None, overwrite=False
|
79
|
+
):
|
80
|
+
url = f"table/{self.uuid}/import"
|
81
|
+
rowLimit = math.ceil(10000 / len(column_names))
|
82
|
+
roundsNeeded = math.ceil(len(rows) / rowLimit)
|
83
|
+
round = 0
|
84
|
+
while round < roundsNeeded:
|
85
|
+
data = {
|
86
|
+
"columns": column_names,
|
87
|
+
"rows": rows[round * rowLimit : (round + 1) * rowLimit],
|
88
|
+
"column_types": column_types,
|
89
|
+
}
|
90
|
+
self.knex.put(url, json=data, json_response=False)
|
91
|
+
round += 1
|
92
|
+
self.refetch() # columns attribute has to be updated
|
93
|
+
|
94
|
+
def import_dataframe(self, df: pd.DataFrame, column_types={}):
|
95
|
+
df_column_types = {
|
96
|
+
col_name: convert_pandas_col_type_to_geoseeq_type(col_type)
|
97
|
+
for col_name, col_type in df.dtypes.items()
|
98
|
+
if convert_pandas_col_type_to_geoseeq_type(col_type) is not None
|
99
|
+
}
|
100
|
+
my_column_types = {**df_column_types, **column_types}
|
101
|
+
df_dict = df.to_dict(orient="split")
|
102
|
+
self.import_data(
|
103
|
+
column_names=df_dict["columns"],
|
104
|
+
rows=df_dict["data"],
|
105
|
+
column_types=my_column_types,
|
106
|
+
)
|
107
|
+
|
108
|
+
def import_csv(self, file_path, column_types={}, **kwargs):
|
109
|
+
df = pd.read_csv(file_path, **kwargs)
|
110
|
+
df_dict = df.to_dict(orient="split")
|
111
|
+
self.import_data(
|
112
|
+
column_names=df_dict["columns"],
|
113
|
+
rows=df_dict["data"],
|
114
|
+
column_types=column_types,
|
115
|
+
)
|
116
|
+
|
117
|
+
def delete(self):
|
118
|
+
"""Delete the table record and also the connected file."""
|
119
|
+
|
120
|
+
# The server deletes the table record also if the connected file is deleted
|
121
|
+
if self.connected_file_id:
|
122
|
+
result_file = result_file_from_uuid(self.connected_file_id)
|
123
|
+
result_file.delete()
|
124
|
+
|
125
|
+
def create_column(
|
126
|
+
self,
|
127
|
+
name,
|
128
|
+
data_type="string",
|
129
|
+
description=None,
|
130
|
+
select_options=None,
|
131
|
+
hidden=False,
|
132
|
+
):
|
133
|
+
"""Create a new column for the table"""
|
134
|
+
|
135
|
+
data = {
|
136
|
+
"table": self.uuid,
|
137
|
+
"name": name,
|
138
|
+
"data_type": data_type,
|
139
|
+
"description": description,
|
140
|
+
"select_options": select_options,
|
141
|
+
"hidden": hidden,
|
142
|
+
}
|
143
|
+
blob = self.knex.post(f"table/{self.uuid}/columns", data)
|
144
|
+
self.refetch() # columns attribute has to be updated
|
145
|
+
|
146
|
+
def order_columns(self, ordered_column_names):
|
147
|
+
"""Set the order of table's columns based on the input column name list"""
|
148
|
+
|
149
|
+
data = {"columns": []}
|
150
|
+
unordered_col_count = 0
|
151
|
+
for column in sorted(self.columns, key=lambda col: col["order"]):
|
152
|
+
if column["name"] in ordered_column_names:
|
153
|
+
order = ordered_column_names.index(column["name"])
|
154
|
+
else:
|
155
|
+
order = len(ordered_column_names) + unordered_col_count
|
156
|
+
unordered_col_count += 1
|
157
|
+
|
158
|
+
data["columns"].append({"uuid": column["uuid"], "order": order})
|
159
|
+
|
160
|
+
self.knex.put(f"table/{self.uuid}/columns", json=data, json_response=False)
|
161
|
+
self.refetch() # Update columns attribute
|
162
|
+
|
163
|
+
def hide_columns(self, column_names):
|
164
|
+
"""Set the input columns hidden by default when table is opened"""
|
165
|
+
|
166
|
+
data = {"columns": []}
|
167
|
+
for column in sorted(self.columns, key=lambda col: col["order"]):
|
168
|
+
if column["name"] in column_names:
|
169
|
+
data["columns"].append({"uuid": column["uuid"], "hidden": True})
|
170
|
+
else:
|
171
|
+
continue
|
172
|
+
|
173
|
+
self.knex.put(f"table/{self.uuid}/columns", json=data, json_response=False)
|
174
|
+
self.refetch()
|
175
|
+
|
176
|
+
def __str__(self):
|
177
|
+
return f"<Geoseeq::SmartTable {self.name} {self.uuid} />"
|
178
|
+
|
179
|
+
def __repr__(self):
|
180
|
+
return f"<Geoseeq::SmartTable {self.name} {self.uuid} />"
|
@@ -138,7 +138,7 @@ def _download_one_file(args):
|
|
138
138
|
local_path = download_url(url, filename=file_path, progress_tracker=pbar, head=head)
|
139
139
|
try:
|
140
140
|
if callback is not None:
|
141
|
-
callback_result = callback(local_path)
|
141
|
+
callback_result = callback(key, local_path)
|
142
142
|
else:
|
143
143
|
callback_result = None
|
144
144
|
return local_path, key, callback_result
|
@@ -1,17 +1,18 @@
|
|
1
|
-
geoseeq/__init__.py,sha256=
|
1
|
+
geoseeq/__init__.py,sha256=YqYqeHbqjgWI5OBIxkPXNvLISOjVWaNwVFy6AGJ7uwc,982
|
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
5
|
geoseeq/constants.py,sha256=z_ninEd7WsS5DaLntdR-sqAFib6Ie22jlhPKzLvLerw,449
|
6
6
|
geoseeq/file_system_cache.py,sha256=HzVZWtwLD2fjWWSo_UfWmGeBltm9He4lP_OqzKwNGWg,4138
|
7
|
-
geoseeq/knex.py,sha256=
|
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
10
|
geoseeq/project.py,sha256=kN6m1N4Tlud7saU03Sbir-oIBnXet_Cwi2OVVdaeag0,13929
|
11
11
|
geoseeq/remote_object.py,sha256=GYN6PKU7Zz3htIdpFjfZiFejzGqqJHbJyKlefM1Eixk,7151
|
12
12
|
geoseeq/sample.py,sha256=nlvmSy2WmiOMamkulNRloFPX7E9jVs34m1vO1PSOrHU,8336
|
13
13
|
geoseeq/search.py,sha256=gawad6Cx5FxJBPlYkXWb-UKAO-UC0_yhvyU9Ca1kaNI,3388
|
14
|
-
geoseeq/
|
14
|
+
geoseeq/smart_table.py,sha256=X1y9nBr8BkMNcBqdaiXtlqLCTfgc7lvdjSlAGxppvLo,6098
|
15
|
+
geoseeq/upload_download_manager.py,sha256=jEEVDZa9kS5v1g20Vz30azwdP4kEd0A6WBOb8GDdB8Y,9366
|
15
16
|
geoseeq/user.py,sha256=tol8i1UGLRrbMw5jeJDnna1ikRgrCDd50Jxz0a1lSgg,690
|
16
17
|
geoseeq/utils.py,sha256=ZXpWb2MetUIeLrExiXb7IaOXYrW1pvrdP3o0KWzbwCs,4035
|
17
18
|
geoseeq/work_orders.py,sha256=5uLVVfdKE8qh4gGaHkdBpXJGRTujuSg59knWCqEET4A,8071
|
@@ -21,8 +22,9 @@ geoseeq/cli/copy.py,sha256=02U9kdrAIbbM8MlRMLL6p-LMYFSuRObE3h5jyvcL__M,2275
|
|
21
22
|
geoseeq/cli/detail.py,sha256=q8Suu-j2k18knfSVFG-SWWGNsKM-n8y9RMA3LcIIi9Y,4132
|
22
23
|
geoseeq/cli/download.py,sha256=W3OswqpHg1thzW6CJ7IcSS0Te2LA2WfgYISQMSl4GQg,18921
|
23
24
|
geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
|
25
|
+
geoseeq/cli/find_grn.py,sha256=oMDxkzGQBQb2_cCuvmwoeHOsFHqyO9RLeJzrB6bAe5M,439
|
24
26
|
geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
|
25
|
-
geoseeq/cli/main.py,sha256=
|
27
|
+
geoseeq/cli/main.py,sha256=Jlq_tB7Djxeqg0Ftxq4VMm4Ku0sISwv_K7VwwQFJ9kc,3987
|
26
28
|
geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
|
27
29
|
geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
|
28
30
|
geoseeq/cli/project.py,sha256=V5SdXm2Hwo2lxrkpwRDedw-mAE4XnM2uwT-Gj1D90VQ,3030
|
@@ -49,10 +51,10 @@ geoseeq/contrib/ncbi/bioproject.py,sha256=_oThTd_iLDOC8cLOlJKAatSr362OBYZCEV3Yrq
|
|
49
51
|
geoseeq/contrib/ncbi/cli.py,sha256=j9zEcaZPTryK3a4xluRxigcJKDhRpRxbp3KZSx-Bfhk,2400
|
50
52
|
geoseeq/contrib/ncbi/setup_logging.py,sha256=Tp1bY1U0f-o739aHpvVYriG2qdd1lFvCYBXZeXQgt-w,175
|
51
53
|
geoseeq/id_constructors/__init__.py,sha256=w5E0PNQ9UuAxBeZbDI7KBnUoERd85gGz3nScz45bd2o,126
|
52
|
-
geoseeq/id_constructors/from_blobs.py,sha256=
|
53
|
-
geoseeq/id_constructors/from_ids.py,sha256=
|
54
|
+
geoseeq/id_constructors/from_blobs.py,sha256=wZp6P6m7X0lhZAQxorHKJQn1CTBvKyfANzu2VFexp44,6315
|
55
|
+
geoseeq/id_constructors/from_ids.py,sha256=vwv_R1uZ5hdeUvpKmNLOTz02PCvwfd6yQ7aAXqi0hZo,3372
|
54
56
|
geoseeq/id_constructors/from_names.py,sha256=RqgFjDsAwQcidMkZwX7oB00OvBAKTiilHYetTPogJ40,4174
|
55
|
-
geoseeq/id_constructors/from_uuids.py,sha256=
|
57
|
+
geoseeq/id_constructors/from_uuids.py,sha256=loqTeZqDZuvfVVHpS7m-Y_spNaY3h9VRjt0wDiMxHbs,3522
|
56
58
|
geoseeq/id_constructors/resolvers.py,sha256=8hp5xJSCoZrAXtMT54Hp4okt63l909XqJU3IQx-VCgc,2676
|
57
59
|
geoseeq/id_constructors/utils.py,sha256=CKlZHGMiqi1b6r1KtgD3czSAomH99Gdfx5ziqaahz-0,723
|
58
60
|
geoseeq/plotting/__init__.py,sha256=RkGoXxgu7jEfK0B7NmdalPS2AbU7I7dZwDbi4rn9CKM,154
|
@@ -85,9 +87,9 @@ geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
|
|
85
87
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
88
|
tests/test_api_client.py,sha256=TS5njc5pcPP_Ycy-ljcfPVT1hQRBsFVdQ0lCqBmoesU,12810
|
87
89
|
tests/test_plotting.py,sha256=TcTu-2ARr8sxZJ7wPQxmbs3-gHw7uRvsgrhhhg0qKik,784
|
88
|
-
geoseeq-0.6.
|
89
|
-
geoseeq-0.6.
|
90
|
-
geoseeq-0.6.
|
91
|
-
geoseeq-0.6.
|
92
|
-
geoseeq-0.6.
|
93
|
-
geoseeq-0.6.
|
90
|
+
geoseeq-0.6.14.dev1.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
|
91
|
+
geoseeq-0.6.14.dev1.dist-info/METADATA,sha256=hIU7mXdtjBBN7V-EoEy9NblQxH4_Eg3CozkpjFZ3HAs,4937
|
92
|
+
geoseeq-0.6.14.dev1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
93
|
+
geoseeq-0.6.14.dev1.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
|
94
|
+
geoseeq-0.6.14.dev1.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
|
95
|
+
geoseeq-0.6.14.dev1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|