From 74434d710c2cbaa73ca82a889b578c2ff912dd39 Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Sun, 9 Sep 2018 11:03:25 +0200 Subject: 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. --- pysnmp/proto/rfc1902.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'pysnmp/proto') 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 -- cgit v1.2.1