1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright (c) 2010-2024 openpyxl
 
"""
Utility list for top level containers that contain one type of element
 
Provides the necessary API to read and write XML
"""
 
from openpyxl.xml.functions import Element
 
 
class ElementList(list):
 
 
    @property
    def tagname(self):
        raise NotImplementedError
 
 
    @property
    def expected_type(self):
        raise NotImplementedError
 
 
    @classmethod
    def from_tree(cls, tree):
        l = [cls.expected_type.from_tree(el) for el in tree]
        return cls(l)
 
 
    def to_tree(self):
        container = Element(self.tagname)
        for el in self:
            container.append(el.to_tree())
        return container
 
 
    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)