summaryrefslogtreecommitdiff
path: root/pysnmp
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2018-09-09 11:03:25 +0200
committerIlya Etingof <etingof@gmail.com>2018-09-09 12:24:39 +0200
commit74434d710c2cbaa73ca82a889b578c2ff912dd39 (patch)
tree47513c52e2eb9792e751740400bc47ed3357fcce /pysnmp
parentb2b10e75c5830e2eddbd9158a4052a2d69eac79c (diff)
downloadpysnmp-git-74434d710c2cbaa73ca82a889b578c2ff912dd39.tar.gz
Tolerate duplicate enumerations
Possible duplicate enumerations in `Bits` and `Integer` SMI types causes pyasn1 exception. This fix reduces duplicates prior to passing them to pyasn1.
Diffstat (limited to 'pysnmp')
-rw-r--r--pysnmp/proto/rfc1902.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/pysnmp/proto/rfc1902.py b/pysnmp/proto/rfc1902.py
index 3370f478..ee82ef5a 100644
--- a/pysnmp/proto/rfc1902.py
+++ b/pysnmp/proto/rfc1902.py
@@ -128,12 +128,17 @@ class Integer(Integer32):
@classmethod
def withNamedValues(cls, **values):
- """Creates a subclass with discreet named values constraint.
+ """Create a subclass with discreet named values constraint.
+
+ Reduce fully duplicate enumerations along the way.
"""
+ enums = set(cls.namedValues.items())
+ enums.update(values.items())
class X(cls):
- namedValues = cls.namedValues + namedval.NamedValues(*values.items())
- subtypeSpec = cls.subtypeSpec + constraint.SingleValueConstraint(*values.values())
+ namedValues = namedval.NamedValues(*enums)
+ subtypeSpec = cls.subtypeSpec + constraint.SingleValueConstraint(
+ *values.values())
X.__name__ = cls.__name__
return X
@@ -637,10 +642,14 @@ class Bits(OctetString):
@classmethod
def withNamedBits(cls, **values):
"""Creates a subclass with discreet named bits constraint.
+
+ Reduce fully duplicate enumerations along the way.
"""
+ enums = set(cls.namedValues.items())
+ enums.update(values.items())
class X(cls):
- namedValues = cls.namedValues + namedval.NamedValues(*values.items())
+ namedValues = namedval.NamedValues(*enums)
X.__name__ = cls.__name__
return X