eva-sub-cli 0.6.4__tar.gz → 0.6.6__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 (173) hide show
  1. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/PKG-INFO +1 -1
  2. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/_version.py +3 -3
  3. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/call_home.py +14 -2
  4. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/eva_schema.json +4 -2
  5. eva_sub_cli-0.6.6/eva_sub_cli/jinja_templates/html/file_validation.html +89 -0
  6. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/report.html +31 -11
  7. eva_sub_cli-0.6.6/eva_sub_cli/jinja_templates/text/file_validation.txt +55 -0
  8. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/report.txt +36 -15
  9. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/nextflow/validation.nf +0 -2
  10. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/validators/native_validator.py +0 -2
  11. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/validators/validator.py +140 -51
  12. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/PKG-INFO +1 -1
  13. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/SOURCES.txt +2 -0
  14. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/scm_file_list.json +125 -123
  15. eva_sub_cli-0.6.6/eva_sub_cli.egg-info/scm_version.json +8 -0
  16. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test.json +1 -1
  17. eva_sub_cli-0.6.6/tests/resources/EVA_Submission_test.xlsx +0 -0
  18. eva_sub_cli-0.6.6/tests/resources/EVA_Submission_test_V2.xlsx +0 -0
  19. eva_sub_cli-0.6.6/tests/resources/EVA_Submission_test_fails.xlsx +0 -0
  20. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test_with_asm_report.json +1 -1
  21. eva_sub_cli-0.6.6/tests/resources/EVA_Submission_test_with_links.xlsx +0 -0
  22. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test_with_non_vcf_files.json +1 -1
  23. eva_sub_cli-0.6.6/tests/resources/EVA_Submission_test_with_non_vcf_files.xlsx +0 -0
  24. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/metadata_with_filename.json +1 -1
  25. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_metadata_json_report.html +49 -49
  26. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_metadata_json_report.txt +20 -20
  27. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_metadata_xlsx_report.html +49 -49
  28. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_metadata_xlsx_report.txt +20 -20
  29. eva_sub_cli-0.6.6/tests/resources/validation_reports/expected_report_metadata_json_crashed.html +147 -0
  30. eva_sub_cli-0.6.6/tests/resources/validation_reports/expected_report_metadata_json_crashed.txt +47 -0
  31. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_report_metadata_json_process_not_run.html +3 -0
  32. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_report_metadata_json_process_not_run.txt +3 -0
  33. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html +49 -49
  34. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.txt +20 -20
  35. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/metadata_validation.txt +1 -1
  36. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_call_home.py +6 -0
  37. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_orchestrator.py +2 -2
  38. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_report.py +58 -20
  39. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_validator.py +226 -21
  40. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_xlsx2json.py +1 -1
  41. eva_sub_cli-0.6.4/eva_sub_cli/jinja_templates/html/file_validation.html +0 -93
  42. eva_sub_cli-0.6.4/eva_sub_cli/jinja_templates/text/file_validation.txt +0 -60
  43. eva_sub_cli-0.6.4/eva_sub_cli.egg-info/scm_version.json +0 -8
  44. eva_sub_cli-0.6.4/tests/resources/EVA_Submission_test.xlsx +0 -0
  45. eva_sub_cli-0.6.4/tests/resources/EVA_Submission_test_V2.xlsx +0 -0
  46. eva_sub_cli-0.6.4/tests/resources/EVA_Submission_test_fails.xlsx +0 -0
  47. eva_sub_cli-0.6.4/tests/resources/EVA_Submission_test_with_links.xlsx +0 -0
  48. eva_sub_cli-0.6.4/tests/resources/EVA_Submission_test_with_non_vcf_files.xlsx +0 -0
  49. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.github/workflows/integration-tests.yml +0 -0
  50. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.github/workflows/publish.yml +0 -0
  51. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.github/workflows/publish_docs.yml +0 -0
  52. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.github/workflows/tests.yml +0 -0
  53. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.github/workflows/trigger-eva-sub-cli-integration-tests.yml +0 -0
  54. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/.gitignore +0 -0
  55. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/LICENSE +0 -0
  56. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/README.md +0 -0
  57. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/conda/build.sh +0 -0
  58. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/conda/meta.yaml +0 -0
  59. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docker/Dockerfile +0 -0
  60. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/README.md +0 -0
  61. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/_config.yml +0 -0
  62. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/common_vcf_errors.md +0 -0
  63. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/how_to_submit.md +0 -0
  64. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/input_file_overview.md +0 -0
  65. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/installation.md +0 -0
  66. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/using_nextflow.md +0 -0
  67. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/docs/validation_overview.md +0 -0
  68. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/__init__.py +0 -0
  69. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/auth.py +0 -0
  70. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/date_utils.py +0 -0
  71. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/EVA_Submission_Example.xlsx +0 -0
  72. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/EVA_Submission_template.xlsx +0 -0
  73. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/call_home_payload_schema.json +0 -0
  74. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/eva-biosamples.json +0 -0
  75. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/eva_logo.png +0 -0
  76. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/spreadsheet2json_conf.yaml +0 -0
  77. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/etc/spreadsheet2json_conf_V2.yaml +0 -0
  78. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/exceptions.py +0 -0
  79. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/__init__.py +0 -0
  80. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/check_fasta_insdc.py +0 -0
  81. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/check_metadata_semantics.py +0 -0
  82. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/cli.py +0 -0
  83. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/evidence_type_checker.py +0 -0
  84. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/format_metadata.py +0 -0
  85. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/samples_checker.py +0 -0
  86. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/trim_down.py +0 -0
  87. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/executables/xlsx2json.py +0 -0
  88. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/file_utils.py +0 -0
  89. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/fasta_check.html +0 -0
  90. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/metadata_validation.html +0 -0
  91. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/project_details.html +0 -0
  92. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/sample_name_check.html +0 -0
  93. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/html/shallow_validation.html +0 -0
  94. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/fasta_check.txt +0 -0
  95. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/metadata_validation.txt +0 -0
  96. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/project_details.txt +0 -0
  97. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/sample_name_check.txt +0 -0
  98. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/jinja_templates/text/shallow_validation.txt +0 -0
  99. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/metadata.py +0 -0
  100. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/orchestrator.py +0 -0
  101. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/report.py +0 -0
  102. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/semantic_metadata.py +0 -0
  103. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/submission_ws.py +0 -0
  104. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/submit.py +0 -0
  105. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/utils.py +0 -0
  106. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/validators/__init__.py +0 -0
  107. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/validators/docker_validator.py +0 -0
  108. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli/validators/validation_results_parsers.py +0 -0
  109. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/dependency_links.txt +0 -0
  110. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/entry_points.txt +0 -0
  111. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/requires.txt +0 -0
  112. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/eva_sub_cli.egg-info/top_level.txt +0 -0
  113. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/pyproject.toml +0 -0
  114. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/pytest.ini +0 -0
  115. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/requirements.txt +0 -0
  116. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/setup.cfg +0 -0
  117. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/setup.py +0 -0
  118. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/build_and_test_docker_locally.py +0 -0
  119. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/ignore_test_nextflow_validation.yml +0 -0
  120. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_Docker_Test.xlsx +0 -0
  121. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test_version_missing.xlsx +0 -0
  122. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test_with_project_accession.json +0 -0
  123. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/EVA_Submission_test_with_project_accession.xlsx +0 -0
  124. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/assembly_check/invalid.vcf.assembly_check.log +0 -0
  125. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/assembly_check/invalid.vcf.text_assembly_report.txt +0 -0
  126. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/assembly_reports/input_passed.txt +0 -0
  127. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/fasta_files/Saccharomyces_cerevisiae_I.fa +0 -0
  128. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/fasta_files/input_passed.fa +0 -0
  129. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/fasta_files/multi_seq.fa +0 -0
  130. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_checker/evidence_type.yaml +0 -0
  131. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_checker/example1.vcf.gz +0 -0
  132. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_checker/example2.vcf +0 -0
  133. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_checker/example3.vcf +0 -0
  134. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_checker/metadata.json +0 -0
  135. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/allele_freq.vcf +0 -0
  136. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/fake_fasta.fa +0 -0
  137. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/genotype.vcf +0 -0
  138. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/metadata_af_no_sample_in_vcf.json +0 -0
  139. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/metadata_af_with_sample_in_vcf.json +0 -0
  140. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/metadata_genotype_no_sample_in_vcf.json +0 -0
  141. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/sample_in_vcf_check/metadata_genotype_with_sample_in_vcf.json +0 -0
  142. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.assembly_check.log +0 -0
  143. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt +0 -0
  144. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.valid_assembly_report.1680102476700.txt +0 -0
  145. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/metadata.json +0 -0
  146. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/evidence_type_checker.yml +0 -0
  147. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/file_info.txt +0 -0
  148. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/input_passed.fa_check.yml +0 -0
  149. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/input_passed_trim_down.yml +0 -0
  150. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/metadata_conversion_errors.yml +0 -0
  151. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/metadata_semantic_check.yml +0 -0
  152. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/other_validations/sample_checker.yml +0 -0
  153. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.db +0 -0
  154. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.txt +0 -0
  155. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.vcf_format.log +0 -0
  156. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/vcf_files/example2.vcf.gz +0 -0
  157. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/vcf_files/example2.vcf.gz.tbi +0 -0
  158. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/resources/vcf_files/input_passed.vcf +0 -0
  159. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_auth.py +0 -0
  160. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_check_fasta_insdc.py +0 -0
  161. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_cli.py +0 -0
  162. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_docker_validator.py +0 -0
  163. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_evidence_type_checker.py +0 -0
  164. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_file_utils.py +0 -0
  165. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_format_metadata.py +0 -0
  166. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_metadata.py +0 -0
  167. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_native_validator_sample_in_vcf.py +0 -0
  168. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_samples_checker.py +0 -0
  169. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_semantic_metadata.py +0 -0
  170. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_submit.py +0 -0
  171. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_trim_down.py +0 -0
  172. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_utils.py +0 -0
  173. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.6}/tests/test_validaton_results_parsers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eva_sub_cli
