MCPcopy Create free account
hub / github.com/PierreGode/Ragnar / encodeValue

Method encodeValue

pager_lib/pyasn1/codec/cer/encoder.py:164–232  ·  view source on GitHub ↗
(self, value, asn1Spec, encodeFun, **options)

Source from the content-addressed store, hash-verified

162 return asn1Spec.tagSet
163
164 def encodeValue(self, value, asn1Spec, encodeFun, **options):
165
166 substrate = b''
167
168 comps = []
169 compsMap = {}
170
171 if asn1Spec is None:
172 # instance of ASN.1 schema
173 inconsistency = value.isInconsistent
174 if inconsistency:
175 raise error.PyAsn1Error(
176 f"ASN.1 object {value.__class__.__name__} is inconsistent")
177
178 namedTypes = value.componentType
179
180 for idx, component in enumerate(value.values()):
181 if namedTypes:
182 namedType = namedTypes[idx]
183
184 if namedType.isOptional and not component.isValue:
185 continue
186
187 if namedType.isDefaulted and component == namedType.asn1Object:
188 continue
189
190 compsMap[id(component)] = namedType
191
192 else:
193 compsMap[id(component)] = None
194
195 comps.append((component, asn1Spec))
196
197 else:
198 # bare Python value + ASN.1 schema
199 for idx, namedType in enumerate(asn1Spec.componentType.namedTypes):
200
201 try:
202 component = value[namedType.name]
203
204 except KeyError:
205 raise error.PyAsn1Error('Component name "%s" not found in %r' % (namedType.name, value))
206
207 if namedType.isOptional and namedType.name not in value:
208 continue
209
210 if namedType.isDefaulted and component == namedType.asn1Object:
211 continue
212
213 compsMap[id(component)] = namedType
214 comps.append((component, asn1Spec[idx]))
215
216 for comp, compType in sorted(comps, key=self._componentSortKey):
217 namedType = compsMap[id(comp)]
218
219 if namedType:
220 options.update(ifNotEmpty=namedType.isOptional)
221

Callers 1

encodeValueMethod · 0.45

Calls 4

appendMethod · 0.80
isSameTypeWithMethod · 0.80
valuesMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected