diff options
author | elie <elie> | 2013-12-08 09:30:29 +0000 |
---|---|---|
committer | elie <elie> | 2013-12-08 09:30:29 +0000 |
commit | 1740bb6976086f79e5731a16d8cd33983ac5fc9e (patch) | |
tree | 0940e73cae98fa0eecb7f83874d7fe86e1e202c9 | |
parent | daa20434ae095855b28c63469cebff3f79bfe15a (diff) | |
download | pyasn1-1740bb6976086f79e5731a16d8cd33983ac5fc9e.tar.gz |
* constructed types can now be initialized with new .setComponents() method
which accepts both var-args and keyword-args
* default repr() modified to reflect this change
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | pyasn1/type/base.py | 18 | ||||
-rw-r--r-- | pyasn1/type/namedtype.py | 2 | ||||
-rw-r--r-- | test/type/test_univ.py | 8 |
4 files changed, 22 insertions, 9 deletions
@@ -20,6 +20,9 @@ Revision 0.1.8 flags. - Constructed types now verify their consistency by invoking isSameTypeWith() for their components rather than isSuperTypeOf() as it used to be. +- Constructed types can now be initialized with new .setComponents() method + which accepts both var-args and keyword-args. Default repr() modified to + reflect this change. - Fix to NamedType.__repr__() to work properly. - Fixes to __repr__() implementation of many built-in ASN.1 types to take into account all of their initializers such as tagSet, subtypeSpec etc. diff --git a/pyasn1/type/base.py b/pyasn1/type/base.py index 8efa178..78d316f 100644 --- a/pyasn1/type/base.py +++ b/pyasn1/type/base.py @@ -185,12 +185,8 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): if self._subtypeSpec is not self.subtypeSpec: r.append('subtypeSpec=%r' % (self._subtypeSpec,)) r = '%s(%s)' % (self.__class__.__name__, ', '.join(r)) - for idx in range(len(self._componentValues)): - if self._componentValues[idx] is None: - continue - r = r + '.setComponentByPosition(%s, %r)' % ( - idx, self._componentValues[idx] - ) + if self._componentValues: + r += '.setComponents(%s)' % ', '.join([repr(x) for x in self._componentValues]) return r def __eq__(self, other): @@ -253,8 +249,17 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): def setComponentByPosition(self, idx, value, verifyConstraints=True): raise error.PyAsn1Error('Method not implemented') + def setComponents(self, *args, **kwargs): + for idx in range(len(args)): + self[idx] = args[idx] + for k in kwargs: + self[k] = kwargs[k] + return self + def getComponentType(self): return self._componentType + def setDefaultComponents(self): pass + def __getitem__(self, idx): return self.getComponentByPosition(idx) def __setitem__(self, idx, value): self.setComponentByPosition(idx, value) @@ -264,4 +269,3 @@ class AbstractConstructedAsn1Item(Asn1ItemBase): self._componentValues = [] self._componentValuesSet = 0 - def setDefaultComponents(self): pass diff --git a/pyasn1/type/namedtype.py b/pyasn1/type/namedtype.py index c1f36f7..5ddcbd3 100644 --- a/pyasn1/type/namedtype.py +++ b/pyasn1/type/namedtype.py @@ -8,7 +8,7 @@ class NamedType: isDefaulted = 0 def __init__(self, name, t): self.__name = name; self.__type = t - def __repr__(self): return '%s(%s, %r)' % ( + def __repr__(self): return '%s(%r, %r)' % ( self.__class__.__name__, self.__name, self.__type ) def getType(self): return self.__type diff --git a/test/type/test_univ.py b/test/type/test_univ.py index 606d47b..68e5601 100644 --- a/test/type/test_univ.py +++ b/test/type/test_univ.py @@ -350,7 +350,10 @@ class SequenceOf(unittest.TestCase): s = self.s1.clone(cloneValueFlag=1) assert len(s) == 1 assert s.getComponentByPosition(0) == self.s1.getComponentByPosition(0) - + def testSetComponents(self): + assert self.s1.clone().setComponents('abc', 'def') == \ + self.s1.setComponentByPosition(0, 'abc').setComponentByPosition(1, 'def') + class Sequence(unittest.TestCase): def setUp(self): self.s1 = univ.Sequence(componentType=namedtype.NamedTypes( @@ -418,6 +421,9 @@ class Sequence(unittest.TestCase): pass else: assert 0, 'inner supertype constraint allowed' + def testSetComponents(self): + assert self.s1.clone().setComponents(name='a', nick='b', age=1) == \ + self.s1.setComponentByPosition(0, 'a').setComponentByPosition(1, 'b').setComponentByPosition(2, 1) class SetOf(unittest.TestCase): def setUp(self): |