3
- Version: 0.6.4
3
+ Version: 0.6.6
4
4
  Summary: EBI EVA - validation and submission command line tool
5
5
  Classifier: Development Status :: 5 - Production/Stable
6
6
  Classifier: Environment :: Console
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.6.4'
22
- __version_tuple__ = version_tuple = (0, 6, 4)
21
+ __version__ = version = '0.6.6'
22
+ __version_tuple__ = version_tuple = (0, 6, 6)
23
23
 
24
- __commit_id__ = commit_id = 'g1a3c8a4d1'
24
+ __commit_id__ = commit_id = 'gdb6448e77'
@@ -1,4 +1,5 @@
1
1
  import os
2
+ import threading
2
3
  import traceback
3
4
  import uuid
4
5
  from datetime import datetime, timezone
@@ -67,6 +68,7 @@ class CallHomeClient:
67
68
  self.run_id = _get_or_create_run_id(submission_dir)
68
69
  self.executor = executor
69
70
  self.tasks = tasks
71
+ self._threads = []
70
72
 
71
73
  def _build_payload(self, event_type, **kwargs):
72
74
  now = datetime.now(timezone.utc)
@@ -90,12 +92,22 @@ class CallHomeClient:
90
92
  return payload
91
93
 
92
94
  def _send_event(self, event_type, **kwargs):
