diff --git a/fastkml/helpers.py b/fastkml/helpers.py index 2f121b66..91fdd273 100644 --- a/fastkml/helpers.py +++ b/fastkml/helpers.py @@ -1100,16 +1100,15 @@ def datetime_subelement_kwarg( return {} node_text = node.text.strip() if node.text else "" if node_text: - try: - return {kwarg: cls.parse(node_text)} # type: ignore[attr-defined] - except ValueError as exc: - handle_error( - error=exc, - strict=strict, - element=element, - node=node, - expected="DateTime", - ) + if kdt := cls.parse(node_text): # type: ignore[attr-defined] + return {kwarg: kdt} + handle_error( + error=ValueError(f"Invalid DateTime value: {node_text}"), + strict=strict, + element=element, + node=node, + expected="DateTime", + ) return {} diff --git a/tests/repr_eq_test.py b/tests/repr_eq_test.py index 3f56a6db..8297258f 100644 --- a/tests/repr_eq_test.py +++ b/tests/repr_eq_test.py @@ -16,8 +16,6 @@ """Test the __repr__ and __eq__ methods.""" -import difflib -from textwrap import wrap from typing import Final from pygeoif.geometry import LinearRing @@ -1903,19 +1901,6 @@ class TestRepr(StdLibrary): ], ) - def diff_compare(self, a: str, b: str) -> None: - """Compare two strings and print the differences.""" - differ = difflib.Differ() - for line, d in enumerate(differ.compare(a.split(), b.split())): - if d[0] in ("+", "-"): - print(line, d) # noqa: T201 - - for i, chunk in enumerate(zip(wrap(a, 100), wrap(b, 100))): - if chunk[0] != chunk[1]: - print(i * 100) # noqa: T201 - print(chunk[0]) # noqa: T201 - print(chunk[1]) # noqa: T201 - def test_repr(self) -> None: """Test the __repr__ method.""" new_doc = eval(repr(self.clean_doc), {}, eval_locals) # noqa: S307 @@ -1929,10 +1914,10 @@ def test_str(self) -> None: def test_eq_str_round_trip(self) -> None: """Test the equality of the original and the round-tripped document.""" - new_doc = fastkml.KML.from_string(self.clean_doc.to_string(precision=15)) + new_doc = fastkml.KML.from_string(self.clean_doc.to_string()) assert str(self.clean_doc) == str(new_doc) - assert repr(new_doc) == repr(self.clean_doc) + assert new_doc == self.clean_doc # srict equality is not a given new_doc == self.clean_doc diff --git a/tests/styles_test.py b/tests/styles_test.py index 67c73be1..14ae387d 100644 --- a/tests/styles_test.py +++ b/tests/styles_test.py @@ -63,6 +63,7 @@ def test_icon_style(self) -> None: serialized = icons.to_string() + assert icons.icon_href == "http://example.com/icon.png" assert ' None: assert "" in serialized assert "" in serialized + def test_icon_style_icon_href(self) -> None: + icons = styles.IconStyle( + icon_href="http://example.com/icon.png", + ) + + assert icons.icon + assert icons.icon.href == "http://example.com/icon.png" + + def test_icon_style_icon_and_href(self) -> None: + icons = styles.IconStyle( + icon=links.Icon(href="http://example1.com/icon.png"), + icon_href="http://example2.com/icon.png", + ) + + assert icons.icon + assert icons.icon.href == "http://example1.com/icon.png" + def test_icon_style_with_hot_spot(self) -> None: icon_style = styles.IconStyle( ns="{http://www.opengis.net/kml/2.2}", @@ -131,6 +149,8 @@ def test_icon_style_read(self) -> None: assert icons.hot_spot assert icons.hot_spot.x == 0.5 assert icons.hot_spot.y == 0.7 + assert icons.hot_spot.xunits + assert icons.hot_spot.yunits assert icons.hot_spot.xunits.value == "fraction" assert icons.hot_spot.yunits.value == "insetPixels" @@ -145,6 +165,10 @@ def test_icon_style_with_hot_spot_enum_relaxed(self) -> None: "", strict=False, ) + + assert icons.hot_spot + assert icons.hot_spot.xunits + assert icons.hot_spot.yunits assert icons.hot_spot.xunits.value == "fraction" assert icons.hot_spot.yunits.value == "insetPixels" @@ -422,6 +446,7 @@ def test_style_read(self) -> None: assert style.styles[0].color_mode == ColorMode.random assert style.styles[0].scale == 1.0 assert style.styles[0].heading == 0 + assert style.styles[0].icon assert style.styles[0].icon.href == "http://example.com/icon.png" assert isinstance(style.styles[1], styles.LabelStyle) diff --git a/tests/times_test.py b/tests/times_test.py index 53306819..402aa2ef 100644 --- a/tests/times_test.py +++ b/tests/times_test.py @@ -337,6 +337,17 @@ def test_read_timestamp_ymd(self) -> None: assert ts.timestamp.resolution == DateTimeResolution.date assert ts.timestamp.dt == datetime.date(1997, 7, 16) + def test_read_timestamp_invalid(self) -> None: + doc = """ + + jan1997 + + """ + + ts = kml.TimeStamp.from_string(doc, ns="", strict=False) + + assert ts.timestamp is None + def test_read_timestamp_utc(self) -> None: # dateTime (YYYY-MM-DDThh:mm:ssZ) # Here, T is the separator between the calendar and the hourly notation