From 0f32c00d89eae2f86b2282ffc50805e059be5492 Mon Sep 17 00:00:00 2001 From: Ilya Etingof Date: Fri, 6 Oct 2017 01:16:56 +0200 Subject: fixed Bits.clone()/subtype() --- pysnmp/proto/rfc1902.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'pysnmp/proto') diff --git a/pysnmp/proto/rfc1902.py b/pysnmp/proto/rfc1902.py index 805132c9..60e31930 100644 --- a/pysnmp/proto/rfc1902.py +++ b/pysnmp/proto/rfc1902.py @@ -609,31 +609,33 @@ class Bits(OctetString): def clone(self, *args, **kwargs): namedValues = kwargs.pop('namedValues', self.namedValues) - clone = OctetString.clone(self, *args, **kwargs) + args = args and self.prettyIn(args[0], namedValues=namedValues) + clone = OctetString.clone(self, args, **kwargs) clone.namedValues = namedValues return clone def subtype(self, *args, **kwargs): namedValues = kwargs.pop('namedValues', self.namedValues) - clone = OctetString.subtype(self, *args, **kwargs) + args = args and self.prettyIn(args[0], namedValues=namedValues) + clone = OctetString.subtype(self, args, **kwargs) clone.namedValues = namedValues return clone - def prettyIn(self, bits): + def prettyIn(self, bits, namedValues=None): if not isinstance(bits, (tuple, list)): return OctetString.prettyIn(self, bits) # raw bitstring - _octets = [] + octets = [] for bit in bits: # tuple of named bits - v = self.namedValues.getValue(bit) + v = (namedValues or self.namedValues).getValue(bit) if v is None: raise error.ProtocolError( 'Unknown named bit %s' % bit ) d, m = divmod(v, 8) - if d >= len(_octets): - _octets.extend([0] * (d - len(_octets) + 1)) - _octets[d] |= 0x01 << (7 - m) - return OctetString.prettyIn(self, _octets) + if d >= len(octets): + octets.extend([0] * (d - len(octets) + 1)) + octets[d] |= 0x01 << (7 - m) + return OctetString.prettyIn(self, octets) def prettyOut(self, value): names = [] -- cgit v1.2.1