95
+ payload = self._build_payload(event_type, **kwargs)
96
+ thread = threading.Thread(target=self._post_event, args=(event_type, payload))
97
+ thread.start()
98
+ self._threads.append(thread)
99
+
100
+ def _post_event(self, event_type, payload):
93
101
  try:
94
- payload = self._build_payload(event_type, **kwargs)
95
- requests.post(_get_call_home_url(), json=payload, timeout=5)
102
+ requests.post(_get_call_home_url(), json=payload, timeout=60)
96
103
  except Exception:
97
104
  logger.debug('Failed to send %s call-home event', event_type)
98
105
 
106
+ def wait_for_pending_events(self, timeout=None):
107
+ for thread in self._threads:
108
+ thread.join(timeout)
109
+ self._threads = []
110
+
99
111
  def send_start(self):
100
112
  self._send_event(EVENT_START)
101
113
 
@@ -89,12 +89,14 @@
89
89
  "title": {
90
90
  "type": "string",
91
91
  "description": "Title of the project",
92
- "maxLength": 500
92
+ "minLength": 20,
93
+ "maxLength": 250
93
94
  },
94
95
  "description": {
95
96
  "type": "string",
96
97
  "description": "Description of the project",
97
- "maxLength": 5000
98
+ "minLength": 20,
99
+ "maxLength": 4000
98
100
  },
