Skip to content

Commit

Permalink
remove unnecessary getters and setters #286 in containers
Browse files Browse the repository at this point in the history
  • Loading branch information
cleder committed Dec 20, 2023
1 parent f5fbacf commit 7c4e36a
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 36 deletions.
16 changes: 4 additions & 12 deletions fastkml/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ class Document(_Container):
extended data.
"""

_schemata: Optional[List[Schema]]
schemata: List[Schema]

def __init__(
self,
Expand Down Expand Up @@ -222,24 +222,16 @@ def __init__(
extended_data=extended_data,
features=features,
)
self._schemata = list(schemata) if schemata else []

def schemata(self) -> Iterator[Schema]:
if self._schemata:
yield from self._schemata

def append_schema(self, schema: Schema) -> None:
assert self._schemata is not None
self._schemata.append(schema)
self.schemata = list(schemata) if schemata else []

def etree_element(
self,
precision: Optional[int] = None,
verbosity: Verbosity = Verbosity.normal,
) -> Element:
element = super().etree_element(precision=precision, verbosity=verbosity)
if self._schemata is not None:
for schema in self._schemata:
if self.schemata is not None:
for schema in self.schemata:
element.append(
schema.etree_element(precision=precision, verbosity=verbosity),
)
Expand Down
137 changes: 116 additions & 21 deletions fastkml/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
from fastkml.helpers import subelement_text_kwarg
from fastkml.helpers import xml_subelement
from fastkml.helpers import xml_subelement_kwarg
from fastkml.helpers import xml_subelement_list
from fastkml.links import Link
from fastkml.mixins import TimeMixin
from fastkml.styles import Style
Expand Down Expand Up @@ -247,23 +248,95 @@ def etree_element(
verbosity: Verbosity = Verbosity.normal,
) -> Element:
element = super().etree_element(precision=precision, verbosity=verbosity)
xml_subelement(self, element, "times")
xml_subelement(self, element, "atom_link")
xml_subelement(self, element, "atom_author")
xml_subelement(self, element, "extended_data")
xml_subelement(self, element, "view")
xml_subelement(self, element, "style_url")
xml_subelement(self, element, "snippet")

for style in self.styles:
element.append(style.etree_element())

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")
bool_subelement(self, element, "visibility", "visibility")
bool_subelement(self, element, "isopen", "open")
xml_subelement(
self,
element=element,
attr_name="times",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="atom_link",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="atom_author",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="extended_data",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="view",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="style_url",
precision=precision,
verbosity=verbosity,
)
xml_subelement(
self,
element=element,
attr_name="snippet",
precision=precision,
verbosity=verbosity,
)

xml_subelement_list(
self,
element=element,
attr_name="styles",
precision=precision,
verbosity=verbosity,
)

simple_text_subelement(
self,
element=element,
attr_name="address",
node_name="address",
)
simple_text_subelement(
self,
element=element,
attr_name="phone_number",
node_name="phoneNumber",
)
simple_text_subelement(
self,
element=element,
attr_name="description",
node_name="description",
)
simple_text_subelement(
self,
element=element,
attr_name="name",
node_name="name",
)
bool_subelement(
self,
element=element,
attr_name="visibility",
node_name="visibility",
)
bool_subelement(self, element=element, attr_name="isopen", node_name="open")
return element

@classmethod
Expand Down Expand Up @@ -530,7 +603,13 @@ def etree_element(
verbosity: Verbosity = Verbosity.normal,
) -> Element:
element = super().etree_element(precision=precision, verbosity=verbosity)
xml_subelement(self, element, "_geometry")
xml_subelement(
self,
element=element,
attr_name="_geometry",
precision=precision,
verbosity=verbosity,
)
return element

@classmethod
Expand Down Expand Up @@ -724,9 +803,25 @@ def etree_element(
verbosity: Verbosity = Verbosity.normal,
) -> Element:
element = super().etree_element(precision=precision, verbosity=verbosity)
bool_subelement(self, element, "refresh_visibility", "refreshVisibility")
bool_subelement(self, element, "fly_to_view", "flyToView")
xml_subelement(self, element, "link")
bool_subelement(
self,
element=element,
attr_name="refresh_visibility",
node_name="refreshVisibility",
)
bool_subelement(
self,
element=element,
attr_name="fly_to_view",
node_name="flyToView",
)
xml_subelement(
self,
element=element,
attr_name="link",
precision=precision,
verbosity=verbosity,
)
return element

@classmethod
Expand Down
33 changes: 31 additions & 2 deletions fastkml/helpers.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
"""Helper functions for fastkml."""

from typing import Dict
from typing import Optional
from typing import Type

from fastkml import config
from fastkml.base import _BaseObject
from fastkml.base import _XMLObject
from fastkml.enums import Verbosity
from fastkml.types import Element


def simple_text_subelement(
obj: _BaseObject,
*,
element: Element,
attr_name: str,
node_name: str,
Expand All @@ -25,6 +29,7 @@ def simple_text_subelement(

def bool_subelement(
obj: _BaseObject,
*,
element: Element,
attr_name: str,
node_name: str,
Expand All @@ -40,14 +45,36 @@ def bool_subelement(

def xml_subelement(
obj: _BaseObject,
*,
element: Element,
attr_name: str,
precision: Optional[int],
verbosity: Verbosity,
) -> None:
if getattr(obj, attr_name, None):
element.append(getattr(obj, attr_name).etree_element())
element.append(
getattr(obj, attr_name).etree_element(
precision=precision,
verbosity=verbosity,
),
)


def xml_subelement_list(
obj: _BaseObject,
*,
element: Element,
attr_name: str,
precision: Optional[int],
verbosity: Verbosity,
) -> None:
if getattr(obj, attr_name, None):
for item in getattr(obj, attr_name):
element.append(item.etree_element(precision=precision, verbosity=verbosity))


def subelement_text_kwarg(
*,
element: Element,
ns: str,
node_name: str,
Expand All @@ -61,6 +88,7 @@ def subelement_text_kwarg(


def subelement_bool_kwarg(
*,
element: Element,
ns: str,
node_name: str,
Expand All @@ -81,11 +109,12 @@ def subelement_bool_kwarg(


def xml_subelement_kwarg(
*,
element: Element,
ns: str,
name_spaces: Dict[str, str],
kwarg: str,
obj_class: type[_XMLObject],
obj_class: Type[_XMLObject],
strict: bool,
) -> Dict[str, _XMLObject]:
subelement = element.find(f"{ns}{obj_class.get_tag_name()}")
Expand Down
2 changes: 1 addition & 1 deletion tests/data_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def test_schema_from_string(self) -> None:
doc1 = f"<kml><Document>{doc}</Document></kml>"
k = kml.KML.class_from_string(doc1, ns="")
d = next(iter(k.features()))
s2 = next(iter(d.schemata()))
s2 = d.schemata[0]
# s.ns = config.KMLNS
assert s.to_string() == s2.to_string()
k1 = kml.KML.class_from_string(k.to_string())
Expand Down

0 comments on commit 7c4e36a

Please sign in to comment.