geoseeq 0.6.14.dev2__tar.gz → 0.6.14.dev4__tar.gz

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.
Files changed (101) hide show
  1. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/PKG-INFO +1 -1
  2. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/download.py +78 -22
  3. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/main.py +1 -1
  4. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/sample.py +0 -1
  5. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/PKG-INFO +1 -1
  6. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/pyproject.toml +1 -1
  7. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/LICENSE +0 -0
  8. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/README.md +0 -0
  9. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/__init__.py +0 -0
  10. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/app.py +0 -0
  11. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/blob_constructors.py +0 -0
  12. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/bulk_creators.py +0 -0
  13. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/__init__.py +0 -0
  14. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/constants.py +0 -0
  15. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/copy.py +0 -0
  16. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/detail.py +0 -0
  17. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/fastq_utils.py +0 -0
  18. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/find_grn.py +0 -0
  19. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/get_eula.py +0 -0
  20. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/manage.py +0 -0
  21. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/progress_bar.py +0 -0
  22. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/project.py +0 -0
  23. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/raw.py +0 -0
  24. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/run.py +0 -0
  25. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/search.py +0 -0
  26. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/__init__.py +0 -0
  27. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/common_state.py +0 -0
  28. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/config.py +0 -0
  29. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/id_handlers.py +0 -0
  30. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/obj_getters.py +0 -0
  31. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/shared_params/opts_and_args.py +0 -0
  32. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/upload/__init__.py +0 -0
  33. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/upload/upload.py +0 -0
  34. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/upload/upload_advanced.py +0 -0
  35. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/upload/upload_reads.py +0 -0
  36. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/user.py +0 -0
  37. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/utils.py +0 -0
  38. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/cli/view.py +0 -0
  39. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/constants.py +0 -0
  40. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/__init__.py +0 -0
  41. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/ncbi/__init__.py +0 -0
  42. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/ncbi/api.py +0 -0
  43. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/ncbi/bioproject.py +0 -0
  44. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/ncbi/cli.py +0 -0
  45. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/contrib/ncbi/setup_logging.py +0 -0
  46. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/file_system_cache.py +0 -0
  47. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/__init__.py +0 -0
  48. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/from_blobs.py +0 -0
  49. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/from_ids.py +0 -0
  50. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/from_names.py +0 -0
  51. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/from_uuids.py +0 -0
  52. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/resolvers.py +0 -0
  53. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/id_constructors/utils.py +0 -0
  54. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/knex.py +0 -0
  55. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/organization.py +0 -0
  56. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/pipeline.py +0 -0
  57. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/__init__.py +0 -0
  58. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/constants.py +0 -0
  59. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/highcharts.py +0 -0
  60. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/map/__init__.py +0 -0
  61. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/map/base_layer.py +0 -0
  62. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/map/map.py +0 -0
  63. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/map/overlay.py +0 -0
  64. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/plotting/selectable.py +0 -0
  65. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/project.py +0 -0
  66. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/remote_object.py +0 -0
  67. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/__init__.py +0 -0
  68. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/bioinfo.py +0 -0
  69. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/file_chunker.py +0 -0
  70. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/file_download.py +0 -0
  71. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/file_upload.py +0 -0
  72. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/result_file.py +0 -0
  73. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/result_folder.py +0 -0
  74. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/resumable_download_tracker.py +0 -0
  75. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/resumable_upload_tracker.py +0 -0
  76. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/result/utils.py +0 -0
  77. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/search.py +0 -0
  78. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/smart_table.py +0 -0
  79. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/upload_download_manager.py +0 -0
  80. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/user.py +0 -0
  81. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/utils.py +0 -0
  82. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/__init__.py +0 -0
  83. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/checksum.py +0 -0
  84. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/cli.py +0 -0
  85. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/clone.py +0 -0
  86. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/constants.py +0 -0
  87. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/vc_cache.py +0 -0
  88. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/vc_dir.py +0 -0
  89. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/vc_sample.py +0 -0
  90. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/vc/vc_stub.py +0 -0
  91. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq/work_orders.py +0 -0
  92. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/SOURCES.txt +0 -0
  93. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/dependency_links.txt +0 -0
  94. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/entry_points.txt +0 -0
  95. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/requires.txt +0 -0
  96. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/geoseeq.egg-info/top_level.txt +0 -0
  97. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/setup.cfg +0 -0
  98. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/setup.py +0 -0
  99. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/tests/__init__.py +0 -0
  100. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/tests/test_api_client.py +0 -0
  101. {geoseeq-0.6.14.dev2 → geoseeq-0.6.14.dev4}/tests/test_plotting.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: geoseeq
