Skip to content

Commit

Permalink
Merge pull request #360 from cleder/216-add-output-verbosity
Browse files Browse the repository at this point in the history
216 add output verbosity
  • Loading branch information
cleder authored Oct 5, 2024
2 parents 79227e7 + 69a4c7b commit ac04098
Show file tree
Hide file tree
Showing 17 changed files with 541 additions and 178 deletions.
1 change: 1 addition & 0 deletions fastkml/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ def etree_element(
node_name=item.node_name,
precision=precision,
verbosity=verbosity,
default=item.default,
)
return element

Expand Down
2 changes: 1 addition & 1 deletion fastkml/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def _missing_(cls, value: object) -> "RelaxedEnum":
class Verbosity(Enum):
"""Enum to represent the different verbosity levels."""

quiet = 0
terse = 0
normal = 1
verbose = 2

Expand Down
7 changes: 6 additions & 1 deletion fastkml/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ def __repr__(self) -> str:
classes=(bool,),
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=True,
),
)
registry.register(
Expand All @@ -364,6 +365,7 @@ def __repr__(self) -> str:
classes=(bool,),
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)
registry.register(
Expand Down Expand Up @@ -745,7 +747,8 @@ class NetworkLink(_Feature):
For example, Google Earth would fly to the <LookAt> view of the parent Document,
not the <LookAt> of the Placemarks contained within the Document.
<Link>(required)
https://developers.google.com/kml/documentation/kmlreference#link
https://developers.google.com/kml/documentation/kmlreference#networklink
"""

refresh_visibility: Optional[bool]
Expand Down Expand Up @@ -921,6 +924,7 @@ def __bool__(self) -> bool:
classes=(bool,),
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)
registry.register(
Expand All @@ -932,6 +936,7 @@ def __bool__(self) -> bool:
classes=(bool,),
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)
registry.register(
Expand Down
144 changes: 93 additions & 51 deletions fastkml/geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ def coordinates_subelement(
node_name: str, # noqa: ARG001
precision: Optional[int],
verbosity: Optional[Verbosity], # noqa: ARG001
default: Any, # noqa: ARG001
) -> None:
"""
Set the value of an attribute from a subelement with a text node.
Expand All @@ -150,6 +151,7 @@ def coordinates_subelement(
node_name (str): The name of the subelement to create.
precision (Optional[int]): The precision of the attribute value.
verbosity (Optional[Verbosity]): The verbosity level.
default (Any): The default value of the attribute (unused).
Returns:
-------
Expand Down Expand Up @@ -318,8 +320,6 @@ class _Geometry(_BaseObject):
"""

extrude: Optional[bool]
tessellate: Optional[bool]
altitude_mode: Optional[AltitudeMode]

def __init__(
Expand All @@ -329,8 +329,6 @@ def __init__(
name_spaces: Optional[Dict[str, str]] = None,
id: Optional[str] = None,
target_id: Optional[str] = None,
extrude: Optional[bool] = None,
tessellate: Optional[bool] = None,
altitude_mode: Optional[AltitudeMode] = None,
**kwargs: Any,
) -> None:
Expand All @@ -357,8 +355,6 @@ def __init__(
target_id=target_id,
**kwargs,
)
self.extrude = extrude
self.tessellate = tessellate
self.altitude_mode = altitude_mode

def __repr__(self) -> str:
Expand All @@ -369,36 +365,12 @@ def __repr__(self) -> str:
f"name_spaces={self.name_spaces!r}, "
f"id={self.id!r}, "
f"target_id={self.target_id!r}, "
f"extrude={self.extrude!r}, "
f"tessellate={self.tessellate!r}, "
f"altitude_mode={self.altitude_mode}, "
f"**{self._get_splat()!r},"
")"
)


registry.register(
_Geometry,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="extrude",
node_name="extrude",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
),
)
registry.register(
_Geometry,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="tessellate",
node_name="tessellate",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
),
)
registry.register(
_Geometry,
item=RegistryItem(
Expand All @@ -408,6 +380,7 @@ def __repr__(self) -> str:
node_name="altitudeMode",
get_kwarg=subelement_enum_kwarg,
set_element=enum_subelement,
default=AltitudeMode.clamp_to_ground,
),
)

Expand All @@ -424,6 +397,7 @@ class Point(_Geometry):
https://developers.google.com/kml/documentation/kmlreference#point
"""

extrude: Optional[bool]
kml_coordinates: Optional[Coordinates]

def __init__(
Expand All @@ -434,7 +408,6 @@ def __init__(
id: Optional[str] = None,
target_id: Optional[str] = None,
extrude: Optional[bool] = None,
tessellate: Optional[bool] = None,
altitude_mode: Optional[AltitudeMode] = None,
geometry: Optional[geo.Point] = None,
kml_coordinates: Optional[Coordinates] = None,
Expand Down Expand Up @@ -471,13 +444,13 @@ def __init__(
else None
)
self.kml_coordinates = kml_coordinates
self.extrude = extrude
kwargs.pop("tessellate", None)
super().__init__(
ns=ns,
id=id,
name_spaces=name_spaces,
target_id=target_id,
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
**kwargs,
)
Expand All @@ -498,7 +471,6 @@ def __repr__(self) -> str:
f"id={self.id!r}, "
f"target_id={self.target_id!r}, "
f"extrude={self.extrude!r}, "
f"tessellate={self.tessellate!r}, "
f"altitude_mode={self.altitude_mode}, "
f"kml_coordinates={self.kml_coordinates!r}, "
f"**{self._get_splat()!r},"
Expand Down Expand Up @@ -546,6 +518,18 @@ def geometry(self) -> Optional[geo.Point]:
set_element=xml_subelement,
),
)
registry.register(
Point,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="extrude",
node_name="extrude",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)


class LineString(_Geometry):
Expand All @@ -562,6 +546,10 @@ class LineString(_Geometry):
https://developers.google.com/kml/documentation/kmlreference#linestring
"""

extrude: Optional[bool]
tessellate: Optional[bool]
kml_coordinates: Optional[Coordinates]

def __init__(
self,
*,
Expand Down Expand Up @@ -602,13 +590,13 @@ def __init__(
if kml_coordinates is None:
kml_coordinates = Coordinates(coords=geometry.coords) if geometry else None
self.kml_coordinates = kml_coordinates
self.extrude = extrude
self.tessellate = tessellate
super().__init__(
ns=ns,
name_spaces=name_spaces,
id=id,
target_id=target_id,
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
**kwargs,
)
Expand Down Expand Up @@ -671,6 +659,31 @@ def geometry(self) -> Optional[geo.LineString]:
),
)

registry.register(
LineString,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="extrude",
node_name="extrude",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)
registry.register(
LineString,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="tessellate",
node_name="tessellate",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)


class LinearRing(LineString):
"""
Expand Down Expand Up @@ -1034,6 +1047,8 @@ class Polygon(_Geometry):
https://developers.google.com/kml/documentation/kmlreference#polygon
"""

extrude: Optional[bool]
tessellate: Optional[bool]
outer_boundary: Optional[OuterBoundaryIs]
inner_boundaries: List[InnerBoundaryIs]

Expand Down Expand Up @@ -1099,13 +1114,13 @@ def __init__(
]
self.outer_boundary = outer_boundary
self.inner_boundaries = list(inner_boundaries) if inner_boundaries else []
self.extrude = extrude
self.tessellate = tessellate
super().__init__(
ns=ns,
name_spaces=name_spaces,
id=id,
target_id=target_id,
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
**kwargs,
)
Expand Down Expand Up @@ -1196,6 +1211,30 @@ def __repr__(self) -> str:
set_element=xml_subelement_list,
),
)
registry.register(
Polygon,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="extrude",
node_name="extrude",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)
registry.register(
Polygon,
item=RegistryItem(
ns_ids=("kml",),
classes=(bool,),
attr_name="tessellate",
node_name="tessellate",
get_kwarg=subelement_bool_kwarg,
set_element=bool_subelement,
default=False,
),
)


def create_multigeometry(
Expand Down Expand Up @@ -1294,7 +1333,7 @@ def create_kml_geometry(
raise KMLWriteError(msg) # pragma: no cover


class MultiGeometry(_Geometry):
class MultiGeometry(_BaseObject):
"""A container for zero or more geometry primitives."""

kml_geometries: List[Union[Point, LineString, Polygon, LinearRing, Self]]
Expand Down Expand Up @@ -1328,17 +1367,26 @@ def __init__(
The ID of the KML element.
target_id : str, optional
The target ID of the KML element.
extrude : bool, optional
Specifies whether to extend the geometry to the ground.
tessellate : bool, optional
Specifies whether to allow the geometry to follow the terrain.
altitude_mode : AltitudeMode, optional
The altitude mode of the geometry.
kml_geometries : iterable of Point, LineString, Polygon, LinearRing,
MultiGeometry
A collection of KML geometries.
geometry : MultiGeometryType, optional
A multi-geometry object.
Parameters for geometry and kml_geometries are mutually exclusive.
When geometry is provided, kml_geometries will be created from it and
you can specify additional parameters like extrude, tessellate, and
altitude_mode which will be set on the individual geometries.
extrude : bool, optional
Specifies whether to extend the geometry to the ground.
This is not set on the multi-geometry itself, but on the individual
geometries.
tessellate : bool, optional
Specifies whether to allow the geometry to follow the terrain.
This is not set on the multi-geometry itself, but on the individual
geometries.
altitude_mode : AltitudeMode, optional
The altitude mode of the geometry. This is not set on the multi-geometry
itself, but on the individual geometries.
**kwargs : any
Additional keyword arguments.
Expand Down Expand Up @@ -1373,9 +1421,6 @@ def __init__(
name_spaces=name_spaces,
id=id,
target_id=target_id,
extrude=extrude,
tessellate=tessellate,
altitude_mode=altitude_mode,
**kwargs,
)

Expand All @@ -1391,9 +1436,6 @@ def __repr__(self) -> str:
f"name_spaces={self.name_spaces!r}, "
f"id={self.id!r}, "
f"target_id={self.target_id!r}, "
f"extrude={self.extrude!r}, "
f"tessellate={self.tessellate!r}, "
f"altitude_mode={self.altitude_mode}, "
f"kml_geometries={self.kml_geometries!r}, "
f"**{self._get_splat()!r},"
")"
Expand Down
Loading

0 comments on commit ac04098

Please sign in to comment.