eva-sub-cli 0.6.4__tar.gz → 0.6.5__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 (164) hide show
  1. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/PKG-INFO +1 -1
  2. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/_version.py +3 -3
  3. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/call_home.py +14 -2
  4. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/nextflow/validation.nf +0 -2
  5. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/validators/native_validator.py +0 -2
  6. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/validators/validator.py +5 -0
  7. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/PKG-INFO +1 -1
  8. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/scm_file_list.json +108 -108
  9. eva_sub_cli-0.6.5/eva_sub_cli.egg-info/scm_version.json +8 -0
  10. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_call_home.py +6 -0
  11. eva_sub_cli-0.6.4/eva_sub_cli.egg-info/scm_version.json +0 -8
  12. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.github/workflows/integration-tests.yml +0 -0
  13. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.github/workflows/publish.yml +0 -0
  14. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.github/workflows/publish_docs.yml +0 -0
  15. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.github/workflows/tests.yml +0 -0
  16. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.github/workflows/trigger-eva-sub-cli-integration-tests.yml +0 -0
  17. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/.gitignore +0 -0
  18. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/LICENSE +0 -0
  19. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/README.md +0 -0
  20. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/conda/build.sh +0 -0
  21. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/conda/meta.yaml +0 -0
  22. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docker/Dockerfile +0 -0
  23. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/README.md +0 -0
  24. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/_config.yml +0 -0
  25. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/common_vcf_errors.md +0 -0
  26. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/how_to_submit.md +0 -0
  27. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/input_file_overview.md +0 -0
  28. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/installation.md +0 -0
  29. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/using_nextflow.md +0 -0
  30. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/docs/validation_overview.md +0 -0
  31. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/__init__.py +0 -0
  32. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/auth.py +0 -0
  33. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/date_utils.py +0 -0
  34. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/EVA_Submission_Example.xlsx +0 -0
  35. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/EVA_Submission_template.xlsx +0 -0
  36. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/call_home_payload_schema.json +0 -0
  37. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/eva-biosamples.json +0 -0
  38. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/eva_logo.png +0 -0
  39. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/eva_schema.json +0 -0
  40. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/spreadsheet2json_conf.yaml +0 -0
  41. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/etc/spreadsheet2json_conf_V2.yaml +0 -0
  42. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/exceptions.py +0 -0
  43. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/__init__.py +0 -0
  44. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/check_fasta_insdc.py +0 -0
  45. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/check_metadata_semantics.py +0 -0
  46. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/cli.py +0 -0
  47. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/evidence_type_checker.py +0 -0
  48. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/format_metadata.py +0 -0
  49. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/samples_checker.py +0 -0
  50. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/trim_down.py +0 -0
  51. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/executables/xlsx2json.py +0 -0
  52. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/file_utils.py +0 -0
  53. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/fasta_check.html +0 -0
  54. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/file_validation.html +0 -0
  55. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/metadata_validation.html +0 -0
  56. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/project_details.html +0 -0
  57. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/report.html +0 -0
  58. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/sample_name_check.html +0 -0
  59. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/html/shallow_validation.html +0 -0
  60. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/fasta_check.txt +0 -0
  61. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/file_validation.txt +0 -0
  62. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/metadata_validation.txt +0 -0
  63. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/project_details.txt +0 -0
  64. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/report.txt +0 -0
  65. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/sample_name_check.txt +0 -0
  66. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/jinja_templates/text/shallow_validation.txt +0 -0
  67. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/metadata.py +0 -0
  68. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/orchestrator.py +0 -0
  69. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/report.py +0 -0
  70. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/semantic_metadata.py +0 -0
  71. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/submission_ws.py +0 -0
  72. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/submit.py +0 -0
  73. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/utils.py +0 -0
  74. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/validators/__init__.py +0 -0
  75. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/validators/docker_validator.py +0 -0
  76. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli/validators/validation_results_parsers.py +0 -0
  77. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/SOURCES.txt +0 -0
  78. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/dependency_links.txt +0 -0
  79. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/entry_points.txt +0 -0
  80. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/requires.txt +0 -0
  81. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/eva_sub_cli.egg-info/top_level.txt +0 -0
  82. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/pyproject.toml +0 -0
  83. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/pytest.ini +0 -0
  84. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/requirements.txt +0 -0
  85. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/setup.cfg +0 -0
  86. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/setup.py +0 -0
  87. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/build_and_test_docker_locally.py +0 -0
  88. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/ignore_test_nextflow_validation.yml +0 -0
  89. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_Docker_Test.xlsx +0 -0
  90. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test.json +0 -0
  91. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test.xlsx +0 -0
  92. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_V2.xlsx +0 -0
  93. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_fails.xlsx +0 -0
  94. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_version_missing.xlsx +0 -0
  95. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_asm_report.json +0 -0
  96. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_links.xlsx +0 -0
  97. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_non_vcf_files.json +0 -0
  98. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_non_vcf_files.xlsx +0 -0
  99. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_project_accession.json +0 -0
  100. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/EVA_Submission_test_with_project_accession.xlsx +0 -0
  101. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/assembly_check/invalid.vcf.assembly_check.log +0 -0
  102. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/assembly_check/invalid.vcf.text_assembly_report.txt +0 -0
  103. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/assembly_reports/input_passed.txt +0 -0
  104. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/fasta_files/Saccharomyces_cerevisiae_I.fa +0 -0
  105. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/fasta_files/input_passed.fa +0 -0
  106. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/fasta_files/multi_seq.fa +0 -0
  107. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/metadata_with_filename.json +0 -0
  108. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_checker/evidence_type.yaml +0 -0
  109. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_checker/example1.vcf.gz +0 -0
  110. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_checker/example2.vcf +0 -0
  111. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_checker/example3.vcf +0 -0
  112. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_checker/metadata.json +0 -0
  113. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/allele_freq.vcf +0 -0
  114. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/fake_fasta.fa +0 -0
  115. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/genotype.vcf +0 -0
  116. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/metadata_af_no_sample_in_vcf.json +0 -0
  117. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/metadata_af_with_sample_in_vcf.json +0 -0
  118. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/metadata_genotype_no_sample_in_vcf.json +0 -0
  119. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/sample_in_vcf_check/metadata_genotype_with_sample_in_vcf.json +0 -0
  120. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_metadata_json_report.html +0 -0
  121. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_metadata_json_report.txt +0 -0
  122. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_metadata_xlsx_report.html +0 -0
  123. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_metadata_xlsx_report.txt +0 -0
  124. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_report_metadata_json_process_not_run.html +0 -0
  125. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_report_metadata_json_process_not_run.txt +0 -0
  126. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html +0 -0
  127. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.txt +0 -0
  128. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.assembly_check.log +0 -0
  129. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt +0 -0
  130. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.valid_assembly_report.1680102476700.txt +0 -0
  131. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/metadata.json +0 -0
  132. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/evidence_type_checker.yml +0 -0
  133. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/file_info.txt +0 -0
  134. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/input_passed.fa_check.yml +0 -0
  135. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/input_passed_trim_down.yml +0 -0
  136. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/metadata_conversion_errors.yml +0 -0
  137. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/metadata_semantic_check.yml +0 -0
  138. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/metadata_validation.txt +0 -0
  139. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/other_validations/sample_checker.yml +0 -0
  140. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.db +0 -0
  141. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.txt +0 -0
  142. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.vcf_format.log +0 -0
  143. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/vcf_files/example2.vcf.gz +0 -0
  144. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/vcf_files/example2.vcf.gz.tbi +0 -0
  145. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/resources/vcf_files/input_passed.vcf +0 -0
  146. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_auth.py +0 -0
  147. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_check_fasta_insdc.py +0 -0
  148. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_cli.py +0 -0
  149. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_docker_validator.py +0 -0
  150. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_evidence_type_checker.py +0 -0
  151. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_file_utils.py +0 -0
  152. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_format_metadata.py +0 -0
  153. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_metadata.py +0 -0
  154. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_native_validator_sample_in_vcf.py +0 -0
  155. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_orchestrator.py +0 -0
  156. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_report.py +0 -0
  157. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_samples_checker.py +0 -0
  158. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_semantic_metadata.py +0 -0
  159. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_submit.py +0 -0
  160. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_trim_down.py +0 -0
  161. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_utils.py +0 -0
  162. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_validaton_results_parsers.py +0 -0
  163. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/tests/test_validator.py +0 -0
  164. {eva_sub_cli-0.6.4 → eva_sub_cli-0.6.5}/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.6.4
