diff --git a/src/pmotools/pmo_engine/pmo_exporter.py b/src/pmotools/pmo_engine/pmo_exporter.py index a2a952c..c3fa1d5 100644 --- a/src/pmotools/pmo_engine/pmo_exporter.py +++ b/src/pmotools/pmo_engine/pmo_exporter.py @@ -11,7 +11,7 @@ from pmotools.pmo_engine.pmo_checker import PMOChecker from pmotools.pmo_engine.pmo_processor import PMOProcessor -from pmotools import __version__ as __pmotools_version__ +from pmotools import __schema_version__ class BedLoc(NamedTuple): @@ -627,11 +627,9 @@ def extract_alleles_per_sample_table( "seq", ], jsonschema_fnp=os.path.join( - os.path.dirname( - os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - ), + os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "schemas/", - f"portable_microhaplotype_object_v{__pmotools_version__}.schema.json", + f"portable_microhaplotype_object_v{__schema_version__}.schema.json", ), validate_pmo: bool = False, ) -> pd.DataFrame: diff --git a/src/pmotools/pmo_engine/pmo_reader.py b/src/pmotools/pmo_engine/pmo_reader.py index deb7930..a9b56e0 100644 --- a/src/pmotools/pmo_engine/pmo_reader.py +++ b/src/pmotools/pmo_engine/pmo_reader.py @@ -7,6 +7,7 @@ import sys from collections import defaultdict from pmotools import __version__ as __pmotools_version__ +from pmotools import __schema_version__ class PMOReader: @@ -66,7 +67,7 @@ def combine_multiple_pmos(pmos: list[dict]): # currently losing all info about previous header info, # consider coming up with something in standard that might preserve this info if needed pmo_out["pmo_header"] = { - "pmo_version": __pmotools_version__, + "pmo_version": __schema_version__, "creation_date": datetime.datetime.now().strftime("%Y-%m-%d"), "generation_method": { "program_name": "pmotools-python.PMOReader.combine_multiple_pmos", diff --git a/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py b/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py index 93f8144..599446f 100755 --- a/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py +++ b/src/pmotools/scripts/pmo_to_tables/extract_allele_table.py @@ -11,7 +11,7 @@ from pmotools.pmo_engine.pmo_processor import PMOProcessor from pmotools.pmo_engine.pmo_exporter import PMOExporter -from pmotools import __version__ as __pmotools_version__ +from pmotools import __schema_version__ def get_parser() -> argparse.ArgumentParser: @@ -36,7 +36,7 @@ def get_parser() -> argparse.ArgumentParser: os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ), "schemas/", - f"portable_microhaplotype_object_v{__pmotools_version__}.schema.json", + f"portable_microhaplotype_object_v{__schema_version__}.schema.json", ), type=str, required=False, diff --git a/src/pmotools/scripts/pmo_utils/validate_pmo.py b/src/pmotools/scripts/pmo_utils/validate_pmo.py index 744d1aa..b6d208c 100755 --- a/src/pmotools/scripts/pmo_utils/validate_pmo.py +++ b/src/pmotools/scripts/pmo_utils/validate_pmo.py @@ -7,7 +7,7 @@ from pmotools.pmo_engine.pmo_reader import PMOReader from pmotools.pmo_engine.pmo_checker import PMOChecker from pmotools.utils.small_utils import Utils -from pmotools import __version__ as __pmotools_version__ +from pmotools import __schema_version__ def get_parser_validate_pmo() -> argparse.ArgumentParser: @@ -18,7 +18,7 @@ def get_parser_validate_pmo() -> argparse.ArgumentParser: parser.add_argument("--pmo", type=str, required=True, help="a pmo file to validate") parser.add_argument( "--jsonschema_version", - default=__pmotools_version__, + default=__schema_version__, type=str, required=False, help="version of the jsonschema to validate against (default: %(default)s)", diff --git a/tests/test_default_schema_version.py b/tests/test_default_schema_version.py new file mode 100644 index 0000000..586cf80 --- /dev/null +++ b/tests/test_default_schema_version.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +import inspect +import os +import unittest + +from pmotools import __schema_version__ +from pmotools.pmo_engine.pmo_exporter import PMOExporter +from pmotools.scripts.pmo_to_tables import extract_allele_table +from pmotools.scripts.pmo_utils import validate_pmo + + +class TestDefaultSchemaVersion(unittest.TestCase): + """The default schema must follow the schema version, not the package version.""" + + def setUp(self): + self.expected_schema_fname = ( + f"portable_microhaplotype_object_v{__schema_version__}.schema.json" + ) + + def assert_default_schema(self, fnp): + self.assertEqual(os.path.basename(fnp), self.expected_schema_fname) + self.assertTrue(os.path.exists(fnp), f"{fnp} does not exist") + + def test_extract_alleles_per_sample_table_default_schema(self): + default = ( + inspect.signature(PMOExporter.extract_alleles_per_sample_table) + .parameters["jsonschema_fnp"] + .default + ) + self.assert_default_schema(default) + + def test_extract_allele_table_cli_default_schema(self): + self.assert_default_schema( + extract_allele_table.get_parser().get_default("jsonschema") + ) + + def test_validate_pmo_cli_default_schema_version(self): + self.assertEqual( + validate_pmo.get_parser_validate_pmo().get_default("jsonschema_version"), + __schema_version__, + ) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_pmo_engine/test_pmo_reader.py b/tests/test_pmo_engine/test_pmo_reader.py index 0075a48..f87022b 100755 --- a/tests/test_pmo_engine/test_pmo_reader.py +++ b/tests/test_pmo_engine/test_pmo_reader.py @@ -3,6 +3,7 @@ import os import unittest +from pmotools import __schema_version__, __version__ from pmotools.pmo_engine.pmo_reader import PMOReader from pmotools.pmo_engine.pmo_checker import PMOChecker, load_schema @@ -121,6 +122,11 @@ def test_combine_multiple_pmos_v1_1_0(self): ) checker = PMOChecker(pmo_jsonschema_data) checker.validate_pmo_json(combined_pmo) + self.assertEqual(combined_pmo["pmo_header"]["pmo_version"], __schema_version__) + self.assertEqual( + combined_pmo["pmo_header"]["generation_method"]["program_version"], + __version__, + ) # check against expected with open( os.path.join(