3
- Version: 0.6.14.dev2
3
+ Version: 0.6.14.dev4
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>
@@ -378,6 +378,71 @@ def cli_download_ids(state, cores, target_dir, file_name, yes, download, head, i
378
378
  download_manager.download_files()
379
379
 
380
380
 
381
+ def _get_sample_result_files_with_names(sample, module_name=None, first=False):
382
+ for read_type, folder in sample.get_all_fastqs().items():
383
+ if module_name and module_name != read_type:
384
+ continue
385
+ result_files_with_names = []
386
+ for folder_name, result_files in folder.items():
387
+ for lane_num, result_file in enumerate(result_files):
388
+ lane_num = lane_num + 1 # 1 indexed
389
+ if read_type in ["short_read::paired_end"]:
390
+ key = (sample, read_type, 1, lane_num) # sample name, read type, read number, lane number
391
+ result_files_with_names.append(
392
+ (result_file[0], result_file[0].get_referenced_filename(), key)
393
+ )
394
+ key = (sample, read_type, 2, lane_num)
395
+ result_files_with_names.append(
396
+ (result_file[1], result_file[1].get_referenced_filename(), key)
397
+ )
398
+ else:
399
+ key = (sample, read_type, 1, lane_num)
400
+ result_files_with_names.append(
401
+ (result_file, result_file.get_referenced_filename(), key)
402
+ )
403
+ if first:
404
+ break
405
+
406
+ return result_files_with_names
407
+
408
+
409
+ def _make_read_configs(download_results, config_dir="."):
410
+ """Make JSON config files that look like this.
411
+
412
+ {
413
+ "sample_name": "small",
414
+ "reads_1": ["small.fq.gz"],
415
+ "reads_2": [],
416
+ "fastq_checksum": "",
417
+ "data_type": "short-read",
418
+ "bdx_result_dir": "results",
419
+ "geoseeq_uuid": "05bf22e9-9d25-42db-af25-31bc538a7006"
420
+ }
421
+ """
422
+ config_blobs = {} # sample ids -> config_blobs
423
+ download_results = sorted(download_results, key=lambda x: x[1][3]) # sort by lane number
424
+ for local_path, (sample, read_type, read_num, lane_num), _ in download_results:
425
+ if sample.name not in config_blobs:
426
+ config_blobs[sample.name] = {
427
+ "sample_name": sample.name,
428
+ "reads_1": [],
429
+ "reads_2": [],
430
+ "fastq_checksum": "",
431
+ "data_type": "short-read",
432
+ "bdx_result_dir": "results",
433
+ "geoseeq_uuid": sample.uuid,
434
+ }
435
+ if read_num == 1:
436
+ config_blobs[sample.name]["reads_1"].append(local_path) # sorted by lane number
437
+ else:
438
+ config_blobs[sample.name]["reads_2"].append(local_path)
439
+
440
+ for sample_name, config_blob in config_blobs.items():
441
+ config_path = join(config_dir, f"{sample_name}.config.json")
442
+ with open(config_path, "w") as f:
443
+ json.dump(config_blob, f, indent=4)
444
+
445
+
381
446
  @cli_download.command("fastqs")
382
447
  @use_common_state
383
448
  @cores_option
@@ -385,6 +450,7 @@ def cli_download_ids(state, cores, target_dir, file_name, yes, download, head, i
385
450
  @yes_option
386
451
  @click.option("--first/--all", default=False, help="Download only the first folder of fastq files for each sample.")
387
452
  @click.option("--download/--urls-only", default=True, help="Download files or just print urls")
453
+ @click.option("--config-dir", default=None, help="Directory to write read config files. If unset do not write config files.")
388
454
  @module_option(FASTQ_MODULE_NAMES, use_default=False)
389
455
  @ignore_errors_option
390
456
  @alt_id_option
@@ -396,6 +462,7 @@ def cli_download_fastqs(state,
396
462
  yes,
397
463
  first,
398
464
  download,
465
+ config_dir,
399
466
  module_name,
400
467
  ignore_errors,
401
468
  alt_sample_id,
@@ -455,24 +522,12 @@ def cli_download_fastqs(state,
455
522
 
456
523
  result_files_with_names = []
457
524
  for sample in samples:
458
- for read_type, folder in sample.get_all_fastqs().items():
459
- if module_name and module_name != read_type:
460
- continue
461
- for folder_name, result_files in folder.items():
462
- for result_file in result_files:
463
- if read_type in ["short_read::paired_end"]:
464
- result_files_with_names.append(
465
- (result_file[0], result_file[0].get_referenced_filename())
466
- )
467
- result_files_with_names.append(
468
- (result_file[1], result_file[1].get_referenced_filename())
469
- )
470
- else:
471
- result_files_with_names.append(
472
- (result_file, result_file.get_referenced_filename())
473
- )
474
- if first:
475
- break
525
+ try:
526
+ result_files_with_names += _get_sample_result_files_with_names(sample, module_name, first)
527
+ except Exception as e:
528
+ logger.error(f"Error fetching fastq files for sample {sample.name}: {e}")
529
+ if not ignore_errors:
530
+ raise e
476
531
 
477
532
  if len(result_files_with_names) == 0:
478
533
  click.echo("No suitable fastq files found.")
@@ -484,8 +539,8 @@ def cli_download_fastqs(state,
484
539
  log_level=state.log_level,
485
540
  progress_tracker_factory=PBarManager().get_new_bar,
486
541
  )
487
- for result_file, filename in result_files_with_names:
488
- download_manager.add_download(result_file, join(target_dir, filename))
542
+ for result_file, filename, key in result_files_with_names:
543
+ download_manager.add_download(result_file, join(target_dir, filename), key=key)
489
544
  if not download:
490
545
  print(download_manager.get_url_string(), file=state.outfile)
491
546
  else:
@@ -493,5 +548,6 @@ def cli_download_fastqs(state,
493
548
  if not yes:
494
549
  click.confirm('Continue?', abort=True)
495
550
  logger.info(f'Downloading {len(download_manager)} files to {target_dir}')
496
- download_manager.download_files()
497
-
551
+ download_results = download_manager.download_files()
552
+ if config_dir:
553
+ _make_read_configs(download_results, config_dir)
@@ -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.14dev2') # remember to update pyproject.toml
58
+ click.echo('0.6.14dev4') # remember to update pyproject.toml
59
59
 
60
60
 
61
61
  @main.group('advanced')
@@ -200,7 +200,6 @@ class Sample(RemoteObject):
200
200
  """
201
201
  url = f"data/samples/{self.uuid}/all-fastqs"
202
202
  blob = self.knex.get(url)
203
- print(blob)
204
203
  files = {}
205
204
  for read_type, folders in blob.items():
206
205
  files[read_type] = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: geoseeq
3
- Version: 0.6.14.dev2
3
+ Version: 0.6.14.dev4
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>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "geoseeq"
7
- version = "0.6.14dev2"
7
+ version = "0.6.14dev4"
8
8
  authors = [
9
9
  { name="David C. Danko", email="dcdanko@biotia.io" },
10
10
  ]
File without changes
File without changes
File without changes
File without changes