99
101
  "centre": {
100
102
  "type": "string",
@@ -0,0 +1,89 @@
1
+
2
+
3
+ {% macro vcf_check_report(vcf_check_result_per_file, vcf_file_names) -%}
4
+ {% for file_name in vcf_file_names %}
5
+ {% set vcf_check_result = vcf_check_result_per_file.get(file_name, {}) %}
6
+ {% set critical_count = vcf_check_result.get("critical_count", 0) %}
7
+ {% set error_count = vcf_check_result.get("error_count", 0) %}
8
+ {% set expand_icon = "" %}
9
+ {% if critical_count > 0 %}
10
+ {% set expand_icon = "▶" %}
11
+ {% set icon = "❌" %}
12
+ {% set row_class = "report-section fail collapsible" %}
13
+ {% elif error_count > 0 %}
14
+ {% set expand_icon = "▶" %}
15
+ {% set icon = "❗" %}
16
+ {% set row_class = "report-section warn collapsible" %}
17
+ {% else %}
18
+ {% set icon = "✔" %}
19
+ {% set row_class = "report-section pass" %}
20
+ {% endif %}
21
+ <div class='{{ row_class }}'><span class="expand_icon">{{ expand_icon }}</span> {{ icon }} {{ file_name }}: {{ critical_count }} critical errors, {{ error_count }} non-critical errors </div>
22
+ {% set critical_list = vcf_check_result.get("critical_list") %}
23
+ {% set error_list = vcf_check_result.get("error_list") %}
24
+
25
+ {% if critical_list or error_list%}
26
+ <div class="error-list">
27
+ <div class="error-description">First 10 errors per category are below. <strong>Full report:</strong> {{ vcf_check_result.get('report_path', '') }}</div>
28
+ <table>
29
+ <tr>
30
+ <th>Category</th><th>Error</th>
31
+ </tr>
32
+ {% for error in critical_list[:10] %}
33
+ <tr>
34
+ <td><strong>critical error</strong></td><td> {{ error }}</td>
35
+ </tr>
36
+ {% endfor %}
37
+ {% for error in error_list[:10] %}
38
+ <tr>
39
+ <td><strong>non-critical error</strong></td><td> {{ error }}</td>
40
+ </tr>
41
+ {% endfor %}
42
+ </table>
43
+ </div>
44
+ {% endif %}
45
+ {% endfor %}
46
+ {%- endmacro %}
47
+
48
+ {% macro assembly_check_report(assembly_check_result_per_file, vcf_file_names) -%}
49
+ {% for file_name in vcf_file_names %}
50
+ {% set assembly_check_result = assembly_check_result_per_file.get(file_name, {}) %}
51
+ {% set nb_match = assembly_check_result.get("match", 0) %}
52
+ {% set nb_total = assembly_check_result.get("total", 0) %}
53
+ {% set match_percentage = nb_match / nb_total * 100 if nb_total else 0 %}
54
+ {% set expand_icon = "" %}
55
+ {% if assembly_check_result.get("nb_mismatch", 0) > 0 or nb_total == 0 %}
56
+ {% set expand_icon = "&#9654;" %}
57
+ {% set icon = "&#10060;" %}
58
+ {% set row_class = "report-section fail collapsible" %}
59
+ {% else %}
60
+ {% set icon = "&#10004;" %}
61
+ {% set row_class = "report-section pass" %}
62
+ {% endif %}
63
+ <div class='{{ row_class }}'><span class="expand_icon">{{ expand_icon }}</span> {{ icon }} {{ file_name }}: {{ nb_match }}/{{ nb_total }} ({{ match_percentage|round(2) }}%)</div>
64
+ {% set mismatch_list = assembly_check_result.get("mismatch_list") %}
65
+ {% set error_list = assembly_check_result.get("error_list") %}
66
+ {% if mismatch_list or error_list %}
67
+ <div class="error-list">
68
+ <div class="error-description">First 10 errors per category are below. <strong>Full report:</strong> {{ assembly_check_result.get('report_path', '') }}</div>
69
+ <table>
70
+ <tr>
71
+ <th>Category</th><th>Error</th>
72
+ </tr>
73
+ {% for error in error_list[:10] %}
74
+ <tr>
75
+ <td><strong>Parsing Error</strong></td><td> {{ error }}</td>
76
+ </tr>
77
+ {% endfor %}
78
+ {% for error in mismatch_list[:10] %}
79
+ <tr>
80
+ <td><strong>mismatch error</strong></td><td> {{ error }}</td>
81
+ </tr>
82
+ {% endfor %}
83
+ </table>
84
+ </div>
85
+ {% endif %}
86
+ {% endfor %}
87
+ {%- endmacro %}
88
+
89
+
@@ -1,6 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  {% from 'project_details.html' import project_details_report %}
3
- {% from 'file_validation.html' import file_validation_report %}
3
+ {% from 'file_validation.html' import assembly_check_report, vcf_check_report %}
4
4
  {% from 'sample_name_check.html' import sample_name_check_report %}
5
5
  {% from 'fasta_check.html' import fasta_check_report %}
6
6
  {% from 'metadata_validation.html' import metadata_validation_report %}
@@ -13,6 +13,13 @@
13
13
  <div class='{{ row_class }}'><span class="expand_icon">{{ expand_icon }}</span> {{ icon }} {{ text }}</div>
14
14
  {% endmacro %}
15
15
 
16
+ {% macro report_crashed_task(task_name) %}
17
+ {% set icon = "&#10071;" %} {# exclamation point ❗#}
18
+ {% set row_class = "report-section info" %}
19
+ {% set expand_icon = "" %}
20
+ <div class='{{ row_class }}'><span class="expand_icon">{{ expand_icon }}</span> {{ icon }} {{ task_name }} did not complete successfully. Check the logs for more information.</div>
21
+ {% endmacro %}
22
+
16
23
  <html lang="EN">
17
24
  <head>
18
25
  <meta charset="UTF-8">
@@ -73,8 +80,10 @@
73
80
  For requirements, please refer to the <a href="https://www.ebi.ac.uk/eva/?Submit-Data" target=”_blank”>EVA website</a>.
74
81
  </div>
75
82
  {% set run_status = validation_results.get('metadata_check', {}).get('run_status', '') %}
76
- {% if run_status %}
83
+ {% if run_status == 'success' %}
77
84
  {{ metadata_validation_report(validation_results) }}
85
+ {% elif run_status == 'crashed' %}
86
+ {{ report_crashed_task('Metadata check') }}
78
87
  {% else %}
79
88
  {{ validation_not_run_yet_message() }}
80
89
  {% endif %}
@@ -86,14 +95,21 @@
86
95
  Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.4.pdf" target=”_blank”>VCF specification</a>.
87
96
  Also checks whether the variants' reference alleles match against the reference assembly.
88
97
  </div>
98
+ <h3>Assembly check</h3>
99
+ {% set run_status = validation_results.get('assembly_check', {}).get('run_status', '') %}
100
+ {% if run_status == 'success' %}
101
+ {{ assembly_check_report(validation_results.get('assembly_check', {}), vcf_files) }}
102
+ {% elif run_status == 'crashed' %}
103
+ {{ report_crashed_task('Assembly check') }}
104
+ {% else %}
105
+ {{ validation_not_run_yet_message() }}
106
+ {% endif %}
107
+ <h3>VCF check</h3>
89
108
  {% set run_status = validation_results.get('vcf_check', {}).get('run_status', '') %}
90
- {% if run_status %}
91
- {% for file_name in vcf_files %}
92
- {% if file_name != "pass"%}
93
- <h3>{{ file_name }}</h3>
94
- {{ file_validation_report(validation_results, file_name) }}
95
- {% endif %}
96
- {% endfor %}
109
+ {% if run_status == 'success' %}
110
+ {{ vcf_check_report(validation_results.get('vcf_check', {}), vcf_files) }}
111
+ {% elif run_status == 'crashed' %}
112
+ {{ report_crashed_task('VCF check') }}
97
113
  {% else %}
98
114
  {{ validation_not_run_yet_message() }}
99
115
  {% endif %}
@@ -105,8 +121,10 @@
105
121
  Checks whether information in the metadata is concordant with that contained in the VCF files, in particular sample names.
106
122
  </div>
107
123
  {% set run_status = validation_results.get('sample_check', {}).get('run_status', '') %}
108
- {% if run_status %}
124
+ {% if run_status == 'success' %}
109
125
  {{ sample_name_check_report(validation_results)}}
126
+ {% elif run_status == 'crashed' %}
127
+ {{ report_crashed_task('Sample name concordance') }}
110
128
  {% else %}
111
129
  {{ validation_not_run_yet_message() }}
112
130
 
@@ -120,13 +138,15 @@
120
138
  Also checks if the reference assembly accession in the metadata matches the one determined from the FASTA file.
121
139
  </div>
122
140
  {% set run_status = validation_results.get('fasta_check', {}).get('run_status', '') %}
123
- {% if run_status %}
141
+ {% if run_status == 'success' %}
124
142
  {% for file_name in fasta_files %}
125
143
  {% if file_name != "pass"%}
126
144
  <h3>{{ file_name }}</h3>
127
145
  {{ fasta_check_report(validation_results, file_name) }}
128
146
  {% endif %}
129
147
  {% endfor %}
148
+ {% elif run_status == 'crashed' %}
149
+ {{ report_crashed_task('INSDC check') }}
130
150
  {% else %}
131
151
  {{ validation_not_run_yet_message() }}
132
152
  {% endif %}
@@ -0,0 +1,55 @@
1
+
2
+ {% macro vcf_check_report(vcf_check_result_per_file, vcf_file_names) -%}
3
+ {% for file_name in vcf_file_names %}
4
+ {% set vcf_check_result = vcf_check_result_per_file.get(file_name, {}) %}
5
+ {% set critical_count = vcf_check_result.get("critical_count", 0) %}
6
+ {% set error_count = vcf_check_result.get("error_count", 0) %}
7
+ {% if critical_count > 0 %}
8
+ {% set icon = "\u274C" %}
9
+ {% elif error_count > 0 %}
10
+ {% set icon = "\u26A0" %}
11
+ {% else %}
12
+ {% set icon = "\u2714" %}
13
+ {% endif %}
14
+ {{ icon }} {{ file_name }}: {{ critical_count }} critical errors, {{ error_count }} non-critical errors
15
+
16
+ {% set critical_list = vcf_check_result.get("critical_list") %}
17
+ {% set error_list = vcf_check_result.get("error_list") %}
18
+ {% if critical_list or error_list%}
19
+ First 10 errors per category are below. Full report: {{ vcf_check_result.get('report_path', '') }}
20
+ {% for error in critical_list[:10] %}
21
+ Critical error: {{ error }}
22
+ {% endfor %}
23
+ {% for error in error_list[:10] %}
24
+ Non-critical error: {{ error }}
25
+ {% endfor %}
26
+ {% endif %}
27
+ {% endfor %}
28
+ {%- endmacro %}
29
+
30
+ {% macro assembly_check_report(assembly_check_result_per_file, vcf_file_names) -%}
31
+ {% for file_name in vcf_file_names %}
32
+ {% set assembly_check_result = assembly_check_result_per_file.get(file_name, {}) %}
33
+ {% set nb_match = assembly_check_result.get("match", 0) %}
34
+ {% set nb_total = assembly_check_result.get("total", 0) %}
35
+ {% set match_percentage = nb_match / nb_total * 100 if nb_total else 0 %}
36
+ {% if assembly_check_result.get("nb_mismatch", 0) > 0 or nb_total == 0 %}
37
+ {% set icon = "\u274C" %}
38
+ {% else %}
39
+ {% set icon = "\u2714" %}
40
+ {% endif %}
41
+ {{ icon }} {{ file_name }}: {{ nb_match }}/{{ nb_total }} ({{ match_percentage|round(2) }}%)
42
+
43
+ {% set mismatch_list = assembly_check_result.get("mismatch_list") %}
44
+ {% set error_list = assembly_check_result.get("error_list") %}
45
+ {% if mismatch_list or error_list %}
46
+ First 10 errors per category are below. Full report: {{ assembly_check_result.get('report_path', '') }}
47
+ {% for error in error_list[:10] %}
48
+ Parsing error: {{ error }}
49
+ {% endfor %}
50
+ {% for error in mismatch_list[:10] %}
51
+ Mismatch error: {{ error }}
52
+ {% endfor %}
53
+ {% endif %}
54
+ {% endfor %}
55
+ {%- endmacro %}
@@ -1,5 +1,5 @@
1
1
  {% from 'project_details.txt' import project_details_report %}
2
- {% from 'file_validation.txt' import file_validation_report %}
2
+ {% from 'file_validation.txt' import assembly_check_report, vcf_check_report %}
3
3
  {% from 'sample_name_check.txt' import sample_name_check_report %}
4
4
  {% from 'fasta_check.txt' import fasta_check_report %}
5
5
  {% from 'metadata_validation.txt' import metadata_validation_report %}
@@ -10,6 +10,11 @@
10
10
  {{ icon }} {{ text }}
11
11
  {%- endmacro %}
12
12
 
13
+ {% macro report_crashed_task(task_name) -%}
14
+ {% set icon = "\u2757" %} {# exclamation point ❗#}
15
+ {{ icon }} {{ task_name }} did not complete successfully. Check the logs for more information.
16
+ {%- endmacro %}
17
+
13
18
  VALIDATION REPORT
14
19
  eva-sub-cli v{{cli_version}}
15
20
 
@@ -29,25 +34,36 @@ Ensures that required fields are present and values are formatted correctly.
29
34
  For requirements, please refer to the EVA website (https://www.ebi.ac.uk/eva/?Submit-Data).
30
35
 
31
36
  {% set run_status = validation_results.get('metadata_check', {}).get('run_status', '') %}
32
- {% if run_status %}
37
+ {% if run_status == 'success' %}
33
38
  {{ metadata_validation_report(validation_results) }}
39
+ {% elif run_status == 'crashed' %}
40
+ {{ report_crashed_task('Metadata check') }}
34
41
  {% else %}
35
42
  {{ validation_not_run_yet_message() }}
36
43
  {% endif %}
44
+
37
45
  -
38
46
 
39
47
  VCF VALIDATION RESULTS
40
48
  Checks whether each file is compliant with the VCF specification (http://samtools.github.io/hts-specs/VCFv4.4.pdf).
41
49
  Also checks whether the variants' reference alleles match against the reference assembly.
42
50
 
43
- {% set run_status = validation_results.get('vcf_check', {}).get('run_status', '') %}
44
- {% if run_status %}
45
- {% for file_name in vcf_files %}
46
- {% if file_name != "pass"%}
47
- {{ file_name }}
48
- {{ file_validation_report(validation_results, file_name) }}
51
+ ASSEMBLY CHECK
52
+ {% set run_status = validation_results.get('assembly_check', {}).get('run_status', '') %}
53
+ {% if run_status == 'success' %}
54
+ {{ assembly_check_report(validation_results.get('assembly_check', {}), vcf_files) }}
55
+ {% elif run_status == 'crashed' %}
56
+ {{ report_crashed_task('Assembly check') }}
57
+ {% else %}
58
+ {{ validation_not_run_yet_message() }}
49
59
  {% endif %}
50
- {% endfor %}
60
+
61
+ VCF CHECK
62
+ {% set run_status = validation_results.get('vcf_check', {}).get('run_status', '') %}
63
+ {% if run_status == 'success' %}
64
+ {{ vcf_check_report(validation_results.get('vcf_check', {}), vcf_files) }}
65
+ {% elif run_status == 'crashed' %}
66
+ {{ report_crashed_task('VCF check') }}
51
67
  {% else %}
52
68
  {{ validation_not_run_yet_message() }}
53
69
  {% endif %}
@@ -58,8 +74,10 @@ SAMPLE NAME CONCORDANCE CHECK
58
74
  Checks whether information in the metadata is concordant with that contained in the VCF files, in particular sample names.
59
75
 
60
76
  {% set run_status = validation_results.get('sample_check', {}).get('run_status', '') %}
61
- {% if run_status %}
77
+ {% if run_status == 'success' %}
62
78
  {{ sample_name_check_report(validation_results) }}
79
+ {% elif run_status == 'crashed' %}
80
+ {{ report_crashed_task('Sample name concordance') }}
63
81
  {% else %}
64
82
  {{ validation_not_run_yet_message() }}
65
83
  {% endif %}
@@ -71,13 +89,16 @@ Checks that the reference sequences in the FASTA file used to call the variants
71
89
  Also checks if the reference assembly accession in the metadata matches the one determined from the FASTA file.
72
90
 
73
91
  {% set run_status = validation_results.get('fasta_check', {}).get('run_status', '') %}
74
- {% if run_status %}
75
- {% for file_name in fasta_files %}
76
- {% if file_name != "pass"%}
92
+ {% if run_status == 'success' %}
93
+ {% for file_name in fasta_files %}
94
+ {% if file_name != "pass"%}
95
+ {# Indentation is important as it impact the report's look#}
77
96
  {{ file_name }}
78
97
  {{ fasta_check_report(validation_results, file_name) }}
79
- {% endif %}
80
- {% endfor %}
98
+ {% endif %}
99
+ {% endfor %}
100
+ {% elif run_status == 'crashed' %}
101
+ {{ report_crashed_task('INSDC check') }}
81
102
  {% else %}
82
103
  {{ validation_not_run_yet_message() }}
83
104
  {% endif %}
@@ -180,7 +180,6 @@ process check_vcf_valid {
180
180
  """
181
181
  trap 'if [[ \$? == 1 ]]; then exit 0; fi' EXIT
182
182
 
183
- rm -rf ${output_dir}/vcf_format
184
183
  mkdir -p vcf_format
185
184
  $params.executable.vcf_validator -i $vcf -r text -o vcf_format --require-evidence > vcf_format/${vcf}.vcf_format.log 2>&1
186
185
  """
@@ -210,7 +209,6 @@ process check_vcf_reference {
210
209
  """
211
210
  trap 'if [[ \$? == 1 || \$? == 139 ]]; then exit 0; fi' EXIT
212
211
 
213
- rm -rf ${output_dir}/assembly_check
214
212
  mkdir -p assembly_check
215
213
  $params.executable.vcf_assembly_checker -i $vcf -f $fasta $report_opt -r summary,text -o assembly_check --require-genbank > assembly_check/${vcf}.assembly_check.log 2>&1
216
214
  """
@@ -1,8 +1,6 @@
1
1
  import os
2
2
  import subprocess
3
3
 
4
- from ebi_eva_common_pyutils.logger import logging_config
5
-
6
4
  from eva_sub_cli.validators.validator import Validator, ALL_VALIDATION_TASKS
7
5
 
8
6