(self, value, asn1Spec, encodeFun, **options)
| 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 |
no test coverage detected