Skip to content

Commit

Permalink
Add simple_text_subelement helper function
Browse files Browse the repository at this point in the history
  • Loading branch information
cleder committed Dec 19, 2023
1 parent cb36565 commit 61607a2
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 37 deletions.
58 changes: 21 additions & 37 deletions fastkml/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from fastkml.geometry import Point
from fastkml.geometry import Polygon
from fastkml.geometry import create_kml_geometry
from fastkml.helpers import simple_text_subelement
from fastkml.links import Link
from fastkml.mixins import TimeMixin
from fastkml.styles import Style
Expand Down Expand Up @@ -157,7 +158,7 @@ class _Feature(TimeMixin, _BaseObject):
# A given KML Feature can contain a combination of these types of
# custom data.
#
# (2) is already implemented, see UntypedExtendedData
# (2 and 3) are already implemented, see data.py for more information.
#
# <Metadata> (deprecated in KML 2.2; use <ExtendedData> instead)

Expand Down Expand Up @@ -304,6 +305,7 @@ def etree_element(
element.append(self._style_url.etree_element())
for style in self.styles():
element.append(style.etree_element())

if self.snippet:
snippet = config.etree.SubElement( # type: ignore[attr-defined]
element,
Expand All @@ -312,18 +314,12 @@ def etree_element(
snippet.text = self.snippet.text
if self.snippet.max_lines:
snippet.set("maxLines", str(self.snippet.max_lines))
if self.name:
name = config.etree.SubElement( # type: ignore[attr-defined]
element,
f"{self.ns}name",
)
name.text = self.name
if self.description:
description = config.etree.SubElement( # type: ignore[attr-defined]
element,
f"{self.ns}description",
)
description.text = self.description

simple_text_subelement(self, element, "address", "address")
simple_text_subelement(self, element, "phone_number", "phoneNumber")
simple_text_subelement(self, element, "description", "description")
simple_text_subelement(self, element, "name", "name")

if self.visibility is not None:
visibility = config.etree.SubElement( # type: ignore[attr-defined]
element,
Expand All @@ -336,18 +332,6 @@ def etree_element(
f"{self.ns}open",
)
isopen.text = str(int(self.isopen))
if self._address is not None:
address = config.etree.SubElement( # type: ignore[attr-defined]
element,
f"{self.ns}address",
)
address.text = self._address
if self._phone_number is not None:
phone_number = config.etree.SubElement( # type: ignore[attr-defined]
element,
f"{self.ns}phoneNumber",
)
phone_number.text = self._phone_number
return element

@classmethod
Expand Down Expand Up @@ -454,13 +438,25 @@ def _get_kwargs(
element=lookat,
strict=strict,
)
snippet = element.find(f"{ns}Snippet")
if snippet is not None:
max_lines = snippet.get("maxLines")
if max_lines is not None:
kwargs["snippet"] = Snippet(text=snippet.text, max_lines=int(max_lines))
else:
kwargs["snippet"] = Snippet( # type: ignore[unreachable]
text=snippet.text,
)
name = element.find(f"{ns}name")
if name is not None:
kwargs["name"] = name.text
description = element.find(f"{ns}description")
if description is not None:
kwargs["description"] = description.text
visibility = element.find(f"{ns}visibility")
phone_number = element.find(f"{ns}phoneNumber")
if phone_number is not None:
kwargs["phone_number"] = phone_number.text
if visibility is not None and visibility.text:
kwargs["visibility"] = visibility.text in {"1", "true"}
isopen = element.find(f"{ns}open")
Expand All @@ -469,18 +465,6 @@ def _get_kwargs(
address = element.find(f"{ns}address")
if address is not None:
kwargs["address"] = address.text
phone_number = element.find(f"{ns}phoneNumber")
if phone_number is not None:
kwargs["phone_number"] = phone_number.text
snippet = element.find(f"{ns}Snippet")
if snippet is not None:
max_lines = snippet.get("maxLines")
if max_lines is not None:
kwargs["snippet"] = Snippet(text=snippet.text, max_lines=int(max_lines))
else:
kwargs["snippet"] = Snippet( # type: ignore[unreachable]
text=snippet.text,
)
return kwargs


Expand Down
20 changes: 20 additions & 0 deletions fastkml/helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"""Helper functions for fastkml."""

from fastkml import config
from fastkml.base import _BaseObject
from fastkml.types import Element


def simple_text_subelement(
obj: _BaseObject,
element: Element,
attr_name: str,
node_name: str,
) -> None:
"""Set the value of an attribute from a subelement with a text node."""
if getattr(obj, attr_name, None):
subelement = config.etree.SubElement( # type: ignore[attr-defined]
element,
f"{obj.ns}{node_name}",
)
subelement.text = getattr(obj, attr_name)

0 comments on commit 61607a2

Please sign in to comment.