diff --git a/python/CHANGELOG.rst b/python/CHANGELOG.rst index 3b453021c7..ecddf5b99d 100644 --- a/python/CHANGELOG.rst +++ b/python/CHANGELOG.rst @@ -24,6 +24,9 @@ in the presence of non-ancestral material (very rare). (:user:`petrelharp`, :issue:`2983`, :pr:`1623`) +- Printing ``tskit.MetadataSchema(schema=None)`` now shows ``"Null_schema"`` rather + than ``None``, to avoid confusion (:user:`hyanwong`, :pr:`2720`) + **Features** - Add ``TreeSequence.extend_haplotypes`` method that extends ancestral haplotypes @@ -110,8 +113,7 @@ - Add ``__repr__`` for variants to return a string representation of the raw data without spewing megabytes of text (:user:`chriscrsmith`, :pr:`2695`, :issue:`2694`) -- Add ``keep_rows`` method to table classes to support efficient in-place - table subsetting (:user:`jeromekelleher`, :pr:`2700`) +**Breaking Changes** **Bugfixes** diff --git a/python/tests/test_metadata.py b/python/tests/test_metadata.py index b6c2ed664b..7387f73fad 100644 --- a/python/tests/test_metadata.py +++ b/python/tests/test_metadata.py @@ -322,7 +322,10 @@ def test_schema_str(self): "required": ["one", "two"], "additionalProperties": False, } - assert str(metadata.MetadataSchema(schema)) == pprint.pformat(schema) + assert ( + str(metadata.MetadataSchema(schema)) + == f"tskit.MetadataSchema(\n{pprint.pformat(schema)}\n)" + ) def test_register_codec(self): class TestCodec(metadata.AbstractMetadataCodec): diff --git a/python/tests/test_tables.py b/python/tests/test_tables.py index 7551f3250c..19fd0f104d 100644 --- a/python/tests/test_tables.py +++ b/python/tests/test_tables.py @@ -1396,7 +1396,7 @@ def test_metadata_schema(self, table_5row): table2.metadata_schema = tskit.MetadataSchema({"codec": "json"}) with pytest.raises( AssertionError, - match=f"{type(table_5row).__name__} metadata schemas differ:", + match=f"{type(table_5row).__name__} metadata schemas differ: ", ): table_5row.assert_equals(table2) table_5row.assert_equals(table2, ignore_metadata=True) @@ -4089,7 +4089,7 @@ def test_metadata_schema(self, t1, t2): t2.metadata_schema = tskit.MetadataSchema(None) with pytest.raises( AssertionError, - match=re.escape("Metadata schemas differ"), + match=re.escape("Metadata schemas differ:"), ): t1.assert_equals(t2) t1.assert_equals(t2, ignore_metadata=True) @@ -4193,7 +4193,7 @@ def test_ignore_reference_sequence(self, t1, t2): t2.reference_sequence.clear() with pytest.raises( AssertionError, - match=re.escape("Metadata schemas differ"), + match=re.escape("Metadata schemas differ: "), ): t1.assert_equals(t2) t1.assert_equals(t2, ignore_reference_sequence=True) diff --git a/python/tskit/metadata.py b/python/tskit/metadata.py index f9e8c0c6c7..81e23d0ecd 100644 --- a/python/tskit/metadata.py +++ b/python/tskit/metadata.py @@ -664,7 +664,14 @@ def __repr__(self) -> str: return self._string def __str__(self) -> str: - return pprint.pformat(self._schema) + if isinstance(self._schema, collections.OrderedDict): + s = pprint.pformat(dict(self._schema)) + else: + s = pprint.pformat(self._schema) + if "\n" in s: + return f"tskit.MetadataSchema(\n{s}\n)" + else: + return f"tskit.MetadataSchema({s})" def __eq__(self, other) -> bool: return self._string == other._string