3
+ Version: 0.6.5
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.5'
22
+ __version_tuple__ = version_tuple = (0, 6, 5)
23
23
 
24
- __commit_id__ = commit_id = 'g1a3c8a4d1'
24
+ __commit_id__ = commit_id = 'ge5181ff56'
@@ -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
 
@@ -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
 
@@ -134,6 +134,11 @@ class Validator(AppLogger):
134
134
  def set_up_output_dir(self):
135
135
  if not os.path.exists(self.output_dir):
136
136
  os.makedirs(self.output_dir, exist_ok=True)
137
+ # Clean up VCF check and assembly check output from previous runs
138
+ if VCF_CHECK in self.tasks:
139
+ shutil.rmtree(os.path.join(self.output_dir, 'vcf_format'), ignore_errors=True)
140
+ if ASSEMBLY_CHECK in self.tasks:
141
+ shutil.rmtree(os.path.join(self.output_dir, 'assembly_check'), ignore_errors=True)
137
142
 
138
143
  def clean_up_output_dir(self):
139
144
  # Move intermediate validation outputs into a subdir except metadata.json
@@ -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.5
4
4
  Summary: EBI EVA - validation and submission command line tool
5
5
  Classifier: Development Status :: 5 - Production/Stable
6
6
  Classifier: Environment :: Console
