summaryrefslogtreecommitdiff
path: root/pysnmp/proto
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-10-06 01:16:56 +0200
committerIlya Etingof <etingof@gmail.com>2017-10-06 01:16:56 +0200
commit0f32c00d89eae2f86b2282ffc50805e059be5492 (patch)
tree1dee3b5e2faac05849bfc499a517240a80f9e4f3 /pysnmp/proto
parent9d35779f1cf8dce05bb8abe12aa7a2bb0732967a (diff)
downloadpysnmp-git-0f32c00d89eae2f86b2282ffc50805e059be5492.tar.gz
fixed Bits.clone()/subtype()
Diffstat (limited to 'pysnmp/proto')
-rw-r--r--pysnmp/proto/rfc1902.py20
1 files changed, 11 insertions, 9 deletions
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 = []