1 __all__ = ('INT', 'UINT', 'FLOAT', 'STRING', 'UNICODE', 'DATE', 'BINARY', 'CONTAINER', 'Element', 'EBML')
4 INT, UINT, FLOAT, STRING, UNICODE, DATE, BINARY, CONTAINER = range(0, 8)
17 class Element(object):
19 class_name = 'Unknown'
26 class EBMLElement(Element):
33 class EBMLVersionElement(Element):
35 class_name = 'EBMLVersion'
36 class_parents = (EBMLElement,)
40 class EBMLReadVersionElement(Element):
42 class_name = 'EBMLReadVersion'
43 class_parents = (EBMLElement,)
47 class EBMLMaxIDLengthElement(Element):
49 class_name = 'EBMLMaxIDLength'
50 class_parents = (EBMLElement,)
54 class EBMLMaxSizeLengthElement(Element):
56 class_name = 'EBMLMaxSizeLength'
57 class_parents = (EBMLElement,)
61 class DocTypeElement(Element):
63 class_name = 'DocType'
64 class_parents = (EBMLElement,)
68 class DocTypeVersionElement(Element):
70 class_name = 'DocTypeVersion'
71 class_parents = (EBMLElement,)
75 class DocTypeReadVersionElement(Element):
77 class_name = 'DocTypeReadVersion'
78 class_parents = (EBMLElement,)
82 class CRC32Element(Element):
89 class VoidElement(Element):
96 class SignatureSlotElement(Element):
98 class_name = 'SignatureSlot'
100 data_type = CONTAINER
103 class SignatureAlgoElement(Element):
105 class_name = 'SignatureAlgo'
106 class_parents = (SignatureSlotElement,)
110 class SignatureHashElement(Element):
112 class_name = 'SignatureHash'
113 class_parents = (SignatureSlotElement,)
117 class SignaturePublicKeyElement(Element):
119 class_name = 'SignaturePublicKey'
120 class_parents = (SignatureSlotElement,)
124 class SignatureElement(Element):
126 class_name = 'Signature'
127 class_parents = (SignatureSlotElement,)
131 class SignatureElementsElement(Element):
133 class_name = 'SignatureElements'
134 class_parents = (SignatureSlotElement,)
135 data_type = CONTAINER
138 class SignatureElementListElement(Element):
140 class_name = 'SignatureElementList'
141 class_parents = (SignatureElementsElement,)
142 data_type = CONTAINER
145 class SignedElementElement(Element):
147 class_name = 'SignedElement'
148 class_parents = (SignatureElementListElement,)
152 class Schema(object):
155 elements_by_class_id = None
158 def element_with_class_id(cls, class_id):
159 if cls.elements_by_class_id is None:
160 cls.elements_by_class_id = {}
161 for element in cls.elements:
162 cls.elements_by_class_id[element.class_id] = element
163 return cls.elements_by_class_id[class_id]
166 def global_elements(cls):
167 return [element for element in cls.elements if element.class_global]
170 def root_elements(cls):
171 return [element for element in cls.elements if element.class_root]
174 def child_elements_of_element(cls, parent):
175 children = [element for element in cls.elements if parent in element.class_parents]
176 children += cls.global_elements()
177 if 'self' in parent.class_parents and parent not in children:
178 children.append(parent)
186 EBMLReadVersionElement,
187 EBMLMaxIDLengthElement,
188 EBMLMaxSizeLengthElement,
190 DocTypeVersionElement,
191 DocTypeReadVersionElement,
194 SignatureSlotElement,
195 SignatureAlgoElement,
196 SignatureHashElement,
197 SignaturePublicKeyElement,
199 SignatureElementsElement,
200 SignatureElementListElement,