Skip to content

Commit

Permalink
Network LInk Control
Browse files Browse the repository at this point in the history
  • Loading branch information
apurvabanka committed Nov 22, 2024
1 parent 164c9a8 commit e8dd1d0
Show file tree
Hide file tree
Showing 6 changed files with 253 additions and 4 deletions.
1 change: 1 addition & 0 deletions fastkml/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@

__all__ = [
"KML",
"NetworkLinkControl"
"Document",
"Folder",
"GroundOverlay",
Expand Down
87 changes: 87 additions & 0 deletions fastkml/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,12 @@
from fastkml.styles import StyleMap
from fastkml.styles import StyleUrl
from fastkml.times import TimeSpan
from fastkml.times import KmlDateTime
from fastkml.times import TimeStamp
from fastkml.update import Update
from fastkml.utils import find_all
from fastkml.views import Camera
from fastkml.views import _AbstractView
from fastkml.views import LookAt
from fastkml.views import Region

Expand Down Expand Up @@ -323,6 +326,79 @@ def get_style_by_url(self, style_url: str) -> Optional[Union[Style, StyleMap]]:
)


class NetworkLinkControl(_Container):

schemata: List[Schema]

def __init__(
self,
ns: Optional[str] = None,
name_spaces: Optional[Dict[str, str]] = None,
id: Optional[str] = None,
target_id: Optional[str] = None,
min_refresh_period: Optional[float] = None,
max_session_length: Optional[float] = None,
cookie: Optional[str] = None,
message: Optional[str] = None,
link_name: Optional[str] = None,
link_description: Optional[str] = None,
link_snippet: Optional[str] = None,
expires: Optional[KmlDateTime] = None,
update:Optional[Update] = None,
view: Optional[Union[Camera, LookAt]] = None,
schemata: Optional[Iterable[Schema]] = None,
**kwargs: Any
) -> None:
super().__init__(
ns=ns,
name_spaces=name_spaces,
id=id,
target_id=target_id,
min_refresh_period=min_refresh_period,
max_session_length=max_session_length,
cookie=cookie,
message=message,
link_name=link_name,
link_description=link_description,
link_snippet=link_snippet,
expires=expires,
update=update,
view=view,
**kwargs
)
self.schemata = list(schemata) if schemata else []

def __repr__(self) -> str:
"""
Return a string representation of the NetworkLinkControl object.
Returns
-------
str: A string representation of the NetworkLinkControl object.
"""
return (
f"{self.__class__.__module__}.{self.__class__.__name__}("
f"ns={self.ns!r}, "
f"name_spaces={self.name_spaces!r}, "
f"id={self.id!r}, "
f"target_id={self.target_id!r}, "
f"min_refresh_period={self.min_refresh_period!r}, "
f"max_session_length={self.max_session_length!r}, "
f"cookie={self.cookie!r}, "
f"message={self.message!r}, "
f"link_name={self.link_name!r}, "
f"link_description={self.link_description!r}, "
f"link_snippet={self.link_snippet!r}, "
f"expires={self.expires!r}, "
f"update={self.update!r}, "
f"view={self.view!r}, "
f"schemata={self.schemata!r}, "
f"**{self._get_splat()!r},"
")"
)


