eva-sub-cli 0.4.8__tar.gz → 0.4.9__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.
- {eva_sub_cli-0.4.8/eva_sub_cli.egg-info → eva_sub_cli-0.4.9}/PKG-INFO +2 -2
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/_version.py +2 -2
- eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates/html_report.html → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html/report.html +3 -3
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/fasta_check.txt +46 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/file_validation.txt +58 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/metadata_validation.txt +33 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/project_details.txt +21 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/report.txt +59 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/sample_name_check.txt +24 -0
- eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/text/shallow_validation.txt +16 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/report.py +13 -4
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/validators/validator.py +14 -6
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9/eva_sub_cli.egg-info}/PKG-INFO +2 -2
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli.egg-info/SOURCES.txt +17 -7
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli.egg-info/requires.txt +1 -1
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/requirements.txt +1 -1
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/expected_report_metadata_json.html +1 -1
- eva_sub_cli-0.4.9/tests/resources/validation_reports/expected_report_metadata_json.txt +132 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/expected_report_metadata_xlsx.html +1 -1
- eva_sub_cli-0.4.9/tests/resources/validation_reports/expected_report_metadata_xlsx.txt +126 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html +1 -1
- eva_sub_cli-0.4.9/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.txt +135 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_report.py +96 -30
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_validator.py +5 -3
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/.github/workflows/publish.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/.github/workflows/publish_packages.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/.github/workflows/tests.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/.github/workflows/trigger-eva-sub-cli-integration-tests.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/.gitignore +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/LICENSE +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/README.md +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/conda/build.sh +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/conda/meta.yaml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/docker/Dockerfile +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/docs/Getting_Started_with_eva_sub_cli.md +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/__init__.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/auth.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/date_utils.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/EVA_Submission_Example.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/EVA_Submission_template.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/eva-biosamples.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/eva_logo.png +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/eva_schema.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/etc/spreadsheet2json_conf.yaml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/exceptions/__init__.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/exceptions/invalid_file_type_exception.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/exceptions/metadata_template_version_exception.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/exceptions/submission_not_found_exception.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/exceptions/submission_status_exception.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/__init__.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/check_fasta_insdc.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/check_metadata_semantics.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/cli.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/samples_checker.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/trim_down.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/executables/xlsx2json.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/file_utils.py +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/fasta_check.html +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/file_validation.html +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/metadata_validation.html +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/project_details.html +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/sample_name_check.html +0 -0
- {eva_sub_cli-0.4.8/eva_sub_cli/jinja_templates → eva_sub_cli-0.4.9/eva_sub_cli/jinja_templates/html}/shallow_validation.html +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/metadata.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/nextflow/validation.nf +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/orchestrator.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/semantic_metadata.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/submission_ws.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/submit.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/validators/__init__.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/validators/docker_validator.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/validators/native_validator.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli/validators/validation_results_parsers.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli.egg-info/dependency_links.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli.egg-info/entry_points.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/eva_sub_cli.egg-info/top_level.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/pyproject.toml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/pytest.ini +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/setup.cfg +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/setup.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/build_and_test_docker_locally.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/ignore_test_nextflow_validation.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_Docker_Test.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_test.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_test.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_test_fails.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_test_version_missing.xlsx +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/EVA_Submission_test_with_asm_report.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/assembly_check/invalid.vcf.assembly_check.log +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/assembly_check/invalid.vcf.text_assembly_report.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/assembly_reports/input_passed.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/fasta_files/Saccharomyces_cerevisiae_I.fa +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/fasta_files/input_passed.fa +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/fasta_files/multi_seq.fa +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/metadata_with_filename.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/sample_checker/example1.vcf.gz +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/sample_checker/example2.vcf +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/sample_checker/example3.vcf +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/sample_checker/metadata.json +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.assembly_check.log +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.valid_assembly_report.1680102476700.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/other_validations/input_passed.fa_check.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/other_validations/metadata_conversion_errors.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/other_validations/metadata_semantic_check.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/other_validations/metadata_validation.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/other_validations/sample_checker.yml +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.db +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.txt +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.vcf_format.log +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/vcf_files/example2.vcf.gz +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/resources/vcf_files/input_passed.vcf +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_auth.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_check_fasta_insdc.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_cli.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_docker_validator.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_file_utils.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_metadata.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_orchestrator.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_samples_checker.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_semantic_metadata.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_submit.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_trim_down.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_utils.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_validaton_results_parsers.py +0 -0
- {eva_sub_cli-0.4.8 → eva_sub_cli-0.4.9}/tests/test_xlsx2json.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eva_sub_cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.9
|
|
4
4
|
Summary: EBI EVA - validation and submission command line tool
|
|
5
5
|
Classifier: Development Status :: 5 - Production/Stable
|
|
6
6
|
Classifier: Environment :: Console
|
|
@@ -19,7 +19,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
19
19
|
Requires-Python: >=3.6
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: ebi_eva_common_pyutils==0.*,>=0.7.
|
|
22
|
+
Requires-Dist: ebi_eva_common_pyutils==0.*,>=0.7.3
|
|
23
23
|
Requires-Dist: jinja2==3.*,>=3.0.0
|
|
24
24
|
Requires-Dist: jsonschema==4.*
|
|
25
25
|
Requires-Dist: openpyxl==3.*
|
|
@@ -69,11 +69,11 @@
|
|
|
69
69
|
<section>
|
|
70
70
|
<h2>VCF validation results</h2>
|
|
71
71
|
<div class="description">
|
|
72
|
-
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.
|
|
72
|
+
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.4.pdf" target=”_blank”>VCF specification</a>.
|
|
73
73
|
Also checks whether the variants' reference alleles match against the reference assembly.
|
|
74
74
|
</div>
|
|
75
75
|
{% for file_name in vcf_files %}
|
|
76
|
-
{% if file_name!= "pass"%}
|
|
76
|
+
{% if file_name != "pass"%}
|
|
77
77
|
<h3>{{ file_name }}</h3>
|
|
78
78
|
{{ file_validation_report(validation_results, file_name) }}
|
|
79
79
|
{% endif %}
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
Also checks if the reference assembly accession in the metadata matches the one determined from the FASTA file.
|
|
96
96
|
</div>
|
|
97
97
|
{% for file_name in fasta_files %}
|
|
98
|
-
{% if file_name!= "pass"%}
|
|
98
|
+
{% if file_name != "pass"%}
|
|
99
99
|
<h3>{{ file_name }}</h3>
|
|
100
100
|
{{ fasta_check_report(validation_results, file_name) }}
|
|
101
101
|
{% endif %}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{% macro fasta_check_report(validation_results, file_name) -%}
|
|
2
|
+
|
|
3
|
+
{% set results_for_fasta = validation_results['fasta_check'][file_name] %}
|
|
4
|
+
|
|
5
|
+
{% if results_for_fasta.get('connection_error') %}
|
|
6
|
+
Warning: The following results may be incomplete due to problems with external services.
|
|
7
|
+
Please try again later for complete results.
|
|
8
|
+
Error message: {{ results_for_fasta.get('connection_error') }}
|
|
9
|
+
{% endif %}
|
|
10
|
+
|
|
11
|
+
{% if results_for_fasta.get('all_insdc') %}
|
|
12
|
+
{{ "\u2714" }} All sequences are INSDC accessioned.
|
|
13
|
+
{% else %}
|
|
14
|
+
{{ "\u274C" }} Some sequences are not INSDC accessioned
|
|
15
|
+
First 10 sequences not in INSDC. Full report: {{ results_for_fasta.get('report_path', '') }}
|
|
16
|
+
{% set sequence_info_list = results_for_fasta.get('sequences', [])|rejectattr("insdc")|list %}
|
|
17
|
+
{% for sequence_info in sequence_info_list[:10] %}
|
|
18
|
+
Sequence name: {{ sequence_info.get('sequence_name') }}
|
|
19
|
+
Refget md5: {{ sequence_info.get('sequence_md5') }}
|
|
20
|
+
---
|
|
21
|
+
{% endfor %}
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
{% if 'possible_assemblies' in results_for_fasta %}
|
|
25
|
+
{% if 'metadata_assembly_compatible' in results_for_fasta %}
|
|
26
|
+
{% set analysis_text = results_for_fasta.get('associated_analyses')|join(", ") %}
|
|
27
|
+
{% if results_for_fasta.get('metadata_assembly_compatible') %}
|
|
28
|
+
{% set icon = "\u2714" %}
|
|
29
|
+
{% set text = analysis_text + ": Assembly accession in metadata is compatible" %}
|
|
30
|
+
{% else %}
|
|
31
|
+
{% set icon = "\u274C" %}
|
|
32
|
+
{% set text = analysis_text + ": Assembly accession in metadata is not compatible" %}
|
|
33
|
+
{% endif %}
|
|
34
|
+
{% else %}
|
|
35
|
+
{% set icon = "\u274C" %}
|
|
36
|
+
{% set text = "No assembly accession found in metadata" %}
|
|
37
|
+
{% endif %}
|
|
38
|
+
{{ icon }} {{ text }}
|
|
39
|
+
{% if 'metadata_assembly_compatible' not in results_for_fasta or not results_for_fasta['metadata_assembly_compatible'] %}
|
|
40
|
+
Full report: {{ results_for_fasta.get('report_path', '') }}
|
|
41
|
+
Assembly accession found in metadata: {{ results_for_fasta.get('assembly_in_metadata', 'Not found') }}
|
|
42
|
+
Assembly accession(s) compatible with FASTA: {{ results_for_fasta.get('possible_assemblies')|join(", ") }}
|
|
43
|
+
{% endif %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
|
|
46
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
{% macro file_validation_report(validation_results, file_name) -%}
|
|
3
|
+
{% for check_type, check_per_file in validation_results.items() %}
|
|
4
|
+
{% set result = check_per_file.get(file_name, {}) %}
|
|
5
|
+
{% if check_type == "assembly_check" %}
|
|
6
|
+
{{ assembly_check(result) }}
|
|
7
|
+
{% elif check_type == "vcf_check" %}
|
|
8
|
+
{{ vcf_check(result) }}
|
|
9
|
+
{% endif %}
|
|
10
|
+
{% endfor %}
|
|
11
|
+
{%- endmacro %}
|
|
12
|
+
|
|
13
|
+
{% macro vcf_check(vcf_check_result) %}
|
|
14
|
+
{% set critical_count = vcf_check_result.get("critical_count", 0) %}
|
|
15
|
+
{% set error_count = vcf_check_result.get("error_count", 0) %}
|
|
16
|
+
{% if critical_count > 0 or error_count > 0 %}
|
|
17
|
+
{% set icon = "\u274C" %}
|
|
18
|
+
{% else %}
|
|
19
|
+
{% set icon = "\u2714" %}
|
|
20
|
+
{% endif %}
|
|
21
|
+
{{ icon }} VCF check: {{ critical_count }} critical errors, {{ error_count }} non-critical errors
|
|
22
|
+
|
|
23
|
+
{% set critical_list = vcf_check_result.get("critical_list") %}
|
|
24
|
+
{% set error_list = vcf_check_result.get("error_list") %}
|
|
25
|
+
{% if critical_list or error_list%}
|
|
26
|
+
First 10 errors per category are below. Full report: {{ vcf_check_result.get('report_path', '') }}
|
|
27
|
+
{% for error in critical_list[:10] %}
|
|
28
|
+
Critical error: {{ error }}
|
|
29
|
+
{% endfor %}
|
|
30
|
+
{% for error in error_list[:10] %}
|
|
31
|
+
Non-critical error: {{ error }}
|
|
32
|
+
{% endfor %}
|
|
33
|
+
{% endif %}
|
|
34
|
+
{%- endmacro %}
|
|
35
|
+
|
|
36
|
+
{% macro assembly_check(assembly_check_result) %}
|
|
37
|
+
{% set nb_match = assembly_check_result.get("match", 0) %}
|
|
38
|
+
{% set nb_total = assembly_check_result.get("total", 0) %}
|
|
39
|
+
{% set match_percentage = nb_match / nb_total * 100 if nb_total else 0 %}
|
|
40
|
+
{% if assembly_check_result.get("nb_mismatch", 0) > 0 or nb_total == 0 %}
|
|
41
|
+
{% set icon = "\u274C" %}
|
|
42
|
+
{% else %}
|
|
43
|
+
{% set icon = "\u2714" %}
|
|
44
|
+
{% endif %}
|
|
45
|
+
{{ icon }} Assembly check: {{ nb_match }}/{{ nb_total }} ({{ match_percentage|round(2) }}%)
|
|
46
|
+
|
|
47
|
+
{% set mismatch_list = assembly_check_result.get("mismatch_list") %}
|
|
48
|
+
{% set error_list = assembly_check_result.get("error_list") %}
|
|
49
|
+
{% if mismatch_list or error_list %}
|
|
50
|
+
First 10 errors per category are below. Full report: {{ assembly_check_result.get('report_path', '') }}
|
|
51
|
+
{% for error in error_list[:10] %}
|
|
52
|
+
Parsing error: {{ error }}
|
|
53
|
+
{% endfor %}
|
|
54
|
+
{% for error in mismatch_list[:10] %}
|
|
55
|
+
Mismatch error: {{ error }}
|
|
56
|
+
{% endfor %}
|
|
57
|
+
{% endif %}
|
|
58
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
|
|
2
|
+
{% macro metadata_validation_report(validation_results) -%}
|
|
3
|
+
|
|
4
|
+
{% set results = validation_results.get('metadata_check', {}) %}
|
|
5
|
+
{% set spreadsheet_errors = results.get('spreadsheet_errors', []) %}
|
|
6
|
+
{% set json_errors = results.get('json_errors', []) %}
|
|
7
|
+
{% set has_errors = spreadsheet_errors or json_errors %}
|
|
8
|
+
{% if has_errors %}
|
|
9
|
+
{% set icon = "\u274C" %}
|
|
10
|
+
{% else %}
|
|
11
|
+
{% set icon = "\u2714" %}
|
|
12
|
+
{% endif %}
|
|
13
|
+
{{ icon }} Metadata validation check
|
|
14
|
+
|
|
15
|
+
{% if spreadsheet_errors %}
|
|
16
|
+
Full report: {{ results.get('spreadsheet_report_path', '') }}
|
|
17
|
+
{% for error in spreadsheet_errors %}
|
|
18
|
+
Sheet: {{ error.get('sheet') }} | Row: {{ error.get('row') }} | Column: {{ error.get('column') }}
|
|
19
|
+
Error: {{ error.get('description') }}
|
|
20
|
+
---
|
|
21
|
+
{% endfor %}
|
|
22
|
+
{% endif %}
|
|
23
|
+
|
|
24
|
+
{% if json_errors %}
|
|
25
|
+
Full report: {{ results.get('json_report_path', '') }}
|
|
26
|
+
{% for error in json_errors %}
|
|
27
|
+
JSON Property: {{ error.get('property') }}
|
|
28
|
+
Error: {{ error.get('description') }}
|
|
29
|
+
---
|
|
30
|
+
{% endfor %}
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{% macro project_details_report(project_title, validation_date, submission_dir, vcf_fasta_analysis_mapping) -%}
|
|
2
|
+
|
|
3
|
+
{% if project_title %}
|
|
4
|
+
Project Title: {{ project_title }}
|
|
5
|
+
{% else %}
|
|
6
|
+
Project Title: Not Found
|
|
7
|
+
{% endif %}
|
|
8
|
+
Validation Date: {{ validation_date }}
|
|
9
|
+
Submission Directory: {{ submission_dir }}
|
|
10
|
+
|
|
11
|
+
{% if vcf_fasta_analysis_mapping %}
|
|
12
|
+
Files mapping:
|
|
13
|
+
{% for mapping in vcf_fasta_analysis_mapping %}
|
|
14
|
+
---
|
|
15
|
+
VCF File: {{ mapping.vcf_file }}
|
|
16
|
+
Fasta File: {{ mapping.fasta_file }}
|
|
17
|
+
Analysis: {{ mapping.analysis }}
|
|
18
|
+
{% endfor %}
|
|
19
|
+
{% endif %}
|
|
20
|
+
|
|
21
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{% from 'project_details.txt' import project_details_report %}
|
|
2
|
+
{% from 'file_validation.txt' import file_validation_report %}
|
|
3
|
+
{% from 'sample_name_check.txt' import sample_name_check_report %}
|
|
4
|
+
{% from 'fasta_check.txt' import fasta_check_report %}
|
|
5
|
+
{% from 'metadata_validation.txt' import metadata_validation_report %}
|
|
6
|
+
{% from 'shallow_validation.txt' import optional_shallow_validation_report %}
|
|
7
|
+
|
|
8
|
+
VALIDATION REPORT
|
|
9
|
+
eva-sub-cli v{{cli_version}}
|
|
10
|
+
|
|
11
|
+
{{ optional_shallow_validation_report(validation_results) }}
|
|
12
|
+
|
|
13
|
+
-
|
|
14
|
+
|
|
15
|
+
PROJECT SUMMARY
|
|
16
|
+
General details about the project
|
|
17
|
+
|
|
18
|
+
{{ project_details_report(project_title, validation_date, submission_dir, vcf_fasta_analysis_mapping) }}
|
|
19
|
+
|
|
20
|
+
-
|
|
21
|
+
|
|
22
|
+
METADATA VALIDATION RESULTS
|
|
23
|
+
Ensures that required fields are present and values are formatted correctly.
|
|
24
|
+
For requirements, please refer to the EVA website (https://www.ebi.ac.uk/eva/?Submit-Data).
|
|
25
|
+
|
|
26
|
+
{{ metadata_validation_report(validation_results) }}
|
|
27
|
+
|
|
28
|
+
-
|
|
29
|
+
|
|
30
|
+
VCF VALIDATION RESULTS
|
|
31
|
+
Checks whether each file is compliant with the VCF specification (http://samtools.github.io/hts-specs/VCFv4.4.pdf).
|
|
32
|
+
Also checks whether the variants' reference alleles match against the reference assembly.
|
|
33
|
+
|
|
34
|
+
{% for file_name in vcf_files %}
|
|
35
|
+
{% if file_name != "pass"%}
|
|
36
|
+
{{ file_name }}
|
|
37
|
+
{{ file_validation_report(validation_results, file_name) }}
|
|
38
|
+
{% endif %}
|
|
39
|
+
{% endfor %}
|
|
40
|
+
|
|
41
|
+
-
|
|
42
|
+
|
|
43
|
+
SAMPLE NAME CONCORDANCE CHECK
|
|
44
|
+
Checks whether information in the metadata is concordant with that contained in the VCF files, in particular sample names.
|
|
45
|
+
|
|
46
|
+
{{ sample_name_check_report(validation_results)}}
|
|
47
|
+
|
|
48
|
+
-
|
|
49
|
+
|
|
50
|
+
REFERENCE GENOME INSDC CHECK
|
|
51
|
+
Checks that the reference sequences in the FASTA file used to call the variants are accessioned in INSDC.
|
|
52
|
+
Also checks if the reference assembly accession in the metadata matches the one determined from the FASTA file.
|
|
53
|
+
|
|
54
|
+
{% for file_name in fasta_files %}
|
|
55
|
+
{% if file_name != "pass"%}
|
|
56
|
+
{{ file_name }}
|
|
57
|
+
{{ fasta_check_report(validation_results, file_name) }}
|
|
58
|
+
{% endif %}
|
|
59
|
+
{% endfor %}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
{% macro sample_name_check_report(validation_results) -%}
|
|
3
|
+
{% set results = validation_results.get('sample_check', {}) %}
|
|
4
|
+
{% macro format_error(error) %}
|
|
5
|
+
{{ error | replace(' ', '•') }}
|
|
6
|
+
{% endmacro %}
|
|
7
|
+
|
|
8
|
+
{% for analysis, results_for_analysis in results.get('results_per_analysis', {}).items() %}
|
|
9
|
+
{% if results_for_analysis.get('difference') %}
|
|
10
|
+
{% set icon = "\u274C" %}
|
|
11
|
+
{% set text = "Sample names in metadata do not match with those in VCF files" %}
|
|
12
|
+
{% else %}
|
|
13
|
+
{% set icon = "\u2714" %}
|
|
14
|
+
{% set text = "Sample names in metadata match with those in VCF files" %}
|
|
15
|
+
{% endif %}
|
|
16
|
+
{{ icon }} {{ analysis }}: {{ text }}
|
|
17
|
+
|
|
18
|
+
{% if results_for_analysis.get('difference') %}
|
|
19
|
+
First 10 errors per category are below. Full report: {{ results.get('report_path', '') }}
|
|
20
|
+
Samples described in the metadata but not in the VCF files: {{ results_for_analysis.get('more_metadata_submitted_files')[:10]|join(", ") }}
|
|
21
|
+
Samples in the VCF files but not described in the metadata: {{ results_for_analysis.get('more_submitted_files_metadata')[:10]|join(", ") }}
|
|
22
|
+
{% endif %}
|
|
23
|
+
{% endfor %}
|
|
24
|
+
{%- endmacro %}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{% macro optional_shallow_validation_report(validation_results) -%}
|
|
2
|
+
|
|
3
|
+
{% set results = validation_results.get('shallow_validation', {}) %}
|
|
4
|
+
{% if results.get('required') %}
|
|
5
|
+
|
|
6
|
+
{{ "\u274C" }} You requested to run the shallow validation, please run full validation before submitting the data
|
|
7
|
+
{% for vcf_file in results.get('metrics') %}
|
|
8
|
+
---
|
|
9
|
+
VCF File: {{ vcf_file }}
|
|
10
|
+
Variant lines validated in VCF: {{ results.get('metrics').get(vcf_file).get('trim_down_vcf_record') }}
|
|
11
|
+
Entries used in Fasta: {{ results.get('metrics').get(vcf_file).get('number_sequence_found') }}
|
|
12
|
+
{% endfor %}
|
|
13
|
+
|
|
14
|
+
{% endif %}
|
|
15
|
+
|
|
16
|
+
{%- endmacro %}
|
|
@@ -15,16 +15,16 @@ def get_logo_data():
|
|
|
15
15
|
return logo_data
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
def
|
|
19
|
-
|
|
18
|
+
def generate_report(validation_results, validation_date, submission_dir, vcf_fasta_analysis_mapping, project_title,
|
|
19
|
+
subdir, template_file):
|
|
20
20
|
vcf_files = sorted(set([file_name
|
|
21
21
|
for check in validation_results if check in ["vcf_check", "assembly_check"]
|
|
22
22
|
for file_name in validation_results[check]
|
|
23
23
|
]))
|
|
24
24
|
fasta_files = sorted([file_name for file_name in validation_results['fasta_check']])
|
|
25
25
|
template = Environment(
|
|
26
|
-
loader=FileSystemLoader(os.path.join(current_dir, 'jinja_templates'))
|
|
27
|
-
).get_template(
|
|
26
|
+
loader=FileSystemLoader(os.path.join(current_dir, 'jinja_templates', subdir))
|
|
27
|
+
).get_template(template_file)
|
|
28
28
|
rendered_template = template.render(
|
|
29
29
|
cli_version=eva_sub_cli.__version__,
|
|
30
30
|
logo_data=get_logo_data(),
|
|
@@ -38,3 +38,12 @@ def generate_html_report(validation_results, validation_date, submission_dir, vc
|
|
|
38
38
|
)
|
|
39
39
|
return re.sub('\s+\n', '\n', rendered_template)
|
|
40
40
|
|
|
41
|
+
|
|
42
|
+
def generate_html_report(validation_results, validation_date, submission_dir, vcf_fasta_analysis_mapping, project_title):
|
|
43
|
+
return generate_report(validation_results, validation_date, submission_dir, vcf_fasta_analysis_mapping, project_title,
|
|
44
|
+
subdir='html', template_file='report.html')
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def generate_text_report(validation_results, validation_date, submission_dir, vcf_fasta_analysis_mapping, project_title):
|
|
48
|
+
return generate_report(validation_results, validation_date, submission_dir, vcf_fasta_analysis_mapping, project_title,
|
|
49
|
+
subdir='text', template_file='report.txt')
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
import csv
|
|
3
3
|
import datetime
|
|
4
|
-
import json
|
|
5
4
|
import logging
|
|
6
5
|
import os
|
|
7
6
|
from functools import lru_cache, cached_property
|
|
@@ -13,7 +12,7 @@ from ebi_eva_common_pyutils.config import WritableConfig
|
|
|
13
12
|
from eva_sub_cli import ETC_DIR, SUB_CLI_CONFIG_FILE, __version__
|
|
14
13
|
from eva_sub_cli.file_utils import backup_file_or_directory, resolve_single_file_path
|
|
15
14
|
from eva_sub_cli.metadata import EvaMetadataJson
|
|
16
|
-
from eva_sub_cli.report import generate_html_report
|
|
15
|
+
from eva_sub_cli.report import generate_html_report, generate_text_report
|
|
17
16
|
from ebi_eva_common_pyutils.logger import logging_config, AppLogger
|
|
18
17
|
|
|
19
18
|
from eva_sub_cli.validators.validation_results_parsers import parse_assembly_check_log, parse_assembly_check_report, \
|
|
@@ -501,9 +500,18 @@ class Validator(AppLogger):
|
|
|
501
500
|
report_html = generate_html_report(self.results, self.validation_date, self.submission_dir,
|
|
502
501
|
self.get_vcf_fasta_analysis_mapping(),
|
|
503
502
|
self.project_title)
|
|
504
|
-
|
|
505
|
-
with open(
|
|
503
|
+
html_path = os.path.join(self.output_dir, 'report.html')
|
|
504
|
+
with open(html_path, "w") as f:
|
|
506
505
|
f.write(report_html)
|
|
506
|
+
|
|
507
|
+
report_text = generate_text_report(self.results, self.validation_date, self.submission_dir,
|
|
508
|
+
self.get_vcf_fasta_analysis_mapping(),
|
|
509
|
+
self.project_title)
|
|
510
|
+
text_path = os.path.join(self.output_dir, 'report.txt')
|
|
511
|
+
with open(text_path, "w") as f:
|
|
512
|
+
f.write(report_text)
|
|
513
|
+
|
|
507
514
|
self.info(f'Validation result: {"SUCCESS" if self.verify_ready_for_submission_to_eva() else "FAILURE"}')
|
|
508
|
-
self.info(f'View the full report in your browser: {
|
|
509
|
-
|
|
515
|
+
self.info(f'View the full report in your browser: {html_path}')
|
|
516
|
+
self.info(f'Or view a text version: {text_path}')
|
|
517
|
+
return html_path, text_path
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eva_sub_cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.9
|
|
4
4
|
Summary: EBI EVA - validation and submission command line tool
|
|
5
5
|
Classifier: Development Status :: 5 - Production/Stable
|
|
6
6
|
Classifier: Environment :: Console
|
|
@@ -19,7 +19,7 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
19
19
|
Requires-Python: >=3.6
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: ebi_eva_common_pyutils==0.*,>=0.7.
|
|
22
|
+
Requires-Dist: ebi_eva_common_pyutils==0.*,>=0.7.3
|
|
23
23
|
Requires-Dist: jinja2==3.*,>=3.0.0
|
|
24
24
|
Requires-Dist: jsonschema==4.*
|
|
25
25
|
Requires-Dist: openpyxl==3.*
|
|
@@ -49,13 +49,20 @@ eva_sub_cli/executables/cli.py
|
|
|
49
49
|
eva_sub_cli/executables/samples_checker.py
|
|
50
50
|
eva_sub_cli/executables/trim_down.py
|
|
51
51
|
eva_sub_cli/executables/xlsx2json.py
|
|
52
|
-
eva_sub_cli/jinja_templates/fasta_check.html
|
|
53
|
-
eva_sub_cli/jinja_templates/file_validation.html
|
|
54
|
-
eva_sub_cli/jinja_templates/
|
|
55
|
-
eva_sub_cli/jinja_templates/
|
|
56
|
-
eva_sub_cli/jinja_templates/
|
|
57
|
-
eva_sub_cli/jinja_templates/sample_name_check.html
|
|
58
|
-
eva_sub_cli/jinja_templates/shallow_validation.html
|
|
52
|
+
eva_sub_cli/jinja_templates/html/fasta_check.html
|
|
53
|
+
eva_sub_cli/jinja_templates/html/file_validation.html
|
|
54
|
+
eva_sub_cli/jinja_templates/html/metadata_validation.html
|
|
55
|
+
eva_sub_cli/jinja_templates/html/project_details.html
|
|
56
|
+
eva_sub_cli/jinja_templates/html/report.html
|
|
57
|
+
eva_sub_cli/jinja_templates/html/sample_name_check.html
|
|
58
|
+
eva_sub_cli/jinja_templates/html/shallow_validation.html
|
|
59
|
+
eva_sub_cli/jinja_templates/text/fasta_check.txt
|
|
60
|
+
eva_sub_cli/jinja_templates/text/file_validation.txt
|
|
61
|
+
eva_sub_cli/jinja_templates/text/metadata_validation.txt
|
|
62
|
+
eva_sub_cli/jinja_templates/text/project_details.txt
|
|
63
|
+
eva_sub_cli/jinja_templates/text/report.txt
|
|
64
|
+
eva_sub_cli/jinja_templates/text/sample_name_check.txt
|
|
65
|
+
eva_sub_cli/jinja_templates/text/shallow_validation.txt
|
|
59
66
|
eva_sub_cli/nextflow/validation.nf
|
|
60
67
|
eva_sub_cli/validators/__init__.py
|
|
61
68
|
eva_sub_cli/validators/docker_validator.py
|
|
@@ -98,8 +105,11 @@ tests/resources/sample_checker/example2.vcf
|
|
|
98
105
|
tests/resources/sample_checker/example3.vcf
|
|
99
106
|
tests/resources/sample_checker/metadata.json
|
|
100
107
|
tests/resources/validation_reports/expected_report_metadata_json.html
|
|
108
|
+
tests/resources/validation_reports/expected_report_metadata_json.txt
|
|
101
109
|
tests/resources/validation_reports/expected_report_metadata_xlsx.html
|
|
110
|
+
tests/resources/validation_reports/expected_report_metadata_xlsx.txt
|
|
102
111
|
tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html
|
|
112
|
+
tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.txt
|
|
103
113
|
tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.assembly_check.log
|
|
104
114
|
tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt
|
|
105
115
|
tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.valid_assembly_report.1680102476700.txt
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<section>
|
|
139
139
|
<h2>VCF validation results</h2>
|
|
140
140
|
<div class="description">
|
|
141
|
-
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.
|
|
141
|
+
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.4.pdf" target=”_blank”>VCF specification</a>.
|
|
142
142
|
Also checks whether the variants' reference alleles match against the reference assembly.
|
|
143
143
|
</div>
|
|
144
144
|
<h3>input_fail.vcf</h3>
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
|
|
2
|
+
VALIDATION REPORT
|
|
3
|
+
eva-sub-cli vcligeneratedversion
|
|
4
|
+
-
|
|
5
|
+
PROJECT SUMMARY
|
|
6
|
+
General details about the project
|
|
7
|
+
Project Title: My cool project
|
|
8
|
+
Validation Date: 2023-08-31 12:34:56
|
|
9
|
+
Submission Directory: /test/submission/dir
|
|
10
|
+
Files mapping:
|
|
11
|
+
---
|
|
12
|
+
VCF File: input_fail.vcf
|
|
13
|
+
Fasta File: input_fail.fa
|
|
14
|
+
Analysis: A
|
|
15
|
+
---
|
|
16
|
+
VCF File: input_pass.vcf
|
|
17
|
+
Fasta File: input_pass.fa
|
|
18
|
+
Analysis: B
|
|
19
|
+
---
|
|
20
|
+
VCF File: input_test.vcf
|
|
21
|
+
Fasta File: input_test.fa
|
|
22
|
+
Analysis: could not be linked
|
|
23
|
+
-
|
|
24
|
+
METADATA VALIDATION RESULTS
|
|
25
|
+
Ensures that required fields are present and values are formatted correctly.
|
|
26
|
+
For requirements, please refer to the EVA website (https://www.ebi.ac.uk/eva/?Submit-Data).
|
|
27
|
+
❌ Metadata validation check
|
|
28
|
+
Full report: /path/to/json/metadata/report
|
|
29
|
+
JSON Property: .files
|
|
30
|
+
Error: should have required property 'files'
|
|
31
|
+
---
|
|
32
|
+
JSON Property: /project.title
|
|
33
|
+
Error: should have required property 'title'
|
|
34
|
+
---
|
|
35
|
+
JSON Property: /project.description
|
|
36
|
+
Error: should have required property 'description'
|
|
37
|
+
---
|
|
38
|
+
JSON Property: /project.taxId
|
|
39
|
+
Error: should have required property 'taxId'
|
|
40
|
+
---
|
|
41
|
+
JSON Property: /project.centre
|
|
42
|
+
Error: should have required property 'centre'
|
|
43
|
+
---
|
|
44
|
+
JSON Property: /analysis/0.analysisTitle
|
|
45
|
+
Error: should have required property 'analysisTitle'
|
|
46
|
+
---
|
|
47
|
+
JSON Property: /analysis/0.description
|
|
48
|
+
Error: should have required property 'description'
|
|
49
|
+
---
|
|
50
|
+
JSON Property: /analysis/0.experimentType
|
|
51
|
+
Error: should have required property 'experimentType'
|
|
52
|
+
---
|
|
53
|
+
JSON Property: /analysis/0.referenceGenome
|
|
54
|
+
Error: should have required property 'referenceGenome'
|
|
55
|
+
---
|
|
56
|
+
JSON Property: /sample/0.bioSampleAccession
|
|
57
|
+
Error: should have required property 'bioSampleAccession'
|
|
58
|
+
---
|
|
59
|
+
JSON Property: /sample/0.bioSampleObject
|
|
60
|
+
Error: should have required property 'bioSampleObject'
|
|
61
|
+
---
|
|
62
|
+
JSON Property: /sample/0
|
|
63
|
+
Error: should match exactly one schema in oneOf
|
|
64
|
+
---
|
|
65
|
+
-
|
|
66
|
+
VCF VALIDATION RESULTS
|
|
67
|
+
Checks whether each file is compliant with the VCF specification (http://samtools.github.io/hts-specs/VCFv4.4.pdf).
|
|
68
|
+
Also checks whether the variants' reference alleles match against the reference assembly.
|
|
69
|
+
input_fail.vcf
|
|
70
|
+
❌ Assembly check: 26/36 (72.22%)
|
|
71
|
+
First 10 errors per category are below. Full report: /path/to/assembly_failed/report
|
|
72
|
+
Parsing error: The assembly checking could not be completed: Contig 'chr23' not found in assembly report
|
|
73
|
+
Mismatch error: Chromosome 1, position 35549, reference allele 'G' does not match the reference sequence, expected 'c'
|
|
74
|
+
Mismatch error: Chromosome 1, position 35595, reference allele 'G' does not match the reference sequence, expected 'a'
|
|
75
|
+
Mismatch error: Chromosome 1, position 35618, reference allele 'G' does not match the reference sequence, expected 'c'
|
|
76
|
+
Mismatch error: Chromosome 1, position 35626, reference allele 'A' does not match the reference sequence, expected 'g'
|
|
77
|
+
Mismatch error: Chromosome 1, position 35639, reference allele 'T' does not match the reference sequence, expected 'c'
|
|
78
|
+
Mismatch error: Chromosome 1, position 35643, reference allele 'T' does not match the reference sequence, expected 'g'
|
|
79
|
+
Mismatch error: Chromosome 1, position 35717, reference allele 'T' does not match the reference sequence, expected 'g'
|
|
80
|
+
Mismatch error: Chromosome 1, position 35819, reference allele 'T' does not match the reference sequence, expected 'a'
|
|
81
|
+
Mismatch error: Chromosome 1, position 35822, reference allele 'T' does not match the reference sequence, expected 'c'
|
|
82
|
+
❌ VCF check: 1 critical errors, 1 non-critical errors
|
|
83
|
+
First 10 errors per category are below. Full report: /path/to/vcf_failed/report
|
|
84
|
+
Critical error: Line 4: Error in meta-data section.
|
|
85
|
+
Non-critical error: Sample #11, field AD does not match the meta specification Number=R (expected 2 value(s)). AD=..
|
|
86
|
+
input_passed.vcf
|
|
87
|
+
✔ Assembly check: 247/247 (100.0%)
|
|
88
|
+
✔ VCF check: 0 critical errors, 0 non-critical errors
|
|
89
|
+
-
|
|
90
|
+
SAMPLE NAME CONCORDANCE CHECK
|
|
91
|
+
Checks whether information in the metadata is concordant with that contained in the VCF files, in particular sample names.
|
|
92
|
+
❌ Analysis A: Sample names in metadata do not match with those in VCF files
|
|
93
|
+
First 10 errors per category are below. Full report: /path/to/sample/report
|
|
94
|
+
Samples described in the metadata but not in the VCF files: SampleA1, SampleA2 , SampleA3, SampleA4, SampleA5, SampleA6, SampleA7, SampleA8, SampleA9, SampleA10
|
|
95
|
+
Samples in the VCF files but not described in the metadata: A1Sample , A2Sample, A3Sample, A4Sample, A5Sample, A6Sample, A7Sample, A8Sample, A9Sample, A10Sample
|
|
96
|
+
✔ Analysis B: Sample names in metadata match with those in VCF files
|
|
97
|
+
❌ Analysis C: Sample names in metadata do not match with those in VCF files
|
|
98
|
+
First 10 errors per category are below. Full report: /path/to/sample/report
|
|
99
|
+
Samples described in the metadata but not in the VCF files: SampleC1 , SampleC2, SampleC3, SampleC4
|
|
100
|
+
Samples in the VCF files but not described in the metadata: C1Sample , C2Sample, C3Sample, C4Sample
|
|
101
|
+
-
|
|
102
|
+
REFERENCE GENOME INSDC CHECK
|
|
103
|
+
Checks that the reference sequences in the FASTA file used to call the variants are accessioned in INSDC.
|
|
104
|
+
Also checks if the reference assembly accession in the metadata matches the one determined from the FASTA file.
|
|
105
|
+
metadata_asm_match.fa
|
|
106
|
+
✔ All sequences are INSDC accessioned.
|
|
107
|
+
✔ Analysis A: Assembly accession in metadata is compatible
|
|
108
|
+
metadata_asm_not_found.fa
|
|
109
|
+
✔ All sequences are INSDC accessioned.
|
|
110
|
+
❌ No assembly accession found in metadata
|
|
111
|
+
Full report: /path/to/metadata_asm_not_found.yml
|
|
112
|
+
Assembly accession found in metadata: Not found
|
|
113
|
+
Assembly accession(s) compatible with FASTA: GCA_1
|
|
114
|
+
metadata_asm_not_match.fa
|
|
115
|
+
✔ All sequences are INSDC accessioned.
|
|
116
|
+
❌ Analysis B: Assembly accession in metadata is not compatible
|
|
117
|
+
Full report: /path/to/metadata_asm_not_match.yml
|
|
118
|
+
Assembly accession found in metadata: GCA_2
|
|
119
|
+
Assembly accession(s) compatible with FASTA: GCA_1
|
|
120
|
+
metadata_error.fa
|
|
121
|
+
Warning: The following results may be incomplete due to problems with external services.
|
|
122
|
+
Please try again later for complete results.
|
|
123
|
+
Error message: 500 Server Error: Internal Server Error for url: https://www.ebi.ac.uk/eva/webservices/contig-alias/v1/chromosomes/md5checksum/hjfdoijsfc47hfg0gh9qwjrve
|
|
124
|
+
✔ All sequences are INSDC accessioned.
|
|
125
|
+
✔ Analysis C: Assembly accession in metadata is compatible
|
|
126
|
+
not_all_insdc.fa
|
|
127
|
+
❌ Some sequences are not INSDC accessioned
|
|
128
|
+
First 10 sequences not in INSDC. Full report: /path/to/not_all_insdc_check.yml
|
|
129
|
+
Sequence name: 2
|
|
130
|
+
Refget md5: hjfdoijsfc47hfg0gh9qwjrve
|
|
131
|
+
---
|
|
132
|
+
✔ Analysis A: Assembly accession in metadata is compatible
|
|
@@ -150,7 +150,7 @@
|
|
|
150
150
|
<section>
|
|
151
151
|
<h2>VCF validation results</h2>
|
|
152
152
|
<div class="description">
|
|
153
|
-
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.
|
|
153
|
+
Checks whether each file is compliant with the <a href="http://samtools.github.io/hts-specs/VCFv4.4.pdf" target=”_blank”>VCF specification</a>.
|
|
154
154
|
Also checks whether the variants' reference alleles match against the reference assembly.
|
|
155
155
|
</div>
|
|
156
156
|
<h3>input_fail.vcf</h3>
|