diff options
author | Ilya Etingof <etingof@gmail.com> | 2019-06-23 19:48:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-23 19:48:31 +0200 |
commit | 66d329acaaf204eff63ae595fd7d6f56cd530c72 (patch) | |
tree | 46187ae1df17aa9eb728abc2c55ef5ce612c6764 /pyasn1/type/base.py | |
parent | b028644dea4244f1cd2513ab0241c8cb9be43324 (diff) | |
download | pyasn1-66d329acaaf204eff63ae595fd7d6f56cd530c72.tar.gz |
SequenceOf/SetOf to remain a schema objects (#162)
* Add `omitEmptyOptionals` encoder option
Added `omitEmptyOptionals` option which is respected by `Sequence`
and `Set` encoders. When `omitEmptyOptionals` is set to `True`, empty
initialized optional components are not encoded. Default is `False`.
* Change `SequenceOf`/`SetOf` behaviour
- New elements to `SequenceOf`/`SetOf` objects can now be added at any
position - the requirement for the new elements to reside at the end
of the existing ones (i.e. s[len(s)] = 123) is removed.
- Removed default initializer from `SequenceOf`/`SetOf` types to ensure
consistent behaviour with the rest of ASN.1 types. Before this change,
`SequenceOf`/`SetOf` instances immediately become value objects
behaving like an empty list. With this change, `SequenceOf`/`SetOf`
objects remain schema objects unless a component is added or
`.clear()` is called.
- Added `.reset()` method to all constructed types to turn value object
into a schema object.
Diffstat (limited to 'pyasn1/type/base.py')
-rw-r--r-- | pyasn1/type/base.py | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/pyasn1/type/base.py b/pyasn1/type/base.py index 7995118..b231482 100644 --- a/pyasn1/type/base.py +++ b/pyasn1/type/base.py @@ -467,8 +467,6 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): Asn1ItemBase.__init__(self, **readOnly) - self._componentValues = [] - def __repr__(self): representation = '%s %s object at 0x%x' % ( self.__class__.__name__, self.isValue and 'value' or 'schema', id(self) @@ -478,38 +476,40 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): if value is not noValue: representation += ' %s=%r' % (attr, value) - if self.isValue and self._componentValues: - representation += ' payload [%s]' % ', '.join([repr(x) for x in self._componentValues]) + if self.isValue and self.components: + representation += ' payload [%s]' % ', '.join( + [repr(x) for x in self.components]) return '<%s>' % representation def __eq__(self, other): - return self is other and True or self._componentValues == other + return self is other or self.components == other def __ne__(self, other): - return self._componentValues != other + return self.components != other def __lt__(self, other): - return self._componentValues < other + return self.components < other def __le__(self, other): - return self._componentValues <= other + return self.components <= other def __gt__(self, other): - return self._componentValues > other + return self.components > other def __ge__(self, other): - return self._componentValues >= other + return self.components >= other if sys.version_info[0] <= 2: def __nonzero__(self): - return self._componentValues and True or False + return bool(self.components) else: def __bool__(self): - return self._componentValues and True or False + return bool(self.components) - def __len__(self): - return len(self._componentValues) + @property + def components(self): + raise error.PyAsn1Error('Method not implemented') def _cloneComponentValues(self, myClone, cloneValueFlag): pass @@ -631,9 +631,6 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): self[k] = kwargs[k] return self - def clear(self): - self._componentValues = [] - # backward compatibility def setDefaultComponents(self): |