@@ -1,157 +1,157 @@
1
1
  {
2
2
  "files": [
3
- "README.md",
4
- "setup.cfg",
5
- "LICENSE",
3
+ "requirements.txt",
6
4
  "setup.py",
7
5
  "pyproject.toml",
8
- "requirements.txt",
9
- ".gitignore",
6
+ "setup.cfg",
7
+ "LICENSE",
8
+ "README.md",
10
9
  "pytest.ini",
11
- "conda/meta.yaml",
12
- "conda/build.sh",
13
- "docs/README.md",
14
- "docs/validation_overview.md",
15
- "docs/installation.md",
16
- "docs/input_file_overview.md",
17
- "docs/how_to_submit.md",
18
- "docs/_config.yml",
19
- "docs/common_vcf_errors.md",
20
- "docs/using_nextflow.md",
21
- "docker/Dockerfile",
22
- "tests/test_format_metadata.py",
10
+ ".gitignore",
11
+ ".github/workflows/publish_docs.yml",
12
+ ".github/workflows/tests.yml",
13
+ ".github/workflows/integration-tests.yml",
14
+ ".github/workflows/trigger-eva-sub-cli-integration-tests.yml",
15
+ ".github/workflows/publish.yml",
16
+ "tests/test_docker_validator.py",
17
+ "tests/test_auth.py",
23
18
  "tests/test_file_utils.py",
24
- "tests/test_check_fasta_insdc.py",
25
- "tests/test_submit.py",
26
19
  "tests/test_validator.py",
27
- "tests/test_evidence_type_checker.py",
28
- "tests/test_xlsx2json.py",
29
- "tests/test_utils.py",
30
- "tests/test_call_home.py",
31
- "tests/test_auth.py",
32
- "tests/ignore_test_nextflow_validation.yml",
33
- "tests/test_semantic_metadata.py",
34
- "tests/test_samples_checker.py",
35
- "tests/test_validaton_results_parsers.py",
36
- "tests/test_report.py",
37
- "tests/test_docker_validator.py",
38
20
  "tests/build_and_test_docker_locally.py",
21
+ "tests/ignore_test_nextflow_validation.yml",
22
+ "tests/test_call_home.py",
23
+ "tests/test_submit.py",
24
+ "tests/test_check_fasta_insdc.py",
25
+ "tests/test_trim_down.py",
39
26
  "tests/test_native_validator_sample_in_vcf.py",
27
+ "tests/test_evidence_type_checker.py",
28
+ "tests/test_metadata.py",
29
+ "tests/test_samples_checker.py",
40
30
  "tests/test_orchestrator.py",
31
+ "tests/test_report.py",
32
+ "tests/test_xlsx2json.py",
41
33
  "tests/test_cli.py",
42
- "tests/test_trim_down.py",
43
- "tests/test_metadata.py",
44
- "tests/resources/EVA_Submission_test_with_project_accession.json",
45
- "tests/resources/EVA_Submission_test_with_non_vcf_files.json",
34
+ "tests/test_utils.py",
35
+ "tests/test_format_metadata.py",
36
+ "tests/test_validaton_results_parsers.py",
37
+ "tests/test_semantic_metadata.py",
38
+ "tests/resources/metadata_with_filename.json",
39
+ "tests/resources/EVA_Submission_Docker_Test.xlsx",
46
40
  "tests/resources/EVA_Submission_test.xlsx",
47
- "tests/resources/EVA_Submission_test_fails.xlsx",
48
- "tests/resources/EVA_Submission_test_version_missing.xlsx",
49
41
  "tests/resources/EVA_Submission_test_V2.xlsx",
50
- "tests/resources/EVA_Submission_Docker_Test.xlsx",
51
- "tests/resources/EVA_Submission_test_with_project_accession.xlsx",
52
42
  "tests/resources/EVA_Submission_test_with_links.xlsx",
43
+ "tests/resources/EVA_Submission_test_with_project_accession.json",
44
+ "tests/resources/EVA_Submission_test_fails.xlsx",
45
+ "tests/resources/EVA_Submission_test_with_project_accession.xlsx",
46
+ "tests/resources/EVA_Submission_test_with_non_vcf_files.json",
53
47
  "tests/resources/EVA_Submission_test_with_non_vcf_files.xlsx",
54
- "tests/resources/EVA_Submission_test.json",
55
- "tests/resources/metadata_with_filename.json",
48
+ "tests/resources/EVA_Submission_test_version_missing.xlsx",
56
49
  "tests/resources/EVA_Submission_test_with_asm_report.json",
57
- "tests/resources/sample_checker/metadata.json",
58
- "tests/resources/sample_checker/example1.vcf.gz",
59
- "tests/resources/sample_checker/example3.vcf",
60
- "tests/resources/sample_checker/example2.vcf",
61
- "tests/resources/sample_checker/evidence_type.yaml",
62
- "tests/resources/assembly_reports/input_passed.txt",
63
- "tests/resources/assembly_check/invalid.vcf.text_assembly_report.txt",
64
- "tests/resources/assembly_check/invalid.vcf.assembly_check.log",
65
- "tests/resources/sample_in_vcf_check/allele_freq.vcf",
66
- "tests/resources/sample_in_vcf_check/metadata_af_with_sample_in_vcf.json",
67
- "tests/resources/sample_in_vcf_check/genotype.vcf",
68
- "tests/resources/sample_in_vcf_check/metadata_af_no_sample_in_vcf.json",
69
- "tests/resources/sample_in_vcf_check/metadata_genotype_no_sample_in_vcf.json",
70
- "tests/resources/sample_in_vcf_check/fake_fasta.fa",
71
- "tests/resources/sample_in_vcf_check/metadata_genotype_with_sample_in_vcf.json",
72
- "tests/resources/vcf_files/example2.vcf.gz.tbi",
73
- "tests/resources/vcf_files/example2.vcf.gz",
74
- "tests/resources/vcf_files/input_passed.vcf",
75
- "tests/resources/fasta_files/Saccharomyces_cerevisiae_I.fa",
76
- "tests/resources/fasta_files/multi_seq.fa",
77
- "tests/resources/fasta_files/input_passed.fa",
78
- "tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html",
79
- "tests/resources/validation_reports/expected_report_metadata_json_process_not_run.txt",
50
+ "tests/resources/EVA_Submission_test.json",
80
51
  "tests/resources/validation_reports/expected_metadata_xlsx_report.txt",
52
+ "tests/resources/validation_reports/expected_metadata_json_report.html",
53
+ "tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.html",
54
+ "tests/resources/validation_reports/expected_metadata_xlsx_report.html",
81
55
  "tests/resources/validation_reports/expected_metadata_json_report.txt",
82
56
  "tests/resources/validation_reports/expected_report_metadata_json_process_not_run.html",
83
57
  "tests/resources/validation_reports/expected_shallow_metadata_xlsx_report.txt",
84
- "tests/resources/validation_reports/expected_metadata_json_report.html",
85
- "tests/resources/validation_reports/expected_metadata_xlsx_report.html",
58
+ "tests/resources/validation_reports/expected_report_metadata_json_process_not_run.txt",
86
59
  "tests/resources/validation_reports/validation_output/metadata.json",
60
+ "tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt",
87
61
  "tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.valid_assembly_report.1680102476700.txt",
88
62
  "tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.assembly_check.log",
89
- "tests/resources/validation_reports/validation_output/assembly_check/input_passed.vcf.text_assembly_report.1680102476700.txt",
90
- "tests/resources/validation_reports/validation_output/other_validations/sample_checker.yml",
63
+ "tests/resources/validation_reports/validation_output/other_validations/input_passed_trim_down.yml",
91
64
  "tests/resources/validation_reports/validation_output/other_validations/metadata_semantic_check.yml",
65
+ "tests/resources/validation_reports/validation_output/other_validations/metadata_validation.txt",
66
+ "tests/resources/validation_reports/validation_output/other_validations/sample_checker.yml",
92
67
  "tests/resources/validation_reports/validation_output/other_validations/file_info.txt",
93
68
  "tests/resources/validation_reports/validation_output/other_validations/metadata_conversion_errors.yml",
94
69
  "tests/resources/validation_reports/validation_output/other_validations/input_passed.fa_check.yml",
95
- "tests/resources/validation_reports/validation_output/other_validations/input_passed_trim_down.yml",
96
- "tests/resources/validation_reports/validation_output/other_validations/metadata_validation.txt",
97
70
  "tests/resources/validation_reports/validation_output/other_validations/evidence_type_checker.yml",
98
71
  "tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.vcf_format.log",
99
- "tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.txt",
100
72
  "tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.db",
101
- "eva_sub_cli/__init__.py",
102
- "eva_sub_cli/exceptions.py",
103
- "eva_sub_cli/report.py",
104
- "eva_sub_cli/submission_ws.py",
105
- "eva_sub_cli/utils.py",
73
+ "tests/resources/validation_reports/validation_output/vcf_format/input_passed.vcf.errors.1680102476854.txt",
74
+ "tests/resources/assembly_check/invalid.vcf.assembly_check.log",
75
+ "tests/resources/assembly_check/invalid.vcf.text_assembly_report.txt",
76
+ "tests/resources/vcf_files/example2.vcf.gz.tbi",
77
+ "tests/resources/vcf_files/example2.vcf.gz",
78
+ "tests/resources/vcf_files/input_passed.vcf",
79
+ "tests/resources/sample_in_vcf_check/metadata_genotype_with_sample_in_vcf.json",
80
+ "tests/resources/sample_in_vcf_check/genotype.vcf",
81
+ "tests/resources/sample_in_vcf_check/metadata_af_with_sample_in_vcf.json",
82
+ "tests/resources/sample_in_vcf_check/fake_fasta.fa",
83
+ "tests/resources/sample_in_vcf_check/metadata_af_no_sample_in_vcf.json",
84
+ "tests/resources/sample_in_vcf_check/allele_freq.vcf",
85
+ "tests/resources/sample_in_vcf_check/metadata_genotype_no_sample_in_vcf.json",
86
+ "tests/resources/fasta_files/Saccharomyces_cerevisiae_I.fa",
87
+ "tests/resources/fasta_files/input_passed.fa",
88
+ "tests/resources/fasta_files/multi_seq.fa",
89
+ "tests/resources/sample_checker/evidence_type.yaml",
90
+ "tests/resources/sample_checker/example1.vcf.gz",
91
+ "tests/resources/sample_checker/example3.vcf",
92
+ "tests/resources/sample_checker/metadata.json",
93
+ "tests/resources/sample_checker/example2.vcf",
94
+ "tests/resources/assembly_reports/input_passed.txt",
95
+ "eva_sub_cli/date_utils.py",
106
96
  "eva_sub_cli/submit.py",
107
- "eva_sub_cli/semantic_metadata.py",
108
- "eva_sub_cli/call_home.py",
97
+ "eva_sub_cli/report.py",
98
+ "eva_sub_cli/file_utils.py",
109
99
  "eva_sub_cli/auth.py",
100
+ "eva_sub_cli/__init__.py",
101
+ "eva_sub_cli/submission_ws.py",
102
+ "eva_sub_cli/exceptions.py",
110
103
  "eva_sub_cli/metadata.py",
111
- "eva_sub_cli/date_utils.py",
104
+ "eva_sub_cli/semantic_metadata.py",
112
105
  "eva_sub_cli/orchestrator.py",
113
- "eva_sub_cli/file_utils.py",
106
+ "eva_sub_cli/call_home.py",
107
+ "eva_sub_cli/utils.py",
114
108
  "eva_sub_cli/nextflow/validation.nf",
109
+ "eva_sub_cli/etc/EVA_Submission_template.xlsx",
115
110
  "eva_sub_cli/etc/eva_schema.json",
116
- "eva_sub_cli/etc/eva_logo.png",
111
+ "eva_sub_cli/etc/EVA_Submission_Example.xlsx",
117
112
  "eva_sub_cli/etc/call_home_payload_schema.json",
118
113
  "eva_sub_cli/etc/spreadsheet2json_conf.yaml",
119
114
  "eva_sub_cli/etc/spreadsheet2json_conf_V2.yaml",
120
- "eva_sub_cli/etc/EVA_Submission_Example.xlsx",
121
- "eva_sub_cli/etc/EVA_Submission_template.xlsx",
115
+ "eva_sub_cli/etc/eva_logo.png",
122
116
  "eva_sub_cli/etc/eva-biosamples.json",
123
- "eva_sub_cli/executables/check_metadata_semantics.py",
124
- "eva_sub_cli/executables/__init__.py",
125
- "eva_sub_cli/executables/samples_checker.py",
126
- "eva_sub_cli/executables/format_metadata.py",
127
- "eva_sub_cli/executables/xlsx2json.py",
128
- "eva_sub_cli/executables/evidence_type_checker.py",
129
- "eva_sub_cli/executables/trim_down.py",
130
- "eva_sub_cli/executables/cli.py",
131
- "eva_sub_cli/executables/check_fasta_insdc.py",
132
- "eva_sub_cli/jinja_templates/text/shallow_validation.txt",
133
- "eva_sub_cli/jinja_templates/text/project_details.txt",
117
+ "eva_sub_cli/validators/validation_results_parsers.py",
118
+ "eva_sub_cli/validators/docker_validator.py",
119
+ "eva_sub_cli/validators/__init__.py",
120
+ "eva_sub_cli/validators/validator.py",
121
+ "eva_sub_cli/validators/native_validator.py",
134
122
  "eva_sub_cli/jinja_templates/text/file_validation.txt",
135
- "eva_sub_cli/jinja_templates/text/metadata_validation.txt",
136
- "eva_sub_cli/jinja_templates/text/fasta_check.txt",
137
123
  "eva_sub_cli/jinja_templates/text/report.txt",
124
+ "eva_sub_cli/jinja_templates/text/fasta_check.txt",
125
+ "eva_sub_cli/jinja_templates/text/project_details.txt",
138
126
  "eva_sub_cli/jinja_templates/text/sample_name_check.txt",
139
- "eva_sub_cli/jinja_templates/html/sample_name_check.html",
140
- "eva_sub_cli/jinja_templates/html/shallow_validation.html",
141
- "eva_sub_cli/jinja_templates/html/fasta_check.html",
127
+ "eva_sub_cli/jinja_templates/text/metadata_validation.txt",
128
+ "eva_sub_cli/jinja_templates/text/shallow_validation.txt",
142
129
  "eva_sub_cli/jinja_templates/html/file_validation.html",
143
130
  "eva_sub_cli/jinja_templates/html/project_details.html",
131
+ "eva_sub_cli/jinja_templates/html/sample_name_check.html",
132
+ "eva_sub_cli/jinja_templates/html/fasta_check.html",
144
133
  "eva_sub_cli/jinja_templates/html/metadata_validation.html",
145
134
  "eva_sub_cli/jinja_templates/html/report.html",
146
- "eva_sub_cli/validators/validation_results_parsers.py",
147
- "eva_sub_cli/validators/validator.py",
148
- "eva_sub_cli/validators/__init__.py",
149
- "eva_sub_cli/validators/native_validator.py",
150
- "eva_sub_cli/validators/docker_validator.py",
151
- ".github/workflows/trigger-eva-sub-cli-integration-tests.yml",
152
- ".github/workflows/integration-tests.yml",
153
- ".github/workflows/tests.yml",
154
- ".github/workflows/publish_docs.yml",
155
- ".github/workflows/publish.yml"
135
+ "eva_sub_cli/jinja_templates/html/shallow_validation.html",
136
+ "eva_sub_cli/executables/evidence_type_checker.py",
137
+ "eva_sub_cli/executables/trim_down.py",
138
+ "eva_sub_cli/executables/samples_checker.py",
139
+ "eva_sub_cli/executables/__init__.py",
140
+ "eva_sub_cli/executables/check_metadata_semantics.py",
141
+ "eva_sub_cli/executables/cli.py",
142
+ "eva_sub_cli/executables/format_metadata.py",
143
+ "eva_sub_cli/executables/check_fasta_insdc.py",
144
+ "eva_sub_cli/executables/xlsx2json.py",
145
+ "docker/Dockerfile",
146
+ "docs/how_to_submit.md",
147
+ "docs/using_nextflow.md",
148
+ "docs/validation_overview.md",
149
+ "docs/_config.yml",
150
+ "docs/common_vcf_errors.md",
151
+ "docs/input_file_overview.md",
152
+ "docs/installation.md",
153
+ "docs/README.md",
154
+ "conda/meta.yaml",
155
+ "conda/build.sh"
156
156
  ]
157
157
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.6.5",
3
+ "distance": 0,
4
+ "node": "ge5181ff5686631adf32275df62f9ceb4fb733e23",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-30"
8
+ }
@@ -154,16 +154,19 @@ class TestCallHomeClient(TestCase):
154
154
  client = self._create_client()