registry.register(
_Container,
RegistryItem(
Expand All @@ -334,6 +410,17 @@ def get_style_by_url(self, style_url: str) -> Optional[Union[Style, StyleMap]]:
set_element=xml_subelement_list,
),
)
registry.register(
NetworkLinkControl,
RegistryItem(
ns_ids=("kml",),
attr_name="schemata",
node_name="Schema",
classes=(Schema,),
get_kwarg=xml_subelement_list_kwarg,
set_element=xml_subelement_list,
),
)
registry.register(
Document,
RegistryItem(
Expand Down
121 changes: 120 additions & 1 deletion fastkml/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
from fastkml.geometry import Polygon
from fastkml.geometry import create_kml_geometry
from fastkml.helpers import attribute_int_kwarg
from fastkml.helpers import datetime_subelement
from fastkml.helpers import datetime_subelement_kwarg
from fastkml.helpers import bool_subelement
from fastkml.helpers import clean_string
from fastkml.helpers import int_attribute
Expand All @@ -63,8 +65,9 @@
from fastkml.styles import Style
from fastkml.styles import StyleMap
from fastkml.styles import StyleUrl
from fastkml.times import TimeSpan
from fastkml.times import KmlDateTime, TimeSpan
from fastkml.times import TimeStamp
from fastkml.update import Update
from fastkml.views import Camera
from fastkml.views import LookAt
from fastkml.views import Region
Expand Down Expand Up @@ -222,6 +225,15 @@ class _Feature(TimeMixin, _BaseObject):
view: Union[Camera, LookAt, None]
region: Optional[Region]
extended_data: Optional[ExtendedData]
min_refresh_period: Optional[float] = None,
max_session_length: Optional[float] = None,
cookie: Optional[str] = None,
message: Optional[str] = None,
link_name: Optional[str] = None,
link_description: Optional[str] = None,
link_snippet: Optional[str] = None,
expires: Optional[KmlDateTime] = None,
update:Optional[Update] = None,

def __init__(
self,
Expand All @@ -244,6 +256,15 @@ def __init__(
styles: Optional[Iterable[Union[Style, StyleMap]]] = None,
region: Optional[Region] = None,
extended_data: Optional[ExtendedData] = None,
min_refresh_period: Optional[float] = None,
max_session_length: Optional[float] = None,
cookie: Optional[str] = None,
message: Optional[str] = None,
link_name: Optional[str] = None,
link_description: Optional[str] = None,
link_snippet: Optional[str] = None,
expires: Optional[KmlDateTime] = None,
update:Optional[Update] = None,
**kwargs: Any,
) -> None:
"""
Expand Down Expand Up @@ -304,6 +325,15 @@ def __init__(
self.region = region
self.extended_data = extended_data
self.times = times
self.min_refresh_period = min_refresh_period
self.max_session_length = max_session_length
self.cookie = cookie
self.message = message
self.link_name = link_name
self.link_description = link_description
self.link_snippet = link_snippet
self.expires = expires
self.update = update


registry.register(
Expand Down Expand Up @@ -407,6 +437,95 @@ def __init__(
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="min_refresh_period",
node_name="minRefreshPeriod",
classes=(float,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="max_session_length",
node_name="maxSessionLength",
classes=(float,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="cookie",
node_name="cookie",
classes=(str,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="message",
node_name="message",
classes=(str,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="link_name",
node_name="linkName",
classes=(str,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="link_description",
node_name="linkDescription",
classes=(str,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
RegistryItem(
ns_ids=("kml",),
attr_name="link_snippet",
node_name="linkSnippet",
classes=(str,),
get_kwarg=subelement_text_kwarg,
set_element=text_subelement,
),
)
registry.register(
_Feature,
item=RegistryItem(
ns_ids=("kml", ),
classes=(KmlDateTime,),
attr_name="expires",
node_name="expires",
get_kwarg=datetime_subelement_kwarg,
set_element=datetime_subelement,
),
)

registry.register(
_Feature,
RegistryItem(
Expand Down
7 changes: 4 additions & 3 deletions fastkml/kml.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
from fastkml import validator
from fastkml.base import _XMLObject
from fastkml.containers import Document
from fastkml.containers import NetworkLinkControl
from fastkml.containers import Folder
from fastkml.enums import Verbosity
from fastkml.features import NetworkLink
Expand All @@ -59,7 +60,7 @@

logger = logging.getLogger(__name__)

kml_children = Union[Folder, Document, Placemark, GroundOverlay, PhotoOverlay]
kml_children = Union[Folder, Document, Placemark, GroundOverlay, PhotoOverlay, NetworkLinkControl]


def lxml_parse_and_validate(
Expand Down Expand Up @@ -286,8 +287,8 @@ def write(
KML,
RegistryItem(
ns_ids=("kml",),
classes=(Document, Folder, Placemark, GroundOverlay, PhotoOverlay, NetworkLink),
node_name="Document,Folder,Placemark,GroundOverlay,PhotoOverlay,NetworkLink",
classes=(Document, Folder, Placemark, GroundOverlay, PhotoOverlay, NetworkLink, NetworkLinkControl),
node_name="Document,Folder,Placemark,GroundOverlay,PhotoOverlay,NetworkLink,NetworkLinkControl",
attr_name="features",
get_kwarg=xml_subelement_list_kwarg,
set_element=xml_subelement_list,
Expand Down
5 changes: 5 additions & 0 deletions fastkml/times.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ def __str__(self) -> str:
else self.dt.isoformat()
)
return self.dt.isoformat()

@classmethod
def get_tag_name(cls) -> str:
"""Return the tag name."""
return cls.__name__.lower()

@classmethod
def parse(cls, datestr: str) -> Optional["KmlDateTime"]:
Expand Down
36 changes: 36 additions & 0 deletions fastkml/update.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from typing import Any, Dict, List, Optional

from fastkml.base import _XMLObject

class Change(_XMLObject):

def __int__(
self,
target_id: str,
elements: List[Dict[str, Any]] = None
):
super.__init__(
target_id=target_id,
elements=elements
)

def parse_children(self):
pass

class Create(_XMLObject):
def __init__():
pass

class Delete(_XMLObject):
def __init__():
pass

class Update:

def __init__(
target_href: Optional[str] = None,
change: Optional[Change] = None,
create: Optional[Create] = None,
delete: Optional[Delete] = None
):
pass

0 comments on commit e8dd1d0

Please sign in to comment.