Source code for fastpyxl.descriptors.container
# Copyright (c) 2010-2024 fastpyxl
"""
Utility list for top level containers that contain one type of element
Provides the necessary API to read and write XML
"""
from typing import Any, cast
from fastpyxl.xml.functions import Element
[docs]
class ElementList(list):
@property
def tagname(self):
raise NotImplementedError
@property
def expected_type(self):
raise NotImplementedError
[docs]
@classmethod
def from_tree(cls, tree):
et = cast(Any, cls).expected_type
items = [et.from_tree(el) for el in tree]
return cls(items)
[docs]
def to_tree(self):
container = Element(self.tagname)
for el in self:
container.append(el.to_tree())
return container
[docs]
def append(self, value):
if not isinstance(value, self.expected_type):
raise TypeError(f"Value must of type {self.expected_type} {type(value)} provided")
super().append(value)