155
155
  # Should not raise
156
156
  client.send_start()
157
+ client.wait_for_pending_events()
157
158
 
158
159
  @patch('eva_sub_cli.call_home.requests.post', side_effect=Timeout('timed out'))
159
160
  def test_timeout_swallowed(self, mock_post):
160
161
  client = self._create_client()
161
162
  client.send_end()
163
+ client.wait_for_pending_events()
162
164
 
163
165
  @patch('eva_sub_cli.call_home.requests.post', side_effect=Exception('unexpected error'))
164
166
  def test_generic_exception_swallowed(self, mock_post):
165
167
  client = self._create_client()
166
168
  client.send_failure()
169
+ client.wait_for_pending_events()
167
170
 
168
171
  @patch('eva_sub_cli.call_home.requests.post')
169
172
  def test_send_all_event_types(self, mock_post):
@@ -176,6 +179,7 @@ class TestCallHomeClient(TestCase):
176
179
  client.send_start()
177
180
  client.send_validation_completed(common_validation_results)
178
181
  client.send_end()
182
+ client.wait_for_pending_events()
179
183
  self.assertEqual(mock_post.call_count, 3)
180
184
 
181
185
  for call in mock_post.call_args_list:
@@ -187,6 +191,7 @@ class TestCallHomeClient(TestCase):
187
191
  def test_send_failure_event(self, mock_post):
188
192
  client = self._create_client()
189
193
  client.send_failure()
194
+ client.wait_for_pending_events()
190
195
  payload = mock_post.call_args.kwargs['json']
191
196
  self.assertEqual(payload['eventType'], EVENT_FAILURE)
192
197
  self.assertNotIn('exceptionMessage', payload)
@@ -199,6 +204,7 @@ class TestCallHomeClient(TestCase):
199
204
  raise ValueError('something went wrong')
200
205
  except ValueError as e:
201
206
  client.send_failure(exception=e)
207
+ client.wait_for_pending_events()
202
208
  payload = mock_post.call_args.kwargs['json']
203
209
  self.assertEqual(payload['eventType'], EVENT_FAILURE)
204
210
  self.assertEqual(payload['exceptionMessage'], 'something went wrong')
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.6.4",
3
- "distance": 0,
4
- "node": "g1a3c8a4d15c9861684ab5714f0f8398b98ad4560",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-07-08"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes