geoseeq 0.6.14.dev6__py3-none-any.whl → 0.6.15.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/cli/main.py CHANGED
@@ -55,7 +55,7 @@ def version():
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('0.6.14dev6') # remember to update pyproject.toml
58
+ click.echo('0.6.15dev1') # remember to update pyproject.toml
59
59
 
60
60
 
61
61
  @main.group('advanced')
@@ -4,6 +4,8 @@ from .upload import (
4
4
  cli_upload_file,
5
5
  cli_upload_folder,
6
6
  cli_metadata,
7
+ cli_upload_smart_table,
8
+ cli_upload_smart_tree,
7
9
  )
8
10
  from .upload_reads import cli_upload_reads_wizard
9
11
  from .upload_advanced import cli_find_urls_for_reads
@@ -17,6 +19,8 @@ cli_upload.add_command(cli_upload_reads_wizard)
17
19
  cli_upload.add_command(cli_upload_file)
18
20
  cli_upload.add_command(cli_upload_folder)
19
21
  cli_upload.add_command(cli_metadata)
22
+ cli_upload.add_command(cli_upload_smart_table)
23
+ cli_upload.add_command(cli_upload_smart_tree)
20
24
 
21
25
  @click.group('upload')
22
26
  def cli_upload_advanced():
@@ -263,3 +263,117 @@ def cli_metadata(state, overwrite, yes, private, create, index_col, encoding, pr
263
263
  sample.metadata = new_meta
264
264
  sample.idem()
265
265
  click.echo(f'Wrote metadata for {len(samples)} samples')
266
+
267
+
268
+ @click.command('smart-table')
269
+ @use_common_state
270
+ @overwrite_option
271
+ @yes_option
272
+ @private_option
273
+ @click.option('-n', '--geoseeq-file-name', default=None,
274
+ help='Specify a different name for the file on GeoSeeq than the local file name.',
275
+ show_default=True)
276
+ @folder_id_arg
277
+ @click.argument('file_path', type=click.Path(exists=True), nargs=1)
278
+ def cli_upload_smart_table(state, overwrite, yes, private, folder_id, geoseeq_file_name, file_path):
279
+ """Upload a smart table to GeoSeeq.
280
+
281
+ This command uploads a smart table to a project or sample on GeoSeeq. It can be used to upload
282
+ a single file to a folder at once.
283
+
284
+ ---
285
+
286
+ Example Usage:
287
+
288
+ \b
289
+ # Upload a smart table from a file
290
+ $ geoseeq upload smart-table "My Org/My Project/My Sample/My Folder" /path/to/my_table.csv
291
+
292
+ \b
293
+ # Upload a smart table from a file but name it "My Smart Table" on GeoSeeq
294
+ $ geoseeq upload smart-table "My Org/My Project/My Sample/My Folder" /path/to/my_table.csv -n "My Smart Table"
295
+
296
+ ---
297
+
298
+ Command Arguments:
299
+
300
+ [FOLDER_ID] Can be a folder UUID, GeoSeeq Resource Number (GRN), or an
301
+ names for an org, project, sample, folder separated by a slash. Can exclude
302
+ the sample name if the folder is for a project.
303
+
304
+ [FILE_PATH] A path to a file on your local machine.
305
+
306
+ ---
307
+ """
308
+ knex = state.get_knex()
309
+ result_folder = handle_folder_id(knex, folder_id, yes=yes, private=private)
310
+
311
+ if not geoseeq_file_name:
312
+ geoseeq_file_name = basename(file_path)
313
+
314
+ if not overwrite and result_folder.result_file(geoseeq_file_name).exists():
315
+ raise click.UsageError(f'{geoseeq_file_name} already exists in {result_folder}. Use --overwrite to overwrite it.')
316
+
317
+ result_file = result_folder.result_file(geoseeq_file_name)
318
+ smart_table = result_file.as_smart_table()
319
+ smart_table.import_csv(file_path)
320
+
321
+
322
+ @click.command('smart-tree')
323
+ @use_common_state
324
+ @click.option('-m/-nm', '--make-name-map/--no-name-map', default=True, help="Create a sample name map with all samples currently in the project.")
325
+ @overwrite_option
326
+ @yes_option
327
+ @private_option
328
+ @click.option('-n', '--geoseeq-file-name', default=None,
329
+ help='Specify a different name for the file on GeoSeeq than the local file name.',
330
+ show_default=True)
331
+ @folder_id_arg
332
+ @click.argument('newick_file_path', type=click.Path(exists=True), nargs=1)
333
+ def cli_upload_smart_tree(state, make_name_map, overwrite, yes, private, folder_id, geoseeq_file_name, newick_file_path):
334
+ """Upload a smart tree to GeoSeeq.
335
+
336
+ This command uploads a smart tree to a project or sample on GeoSeeq. It can be used to upload
337
+ a single file to a folder at once.
338
+
339
+ ---
340
+
341
+ Example Usage:
342
+
343
+ \b
344
+ # Upload a smart tree from a file
345
+ $ geoseeq upload smart-tree "My Org/My Project/My Sample/My Folder" /path/to/my_tree.nwk
346
+
347
+ \b
348
+ # Upload a smart tree from a file but name it "My Smart Tree" on GeoSeeq
349
+ $ geoseeq upload smart-tree "My Org/My Project/My Sample/My Folder" /path/to/my_tree.nwk -n "My Smart Tree"
350
+
351
+ ---
352
+
353
+ Command Arguments:
354
+
355
+ [FOLDER_ID] Can be a folder UUID, GeoSeeq Resource Number (GRN), or an
356
+ names for an org, project, sample, folder separated by a slash. Can exclude
357
+ the sample name if the folder is for a project.
358
+
359
+ [NEWICK_FILE_PATH] A path to a newick file on your local machine.
360
+
361
+ ---
362
+ """
363
+ knex = state.get_knex()
364
+ result_folder = handle_folder_id(knex, folder_id, yes=yes, private=private)
365
+
366
+ if not geoseeq_file_name:
367
+ geoseeq_file_name = basename(newick_file_path)
368
+
369
+ if not overwrite and result_folder.result_file(geoseeq_file_name).exists():
370
+ raise click.UsageError(f'{geoseeq_file_name} already exists in {result_folder}. Use --overwrite to overwrite it.')
371
+
372
+ result_file = result_folder.result_file(geoseeq_file_name)
373
+ smart_tree = result_file.as_smart_tree()
374
+ with open(newick_file_path) as f:
375
+ newick_str = f.read()
376
+ smart_tree.create_from_newick(newick_str)
377
+ if make_name_map:
378
+ smart_tree.add_all_samples_to_map(result_folder.project)
379
+ smart_tree.idem()
@@ -6,7 +6,7 @@ from .upload_reads import (
6
6
  _make_in_process_logger,
7
7
  _get_regex,
8
8
  _group_files,
9
- flatten_list_of_fastqs,
9
+ flatten_list_of_fastxs,
10
10
  )
11
11
 
12
12
  from multiprocessing import Pool, current_process
@@ -84,7 +84,7 @@ def cli_find_urls_for_reads(state, cores, overwrite, yes, regex, private, module
84
84
  """
85
85
  knex = state.get_knex()
86
86
  proj = handle_project_id(knex, project_id, yes, private)
87
- filepaths = {basename(line): line for line in flatten_list_of_fastqs(fastq_files)}
87
+ filepaths = {basename(line): line for line in flatten_list_of_fastxs(fastq_files)}
88
88
  click.echo(f'Found {len(filepaths)} files to upload.', err=True)
89
89
  regex = _get_regex(knex, filepaths, module_name, proj, regex)
90
90
  groups = _group_files(knex, filepaths, module_name, regex, yes)
@@ -118,7 +118,7 @@ def _is_fastq(path, fq_exts=['.fastq', '.fq'], compression_exts=['.gz', '.bz2',
118
118
  return False
119
119
 
120
120
 
121
- def _is_fasta(path, fa_exts=['.fasta', '.fa'], compression_exts=['.gz', '.bz2', '']):
121
+ def _is_fasta(path, fa_exts=['.fasta', '.fa', '.fna', '.faa'], compression_exts=['.gz', '.bz2', '']):
122
122
  for fa_ext in fa_exts:
123
123
  for compression_ext in compression_exts:
124
124
  if path.endswith(fa_ext + compression_ext):
@@ -289,9 +289,9 @@ def cli_upload_reads_wizard(state, cores, overwrite, yes, regex, private, link_t
289
289
  [FILES...] can be paths to BAM files or a file containing a list of paths, or a mix of both.
290
290
  Example: "path/to/bam/files
291
291
  """
292
- knex = state.get_knex()
293
- proj = handle_project_id(knex, project_id, yes, private)
294
- filepaths = {basename(line): line for line in flatten_list_of_bams(files)}
295
- click.echo(f'Found {len(filepaths)} files to upload.', err=True)
296
- groups = _group_files(knex, filepaths, 'bam::bam', regex, yes)
297
- _do_upload(groups, 'bam::bam', link_type, proj, filepaths, overwrite, no_new_versions, cores, state)
292
+ # knex = state.get_knex()
293
+ # proj = handle_project_id(knex, project_id, yes, private)
294
+ # filepaths = {basename(line): line for line in flatten_list_of_bams(files)}
295
+ # click.echo(f'Found {len(filepaths)} files to upload.', err=True)
296
+ # groups = _group_files(knex, filepaths, 'bam::bam', regex, yes)
297
+ # _do_upload(groups, 'bam::bam', link_type, proj, filepaths, overwrite, no_new_versions, cores, state)
geoseeq/constants.py CHANGED
@@ -2,7 +2,13 @@ from os import environ
2
2
  from os.path import join
3
3
 
4
4
  FIVE_MB = 5 * (1024 ** 2)
5
- FASTQ_MODULE_NAMES = ['short_read::paired_end', 'short_read::single_end', 'long_read::nanopore', 'raw::raw_reads']
5
+ FASTQ_MODULE_NAMES = [
6
+ 'short_read::paired_end',
7
+ 'short_read::single_end',
8
+ 'long_read::nanopore',
9
+ 'raw::raw_reads',
10
+ 'genome::fasta',
11
+ ]
6
12
  DEFAULT_ENDPOINT = "https://backend.geoseeq.com"
7
13
 
8
14
  CONFIG_FOLDER = environ.get("XDG_CONFIG_HOME", join(environ["HOME"], ".config"))
@@ -18,9 +18,10 @@ from geoseeq.knex import GeoseeqOtherError
18
18
  from .utils import *
19
19
  from .file_upload import ResultFileUpload
20
20
  from .file_download import ResultFileDownload
21
+ from .smart_objects import ResultFileSmartObjects
21
22
 
22
23
 
23
- class ResultFile(RemoteObject, ResultFileUpload, ResultFileDownload):
24
+ class ResultFile(RemoteObject, ResultFileUpload, ResultFileDownload, ResultFileSmartObjects):
24
25
  remote_fields = [
25
26
  "uuid",
26
27
  "created_at",
@@ -225,6 +225,10 @@ class SampleResultFolder(ResultFolder, SampleBioInfoFolder):
225
225
 
226
226
  def get_fields(self, *args, **kwargs):
227
227
  return self.get_result_files(*args, **kwargs)
228
+
229
+ @property
230
+ def project(self):
231
+ return self.sample.project
228
232
 
229
233
  def __str__(self):
230
234
  return f"<Geoseeq::SampleResultFolder {self.module_name} {self.replicate} {self.uuid} />"
@@ -288,6 +292,10 @@ class ProjectResultFolder(ResultFolder):
288
292
 
289
293
  def get_fields(self, *args, **kwargs):
290
294
  return self.get_result_files(*args, **kwargs)
295
+
296
+ @property
297
+ def project(self):
298
+ return self.grp
291
299
 
292
300
  def __str__(self):
293
301
  return f"<Geoseeq::ProjectResultFolder {self.module_name} {self.replicate} {self.uuid} />"
@@ -0,0 +1,40 @@
1
+
2
+
3
+ class ResultFileSmartObjects:
4
+ """Interface for ResultFiles to easily create and use smart objects like tables"""
5
+
6
+ def is_smart_table(self):
7
+ """Return True iff this ResultFile is a smart table."""
8
+ return self.stored_data.get("__type__") == "smartTable"
9
+
10
+ def as_smart_table(self, description=""):
11
+ """Return a SmartTable object for this ResultFile. Will create a new SmartTable if it doesn't exist yet."""
12
+ if self.exists() and not self.is_smart_table():
13
+ raise ValueError("ResultFile exists but is not a smart table")
14
+ from geoseeq.smart_table import SmartTable # import here to avoid circular import
15
+ if self.exists(): # already a smart table
16
+ smart_table = SmartTable(self.knex, self.name, connected_file_id=self.uuid).get()
17
+ else: # create a new smart table
18
+ smart_table = SmartTable(self.knex, self.name, connected_file_id=self.uuid, description=description)
19
+ smart_table.create(self.parent)
20
+ return smart_table
21
+
22
+ def is_smart_tree(self):
23
+ """Return True iff this ResultFile is a smart tree."""
24
+ return self.stored_data.get("__type__") == "phylodynamics"
25
+
26
+ def as_smart_tree(self, newick_str=None, sample_name_id_map=None):
27
+ """Return a SmartTree object for this ResultFile. Will create a new SmartTree if it doesn't exist yet."""
28
+ if self.exists() and not self.is_smart_tree():
29
+ raise ValueError("ResultFile exists but is not a smart tree")
30
+ from geoseeq.smart_tree import SmartTree # import here to avoid circular import
31
+ if self.exists(): # already a smart tree
32
+ smart_tree = SmartTree.from_blob(self, self.stored_data)
33
+ else: # create a new smart tree
34
+ smart_tree = SmartTree(self)
35
+ if newick_str is not None:
36
+ smart_tree.create_from_newick(newick_str, sample_name_id_map)
37
+ smart_tree.create()
38
+ return smart_tree
39
+
40
+
geoseeq/smart_table.py CHANGED
@@ -53,11 +53,12 @@ class SmartTable(RemoteObject):
53
53
 
54
54
  without_default_columns: if False the server creates 3 example columns.
55
55
  """
56
-
56
+ if description:
57
+ self.description = description
57
58
  data = {
58
59
  "name": self.name,
59
60
  "folder_id": result_folder.uuid,
60
- "description": description,
61
+ "description": self.description,
61
62
  }
62
63
  url = f"table?without_default_columns={without_default_columns}"
63
64
  blob = self.knex.post(url, json=data)
geoseeq/smart_tree.py ADDED
@@ -0,0 +1,57 @@
1
+ class SmartTree:
2
+
3
+ def __init__(self, result_file):
4
+ self.result_file = result_file # the result file that contains the smart tree
5
+ self.content = None
6
+
7
+ def create_from_newick(self, newick_str, sample_name_id_map=None):
8
+ self.content = {
9
+ "__type__": "phylodynamics",
10
+ "version": "1.0",
11
+ "tree": {
12
+ "value": newick_str,
13
+ "kind": "newick",
14
+ "sampleNameIdMap": {} if sample_name_id_map is None else sample_name_id_map,
15
+ }
16
+ }
17
+ return self
18
+
19
+ def add_sample_to_map(self, sample):
20
+ if self.content is None:
21
+ raise ValueError("Must create tree before adding samples")
22
+ self.content["tree"]["sampleNameIdMap"][sample.name] = sample.uuid
23
+ return self
24
+
25
+ def add_all_samples_to_map(self, project):
26
+ for sample in project.get_samples():
27
+ self.add_sample_to_map(sample)
28
+
29
+ @classmethod
30
+ def from_blob(cls, result_file, blob):
31
+ smart_tree = cls(result_file)
32
+ smart_tree.content = blob
33
+ return smart_tree
34
+
35
+ def save(self):
36
+ if self.content is None:
37
+ raise ValueError("Must create tree before saving")
38
+ self.result_file.upload_json(self.content)
39
+ return self
40
+
41
+ def idem(self):
42
+ if self.content is None:
43
+ raise ValueError("Must create tree before saving")
44
+ self.result_file.upload_json(self.content)
45
+ return self
46
+
47
+ def get(self):
48
+ self.result_file.get()
49
+ self.content = self.result_file.stored_data
50
+ return self
51
+
52
+ def create(self):
53
+ if self.content is None:
54
+ raise ValueError("Must create tree before saving")
55
+ self.result_file.upload_json(self.content)
56
+ return self
57
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: geoseeq
3
- Version: 0.6.14.dev6
3
+ Version: 0.6.15.dev1
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>
@@ -2,7 +2,7 @@ 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
- geoseeq/constants.py,sha256=z_ninEd7WsS5DaLntdR-sqAFib6Ie22jlhPKzLvLerw,449
5
+ geoseeq/constants.py,sha256=g9YEczT2ssteTrdgFrRimXo5I0C8-MqftoG-hE3KAkg,489
6
6
  geoseeq/file_system_cache.py,sha256=HzVZWtwLD2fjWWSo_UfWmGeBltm9He4lP_OqzKwNGWg,4138
7
7
  geoseeq/knex.py,sha256=zcjafsmUn9SC3LlRnvvaXpr-pHYZ0IXk7LpzuUoE3MI,8312
8
8
  geoseeq/organization.py,sha256=bJkYL8_D-k6IYAaii2ZbxjwYnXy6lvu6iLXscxKlA3w,2542
@@ -11,7 +11,8 @@ geoseeq/project.py,sha256=Ba3yvrSyPVnEM5_VGSQu6YPH3CTwE3fHs4JjAepEK7g,13880
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
14
- geoseeq/smart_table.py,sha256=X1y9nBr8BkMNcBqdaiXtlqLCTfgc7lvdjSlAGxppvLo,6098
14
+ geoseeq/smart_table.py,sha256=rihMsFUIn-vn4w6ukVZTHI9bjDSEr8xHExBfX8mwCHM,6169
15
+ geoseeq/smart_tree.py,sha256=bSjDlwmOuNXutYJhytA1RovwRCHV6ZxXXJPiIGFhPaA,1825
15
16
  geoseeq/upload_download_manager.py,sha256=eNR_Lw6JJstZ2X1Si43MM-0JZGv9GT-4fDjykaoH38A,9368
16
17
  geoseeq/user.py,sha256=tol8i1UGLRrbMw5jeJDnna1ikRgrCDd50Jxz0a1lSgg,690
17
18
  geoseeq/utils.py,sha256=ZXpWb2MetUIeLrExiXb7IaOXYrW1pvrdP3o0KWzbwCs,4035
@@ -24,7 +25,7 @@ geoseeq/cli/download.py,sha256=cOLIVzAfxpOJnSd4WKWR-HCkOrKjPMbgYaNXDSd9i90,21305
24
25
  geoseeq/cli/fastq_utils.py,sha256=-bmeQLaiMBm57zWOF0R5OlWTU0_3sh1JBC1RYw2BOFM,3083
25
26
  geoseeq/cli/find_grn.py,sha256=oMDxkzGQBQb2_cCuvmwoeHOsFHqyO9RLeJzrB6bAe5M,439
26
27
  geoseeq/cli/get_eula.py,sha256=79mbUwyiF7O1r0g6UTxG9kJGQEqKuH805E6eLkPC6Y4,997
27
- geoseeq/cli/main.py,sha256=ufRoSCJh1D5jas9rZO6ypKRHTRh0jL2ET7fXAV5oD2E,3987
28
+ geoseeq/cli/main.py,sha256=o1nrW3v2TAeWRAhctf97r6u4ic1J4SCPhqNGrDcnnFo,3987
28
29
  geoseeq/cli/manage.py,sha256=wGXAcVaXqE5JQEU8Jh6OlHr02nB396bpS_SFcOZdrEo,5929
29
30
  geoseeq/cli/progress_bar.py,sha256=p1Xl01nkYxSBZCB30ue2verIIi22W93m3ZAMAxipD0g,738
30
31
  geoseeq/cli/project.py,sha256=V5SdXm2Hwo2lxrkpwRDedw-mAE4XnM2uwT-Gj1D90VQ,3030
@@ -40,10 +41,10 @@ geoseeq/cli/shared_params/config.py,sha256=HQ0xQh_jdt3EKI5VXYqQXzo-s8Rm6YlziMyVX
40
41
  geoseeq/cli/shared_params/id_handlers.py,sha256=KtzflnplYVkXsyqI5Ej6r-_BwQnuXVHPr7JcYumTKNc,10700
41
42
  geoseeq/cli/shared_params/obj_getters.py,sha256=ZSkt6LnDkVFlNVYKgLrjzg60-6BthZMr3eeD3HNqzac,2741
42
43
  geoseeq/cli/shared_params/opts_and_args.py,sha256=_DcJ-TqgrbBaeDd-kuHEx2gLZPQN6EHZYWh8Ag-d8Vg,2091
43
- geoseeq/cli/upload/__init__.py,sha256=3C9_S9t7chmYU-2ot89NV03x-EtmsjibulErKaU9w1k,627
44
- geoseeq/cli/upload/upload.py,sha256=JZkhe1q3KOp7-tKyzwi860TQhZoNDnZs4yB2PJhOjl0,10081
45
- geoseeq/cli/upload/upload_advanced.py,sha256=Jq5eGe-wOdrzxGWVwaFPg0BAJcW0YSx_eHEmYjJeKuA,3434
46
- geoseeq/cli/upload/upload_reads.py,sha256=Q5gihBmQM9jQx0QSj5qPH8sc8CkVNE1_DD5JradXBdg,10990
44
+ geoseeq/cli/upload/__init__.py,sha256=xNbAI_eLbepgtW9nD8z5KmVjEK7O9CcJk8OpVspwI5A,775
45
+ geoseeq/cli/upload/upload.py,sha256=U9w18sG6dZ0uJoAMcQDLdrEtgmRaSaPS7-8KM5LkVd4,14220
46
+ geoseeq/cli/upload/upload_advanced.py,sha256=tXP7SWaLbLay5FVtqOoj-oToBM1ha2NWzywMnE0Foeo,3434
47
+ geoseeq/cli/upload/upload_reads.py,sha256=IlO-9b8dHbA-fx8FK_R0BwyoRgtqQUoowgXJcyx_O3k,11018
47
48
  geoseeq/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
49
  geoseeq/contrib/ncbi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
50
  geoseeq/contrib/ncbi/api.py,sha256=WQeLoGA_-Zha-QeSO8_i7HpvXyD8UkV0qc5okm11KiA,1056
@@ -70,10 +71,11 @@ geoseeq/result/bioinfo.py,sha256=QQtbyogrdro9avJSN0713sxLVnVeA24mFw3hWtKDKyw,178
70
71
  geoseeq/result/file_chunker.py,sha256=bXq1csuRtqMB5sbH-AfWo6gdPwrivv5DJPuHVj-h08w,1758
71
72
  geoseeq/result/file_download.py,sha256=5IXg_dIWlrRHBJQssO42da5_bIJOyH0_b8K2KWVAFBE,8210
72
73
  geoseeq/result/file_upload.py,sha256=xs1DrI-h4ZP7xN8HPBc3SFpcPAxR5HAolraP1Zu7tvE,10648
73
- geoseeq/result/result_file.py,sha256=A2PIdkuNY0czXLXPenSRdUPdCFdjJGGqs3nBOflNwnA,9099
74
- geoseeq/result/result_folder.py,sha256=-m1lDVLpNHKy-JUGihboVzvdMJEnHossyRnxmBe1XLo,11140
74
+ geoseeq/result/result_file.py,sha256=mkFh2DpKO1-kEAARCMYjkc7TmkJh41azyauGIHl_VZo,9173
75
+ geoseeq/result/result_folder.py,sha256=iyO0hwZWokrH6oWhBgHlunWMpCMpejKb8v2sHFhecws,11283
75
76
  geoseeq/result/resumable_download_tracker.py,sha256=YEzqHBBnE7L3XokTvlTAhHZ8TcDTIE_pyTQ7YadOfbU,3667
76
77
  geoseeq/result/resumable_upload_tracker.py,sha256=2aI09gYz2yw63jEXqs8lmCRKQ79TIc3YuPETvP0Jeek,3811
78
+ geoseeq/result/smart_objects.py,sha256=-krK9h9HcznIglf189uPghOidF_BzOeSxmBWxrtFFo8,1991
77
79
  geoseeq/result/utils.py,sha256=C-CxGzB3WddlnRiqFSkrY78I_m0yFgNqsTBRzGU-y8Q,2772
78
80
  geoseeq/vc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
81
  geoseeq/vc/checksum.py,sha256=y8rh1asUZNbE_NLiFO0-9hImLNiTOc2YXQBRKORWK7k,710
@@ -87,9 +89,9 @@ geoseeq/vc/vc_stub.py,sha256=IQr8dI0zsWKVAeY_5ybDD6n49_3othcgfHS3P0O9tuY,3110
87
89
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
90
  tests/test_api_client.py,sha256=TS5njc5pcPP_Ycy-ljcfPVT1hQRBsFVdQ0lCqBmoesU,12810
89
91
  tests/test_plotting.py,sha256=TcTu-2ARr8sxZJ7wPQxmbs3-gHw7uRvsgrhhhg0qKik,784
90
- geoseeq-0.6.14.dev6.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
91
- geoseeq-0.6.14.dev6.dist-info/METADATA,sha256=Yg0PM7m43T1S2-aC-vXwJsQ4SDh1JqkUqAbL2qePFBk,4937
92
- geoseeq-0.6.14.dev6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
93
- geoseeq-0.6.14.dev6.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
94
- geoseeq-0.6.14.dev6.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
95
- geoseeq-0.6.14.dev6.dist-info/RECORD,,
92
+ geoseeq-0.6.15.dev1.dist-info/LICENSE,sha256=IuhIl1XCxXLPLJT_coN1CNqQU4Khlq7x4IdW7ioOJD8,1067
93
+ geoseeq-0.6.15.dev1.dist-info/METADATA,sha256=r1u5D-DMAZpT_8OSYg3MBUmHLJEjX16pdG2Z-cy8Ago,4937
94
+ geoseeq-0.6.15.dev1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
95
+ geoseeq-0.6.15.dev1.dist-info/entry_points.txt,sha256=yF-6KDM8zXib4Al0qn49TX-qM7PUkWUIcYtsgt36rjM,45
96
+ geoseeq-0.6.15.dev1.dist-info/top_level.txt,sha256=zZk7mmeaqAYqFJG8nq2DTgSQPbflRjJwkDIhNURPDEU,14
97
+ geoseeq-0.6.15.dev1.dist-info/RECORD,,