aboutsummaryrefslogtreecommitdiff
path: root/pyasn1/codec
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2019-08-25 14:35:44 +0200
committerGitHub <noreply@github.com>2019-08-25 14:35:44 +0200
commit66afc8921e4f5d3a41e407ab6d95ce7e4ec5383a (patch)
treee552f03ee7846566b4b036c192d9ed326a9e74a5 /pyasn1/codec
parentec580e545ef25f117573014d40ca5c512e58dbf3 (diff)
downloadpyasn1-66afc8921e4f5d3a41e407ab6d95ce7e4ec5383a.tar.gz
Add `isInconsistent` property hook to all constructed types (#170)
Added `isInconsistent` property to all constructed types. This property conceptually replaces `verifySizeSpec` method to serve a more general purpose e.g. ensuring all required fields are in a good shape. By default this check invokes subtype constraints verification and is run by codecs on value de/serialisation.
Diffstat (limited to 'pyasn1/codec')
-rw-r--r--pyasn1/codec/ber/decoder.py8
-rw-r--r--pyasn1/codec/ber/encoder.py8
-rw-r--r--pyasn1/codec/cer/encoder.py4
-rw-r--r--pyasn1/codec/native/encoder.py8
4 files changed, 21 insertions, 7 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py
index 3f2d180..5759ab8 100644
--- a/pyasn1/codec/ber/decoder.py
+++ b/pyasn1/codec/ber/decoder.py
@@ -695,7 +695,9 @@ class UniversalConstructedTypeDecoder(AbstractConstructedDecoder):
asn1Object.setComponentByPosition(idx, component)
else:
- asn1Object.verifySizeSpec()
+ inconsistency = asn1Object.isInconsistent
+ if inconsistency:
+ raise inconsistency
else:
asn1Object = asn1Spec.clone()
@@ -879,7 +881,9 @@ class UniversalConstructedTypeDecoder(AbstractConstructedDecoder):
asn1Object.setComponentByPosition(idx, component)
else:
- asn1Object.verifySizeSpec()
+ inconsistency = asn1Object.isInconsistent
+ if inconsistency:
+ raise inconsistency
else:
asn1Object = asn1Spec.clone()
diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py
index a5d5fd3..778aa86 100644
--- a/pyasn1/codec/ber/encoder.py
+++ b/pyasn1/codec/ber/encoder.py
@@ -537,7 +537,9 @@ class SequenceEncoder(AbstractItemEncoder):
if asn1Spec is None:
# instance of ASN.1 schema
- value.verifySizeSpec()
+ inconsistency = value.isInconsistent
+ if inconsistency:
+ raise inconsistency
namedTypes = value.componentType
@@ -643,7 +645,9 @@ class SequenceOfEncoder(AbstractItemEncoder):
def _encodeComponents(self, value, asn1Spec, encodeFun, **options):
if asn1Spec is None:
- value.verifySizeSpec()
+ inconsistency = value.isInconsistent
+ if inconsistency:
+ raise inconsistency
else:
asn1Spec = asn1Spec.componentType
diff --git a/pyasn1/codec/cer/encoder.py b/pyasn1/codec/cer/encoder.py
index 6a9db97..935b696 100644
--- a/pyasn1/codec/cer/encoder.py
+++ b/pyasn1/codec/cer/encoder.py
@@ -169,7 +169,9 @@ class SetEncoder(encoder.SequenceEncoder):
if asn1Spec is None:
# instance of ASN.1 schema
- value.verifySizeSpec()
+ inconsistency = value.isInconsistent
+ if inconsistency:
+ raise inconsistency
namedTypes = value.componentType
diff --git a/pyasn1/codec/native/encoder.py b/pyasn1/codec/native/encoder.py
index 4c5908d..4318abd 100644
--- a/pyasn1/codec/native/encoder.py
+++ b/pyasn1/codec/native/encoder.py
@@ -72,7 +72,9 @@ class SetEncoder(AbstractItemEncoder):
protoDict = dict
def encode(self, value, encodeFun, **options):
- value.verifySizeSpec()
+ inconsistency = value.isInconsistent
+ if inconsistency:
+ raise inconsistency
namedTypes = value.componentType
substrate = self.protoDict()
@@ -90,7 +92,9 @@ class SequenceEncoder(SetEncoder):
class SequenceOfEncoder(AbstractItemEncoder):
def encode(self, value, encodeFun, **options):
- value.verifySizeSpec()
+ inconsistency = value.isInconsistent
+ if inconsistency:
+ raise inconsistency
return [encodeFun(x, **options) for x in value]