This patch removes the following Pylint warnings:
  - anomalous-backslash-in-string
  - arguments-differ
  - bad-builtin
  - bad-staticmethod-argument
  - superfluous-parens
  - super-init-not-called
  - unidiomatic-typecheck
  - unused-variable
  - wrong-import-order

Signed-off-by: IWASE Yusuke <[email protected]>
---
 ryu/lib/packet/bgp.py             | 136 +++++++++++++++++++++-----------------
 ryu/tests/unit/packet/test_bgp.py |  17 +++--
 2 files changed, 87 insertions(+), 66 deletions(-)

diff --git a/ryu/lib/packet/bgp.py b/ryu/lib/packet/bgp.py
index fa1f5d6..7eae712 100644
--- a/ryu/lib/packet/bgp.py
+++ b/ryu/lib/packet/bgp.py
@@ -26,10 +26,11 @@ import abc
 import copy
 import functools
 import numbers
-import six
 import socket
 import struct
 
+import six
+
 from ryu.lib.stringify import StringifyMixin
 from ryu.lib.packet import afi as addr_family
 from ryu.lib.packet import safi as subaddr_family
@@ -158,14 +159,14 @@ class _Value(object):
     _VALUE_FIELDS = ['value']
 
     @staticmethod
-    def do_init(cls, self, kwargs, **extra_kwargs):
+    def do_init(cls_type, self, kwargs, **extra_kwargs):
         ourfields = {}
-        for f in cls._VALUE_FIELDS:
+        for f in cls_type._VALUE_FIELDS:
             v = kwargs[f]
             del kwargs[f]
             ourfields[f] = v
         kwargs.update(extra_kwargs)
-        super(cls, self).__init__(**kwargs)
+        super(cls_type, self).__init__(**kwargs)
         self.__dict__.update(ourfields)
 
     @classmethod
@@ -232,6 +233,7 @@ class BgpExc(Exception):
     """Flag if set indicates Notification message should be sent to peer."""
 
     def __init__(self, data=''):
+        super(BgpExc, self).__init__()
         self.data = data
 
     def __str__(self):
@@ -256,6 +258,7 @@ class BadLen(BgpExc):
     SUB_CODE = BGP_ERROR_SUB_BAD_MESSAGE_LENGTH
 
     def __init__(self, msg_type_code, message_length):
+        super(BadLen, self).__init__()
         self.msg_type_code = msg_type_code
         self.length = message_length
         self.data = struct.pack('!H', self.length)
@@ -275,6 +278,7 @@ class BadMsg(BgpExc):
     SUB_CODE = BGP_ERROR_SUB_BAD_MESSAGE_TYPE
 
     def __init__(self, msg_type):
+        super(BadMsg, self).__init__()
         self.msg_type = msg_type
         self.data = struct.pack('B', msg_type)
 
@@ -313,6 +317,7 @@ class UnsupportedVersion(BgpExc):
     SUB_CODE = BGP_ERROR_SUB_UNSUPPORTED_VERSION_NUMBER
 
     def __init__(self, locally_support_version):
+        super(UnsupportedVersion, self).__init__()
         self.data = struct.pack('H', locally_support_version)
 
 
@@ -399,6 +404,7 @@ class MissingWellKnown(BgpExc):
     SUB_CODE = BGP_ERROR_SUB_MISSING_WELL_KNOWN_ATTRIBUTE
 
     def __init__(self, pattr_type_code):
+        super(MissingWellKnown, self).__init__()
         self.pattr_type_code = pattr_type_code
         self.data = struct.pack('B', pattr_type_code)
 
@@ -607,9 +613,9 @@ def get_rf(afi, safi):
     return _rf_map[(afi, safi)]
 
 
-def pad(bin, len_):
-    assert len(bin) <= len_
-    return bin + b'\0' * (len_ - len(bin))
+def pad(binary, len_):
+    assert len(binary) <= len_
+    return binary + b'\0' * (len_ - len(binary))
 
 
 class _RouteDistinguisher(StringifyMixin, _TypeDisp, _Value):
@@ -618,7 +624,9 @@ class _RouteDistinguisher(StringifyMixin, _TypeDisp, 
_Value):
     IPV4_ADDRESS = 1
     FOUR_OCTET_AS = 2
 
-    def __init__(self, type_, admin=0, assigned=0):
+    def __init__(self, admin=0, assigned=0, type_=None):
+        if type_ is None:
+            type_ = self._rev_lookup_type(self.__class__)
         self.type = type_
         self.admin = admin
         self.assigned = assigned
@@ -629,7 +637,7 @@ class _RouteDistinguisher(StringifyMixin, _TypeDisp, 
_Value):
         (type_,) = struct.unpack_from(cls._PACK_STR, six.binary_type(buf))
         rest = buf[struct.calcsize(cls._PACK_STR):]
         subcls = cls._lookup_type(type_)
-        return subcls(type_=type_, **subcls.parse_value(rest))
+        return subcls(**subcls.parse_value(rest))
 
     @classmethod
     def from_str(cls, str_):
@@ -645,7 +653,7 @@ class _RouteDistinguisher(StringifyMixin, _TypeDisp, 
_Value):
             type_ = cls.TWO_OCTET_AS
             first = int(first)
         subcls = cls._lookup_type(type_)
-        return subcls(type_=type_, admin=first, assigned=int(second))
+        return subcls(admin=first, assigned=int(second))
 
     def serialize(self):
         value = self.serialize_value()
@@ -663,8 +671,9 @@ class BGPTwoOctetAsRD(_RouteDistinguisher):
     _VALUE_PACK_STR = '!HI'
     _VALUE_FIELDS = ['admin', 'assigned']
 
-    def __init__(self, type_=_RouteDistinguisher.TWO_OCTET_AS, **kwargs):
-        self.do_init(BGPTwoOctetAsRD, self, kwargs, type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPTwoOctetAsRD, self).__init__()
+        self.do_init(BGPTwoOctetAsRD, self, kwargs)
 
 
 @_RouteDistinguisher.register_type(_RouteDistinguisher.IPV4_ADDRESS)
@@ -677,8 +686,9 @@ class BGPIPv4AddressRD(_RouteDistinguisher):
         ]
     }
 
-    def __init__(self, type_=_RouteDistinguisher.IPV4_ADDRESS, **kwargs):
-        self.do_init(BGPIPv4AddressRD, self, kwargs, type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPIPv4AddressRD, self).__init__()
+        self.do_init(BGPIPv4AddressRD, self, kwargs)
 
     @classmethod
     def parse_value(cls, buf):
@@ -703,16 +713,16 @@ class BGPFourOctetAsRD(_RouteDistinguisher):
     _VALUE_PACK_STR = '!IH'
     _VALUE_FIELDS = ['admin', 'assigned']
 
-    def __init__(self, type_=_RouteDistinguisher.FOUR_OCTET_AS,
-                 **kwargs):
-        self.do_init(BGPFourOctetAsRD, self, kwargs, type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPFourOctetAsRD, self).__init__()
+        self.do_init(BGPFourOctetAsRD, self, kwargs)
 
 
 @six.add_metaclass(abc.ABCMeta)
 class _AddrPrefix(StringifyMixin):
     _PACK_STR = '!B'  # length
 
-    def __init__(self, length, addr, prefixes=None):
+    def __init__(self, length, addr, prefixes=None, **kwargs):
         # length is on-wire bit length of prefixes+addr.
         assert prefixes != ()
         if isinstance(addr, tuple):
@@ -724,14 +734,14 @@ class _AddrPrefix(StringifyMixin):
             addr = prefixes + (addr,)
         self.addr = addr
 
-    @staticmethod
+    @classmethod
     @abc.abstractmethod
-    def _to_bin(addr):
+    def _to_bin(cls, addr):
         pass
 
-    @staticmethod
+    @classmethod
     @abc.abstractmethod
-    def _from_bin(addr):
+    def _from_bin(cls, addr):
         pass
 
     @classmethod
@@ -764,12 +774,12 @@ class _AddrPrefix(StringifyMixin):
 
 
 class _BinAddrPrefix(_AddrPrefix):
-    @staticmethod
-    def _to_bin(addr):
+    @classmethod
+    def _to_bin(cls, addr):
         return addr
 
-    @staticmethod
-    def _from_bin(addr):
+    @classmethod
+    def _from_bin(cls, addr):
         return addr
 
 
@@ -811,10 +821,10 @@ class _LabelledAddrPrefix(_AddrPrefix):
         return buf
 
     @classmethod
-    def _label_from_bin(cls, bin):
+    def _label_from_bin(cls, label):
         (b1, b2, b3) = struct.unpack_from(cls._LABEL_PACK_STR,
-                                          six.binary_type(bin))
-        rest = bin[struct.calcsize(cls._LABEL_PACK_STR):]
+                                          six.binary_type(label))
+        rest = label[struct.calcsize(cls._LABEL_PACK_STR):]
         return (b1 << 16) | (b2 << 8) | b3, rest
 
     @classmethod
@@ -824,7 +834,7 @@ class _LabelledAddrPrefix(_AddrPrefix):
         labels = [x << 4 for x in labels]
         if labels and labels[-1] != cls._WITHDRAW_LABEL:
             labels[-1] |= 1  # bottom of stack
-        bin_labels = list(map(cls._label_to_bin, labels))
+        bin_labels = list(cls._label_to_bin(l) for l in labels)
         return bytes(reduce(lambda x, y: x + y, bin_labels,
                             bytearray()) + cls._prefix_to_bin(rest))
 
@@ -880,7 +890,7 @@ class _IPAddrPrefix(_AddrPrefix):
 
     @staticmethod
     def _prefix_from_bin(addr):
-        return (addrconv.ipv4.bin_to_text(pad(addr, 4)),)
+        return addrconv.ipv4.bin_to_text(pad(addr, 4)),
 
 
 class _IP6AddrPrefix(_AddrPrefix):
@@ -891,7 +901,7 @@ class _IP6AddrPrefix(_AddrPrefix):
 
     @staticmethod
     def _prefix_from_bin(addr):
-        return (addrconv.ipv6.bin_to_text(pad(addr, 16)),)
+        return addrconv.ipv6.bin_to_text(pad(addr, 16)),
 
 
 class _VPNAddrPrefix(_AddrPrefix):
@@ -1112,7 +1122,7 @@ class RouteTargetMembershipNLRI(StringifyMixin):
         return cls(origin_as, route_target)
 
     def serialize(self):
-        rt_nlri = ''
+        rt_nlri = b''
         if not self.is_default_rtnlri():
             rt_nlri += struct.pack('!I', self.origin_as)
             # Encode route target
@@ -1123,7 +1133,7 @@ class RouteTargetMembershipNLRI(StringifyMixin):
 
 
 def _addr_class_key(route_family):
-    return (route_family.afi, route_family.safi)
+    return route_family.afi, route_family.safi
 
 
 _ADDR_CLASSES = {
@@ -1164,7 +1174,7 @@ class _OptParam(StringifyMixin, _TypeDisp, _Value):
         rest = rest[length:]
         subcls = cls._lookup_type(type_)
         caps = subcls.parse_value(value)
-        if type(caps) != list:
+        if not isinstance(caps, list):
             caps = [subcls(type_=type_, length=length, **caps[0])]
         return caps, rest
 
@@ -1293,7 +1303,6 @@ class 
BGPOptParamCapabilityGracefulRestart(_OptParamCapability):
     def serialize_cap_value(self):
         buf = bytearray()
         msg_pack_into(self._CAP_PACK_STR, buf, 0, self.flags << 12 | self.time)
-        i = 0
         offset = 2
         for i in self.tuples:
             afi, safi, flags = i
@@ -1522,7 +1531,7 @@ class _BGPPathAttributeAsPathCommon(_PathAttribute):
                                                  six.binary_type(buf))
             buf = buf[struct.calcsize(cls._SEG_HDR_PACK_STR):]
             l = []
-            for i in range(0, num_as):
+            for _ in range(0, num_as):
                 (as_number,) = struct.unpack_from(as_pack_str,
                                                   six.binary_type(buf))
                 buf = buf[struct.calcsize(as_pack_str):]
@@ -1532,7 +1541,8 @@ class _BGPPathAttributeAsPathCommon(_PathAttribute):
             elif type_ == cls._AS_SEQUENCE:
                 result.append(l)
             else:
-                assert(0)  # protocol error
+                # protocol error
+                raise struct.error('Unsupported segment type: %s' % type_)
         return {
             'value': result,
             'as_pack_str': as_pack_str,
@@ -1546,6 +1556,10 @@ class _BGPPathAttributeAsPathCommon(_PathAttribute):
                 type_ = self._AS_SET
             elif isinstance(e, list):
                 type_ = self._AS_SEQUENCE
+            else:
+                raise struct.error(
+                    'Element of %s.value must be of type set or list' %
+                    self.__class__.__name__)
             l = list(e)
             num_as = len(l)
             if num_as == 0:
@@ -1904,7 +1918,9 @@ class _ExtendedCommunity(StringifyMixin, _TypeDisp, 
_Value):
     FOUR_OCTET_AS_SPECIFIC = 0x02
     OPAQUE = 0x03
 
-    def __init__(self, type_):
+    def __init__(self, type_=None):
+        if type_ is None:
+            type_ = self._rev_lookup_type(self.__class__)
         self.type = type_
 
     @classmethod
@@ -1929,10 +1945,9 @@ class 
BGPTwoOctetAsSpecificExtendedCommunity(_ExtendedCommunity):
     _VALUE_PACK_STR = '!BHI'  # sub type, as number, local adm
     _VALUE_FIELDS = ['subtype', 'as_number', 'local_administrator']
 
-    def __init__(self, type_=_ExtendedCommunity.TWO_OCTET_AS_SPECIFIC,
-                 **kwargs):
-        self.do_init(BGPTwoOctetAsSpecificExtendedCommunity, self, kwargs,
-                     type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPTwoOctetAsSpecificExtendedCommunity, self).__init__()
+        self.do_init(BGPTwoOctetAsSpecificExtendedCommunity, self, kwargs)
 
 
 @_ExtendedCommunity.register_type(_ExtendedCommunity.IPV4_ADDRESS_SPECIFIC)
@@ -1945,10 +1960,9 @@ class 
BGPIPv4AddressSpecificExtendedCommunity(_ExtendedCommunity):
         ]
     }
 
-    def __init__(self, type_=_ExtendedCommunity.IPV4_ADDRESS_SPECIFIC,
-                 **kwargs):
-        self.do_init(BGPIPv4AddressSpecificExtendedCommunity, self, kwargs,
-                     type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPIPv4AddressSpecificExtendedCommunity, self).__init__()
+        self.do_init(BGPIPv4AddressSpecificExtendedCommunity, self, kwargs)
 
     @classmethod
     def parse_value(cls, buf):
@@ -1974,10 +1988,9 @@ class 
BGPFourOctetAsSpecificExtendedCommunity(_ExtendedCommunity):
     _VALUE_PACK_STR = '!BIH'  # sub type, as number, local adm
     _VALUE_FIELDS = ['subtype', 'as_number', 'local_administrator']
 
-    def __init__(self, type_=_ExtendedCommunity.FOUR_OCTET_AS_SPECIFIC,
-                 **kwargs):
-        self.do_init(BGPFourOctetAsSpecificExtendedCommunity, self, kwargs,
-                     type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPFourOctetAsSpecificExtendedCommunity, self).__init__()
+        self.do_init(BGPFourOctetAsSpecificExtendedCommunity, self, kwargs)
 
 
 @_ExtendedCommunity.register_type(_ExtendedCommunity.OPAQUE)
@@ -1985,18 +1998,18 @@ class BGPOpaqueExtendedCommunity(_ExtendedCommunity):
     _VALUE_PACK_STR = '!7s'  # opaque value
     _VALUE_FIELDS = ['opaque']
 
-    def __init__(self, type_=_ExtendedCommunity.OPAQUE,
-                 **kwargs):
-        self.do_init(BGPOpaqueExtendedCommunity, self, kwargs,
-                     type_=type_)
+    def __init__(self, **kwargs):
+        super(BGPOpaqueExtendedCommunity, self).__init__()
+        self.do_init(BGPOpaqueExtendedCommunity, self, kwargs)
 
 
 @_ExtendedCommunity.register_unknown_type()
 class BGPUnknownExtendedCommunity(_ExtendedCommunity):
     _VALUE_PACK_STR = '!7s'  # opaque value
 
-    def __init__(self, **kwargs):
-        self.do_init(BGPUnknownExtendedCommunity, self, kwargs)
+    def __init__(self, type_, **kwargs):
+        super(BGPUnknownExtendedCommunity, self).__init__(type_=type_)
+        self.do_init(BGPUnknownExtendedCommunity, self, kwargs, type_=type_)
 
 
 @_PathAttribute.register_type(BGP_ATTR_TYPE_MP_REACH_NLRI)
@@ -2178,7 +2191,7 @@ class BGPMessage(packet_base.PacketBase, _TypeDisp):
     ========================== ===============================================
     marker                     Marker field.  Ignored when encoding.
     len                        Length field.  Ignored when encoding.
-    type                       Type field.  one of BGP\_MSG\_ constants.
+    type                       Type field.  one of ``BGP_MSG_*`` constants.
     ========================== ===============================================
     """
 
@@ -2186,12 +2199,15 @@ class BGPMessage(packet_base.PacketBase, _TypeDisp):
     _HDR_LEN = struct.calcsize(_HDR_PACK_STR)
     _class_prefixes = ['BGP']
 
-    def __init__(self, type_, len_=None, marker=None):
+    def __init__(self, marker=None, len_=None, type_=None):
+        super(BGPMessage, self).__init__()
         if marker is None:
             self._marker = _MARKER
         else:
             self._marker = marker
         self.len = len_
+        if type_ is None:
+            type_ = self._rev_lookup_type(self.__class__)
         self.type = type_
 
     @classmethod
@@ -2211,7 +2227,7 @@ class BGPMessage(packet_base.PacketBase, _TypeDisp):
         kwargs = subcls.parser(binmsg)
         return subcls(marker=marker, len_=len_, type_=type_, **kwargs), rest
 
-    def serialize(self):
+    def serialize(self, payload=None, prev=None):
         # fixup
         self._marker = _MARKER
         tail = self.serialize_tail()
diff --git a/ryu/tests/unit/packet/test_bgp.py 
b/ryu/tests/unit/packet/test_bgp.py
index 37f0468..17bef87 100644
--- a/ryu/tests/unit/packet/test_bgp.py
+++ b/ryu/tests/unit/packet/test_bgp.py
@@ -16,6 +16,8 @@
 
 from __future__ import print_function
 
+import os
+import sys
 import unittest
 from nose.tools import eq_
 from nose.tools import ok_
@@ -25,6 +27,10 @@ from ryu.lib.packet import afi
 from ryu.lib.packet import safi
 
 
+BGP4_PACKET_DATA_DIR = os.path.join(
+    os.path.dirname(sys.modules[__name__].__file__), '../../packet_data/bgp4/')
+
+
 class Test_bgp(unittest.TestCase):
     """ Test case for ryu.lib.packet.bgp
     """
@@ -112,7 +118,7 @@ class Test_bgp(unittest.TestCase):
         ]
         path_attributes = [
             bgp.BGPPathAttributeOrigin(value=1),
-            bgp.BGPPathAttributeAsPath(value=[[1000], set([1001, 1002]),
+            bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002},
                                               [1003, 1004]]),
             bgp.BGPPathAttributeNextHop(value='192.0.2.199'),
             bgp.BGPPathAttributeMultiExitDisc(value=2000000000),
@@ -124,7 +130,7 @@ class Test_bgp(unittest.TestCase):
             bgp.BGPPathAttributeOriginatorId(value='10.1.1.1'),
             bgp.BGPPathAttributeClusterList(value=['1.1.1.1', '2.2.2.2']),
             bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities),
-            bgp.BGPPathAttributeAs4Path(value=[[1000000], set([1000001, 1002]),
+            bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002},
                                                [1003, 1000004]]),
             bgp.BGPPathAttributeAs4Aggregator(as_number=100040000,
                                               addr='192.0.2.99'),
@@ -199,11 +205,10 @@ class Test_bgp(unittest.TestCase):
             # 'bgp4-update',
             'bgp4-keepalive',
         ]
-        dir = '../packet_data/bgp4/'
 
         for f in files:
             print('testing %s' % f)
-            binmsg = open(dir + f, 'rb').read()
+            binmsg = open(BGP4_PACKET_DATA_DIR + f, 'rb').read()
             msg, rest = bgp.BGPMessage.parser(binmsg)
             binmsg2 = msg.serialize()
             eq_(binmsg, binmsg2)
@@ -260,7 +265,7 @@ class Test_bgp(unittest.TestCase):
         ]
         path_attributes = [
             bgp.BGPPathAttributeOrigin(value=1),
-            bgp.BGPPathAttributeAsPath(value=[[1000], set([1001, 1002]),
+            bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002},
                                               [1003, 1004]]),
             bgp.BGPPathAttributeNextHop(value='192.0.2.199'),
             bgp.BGPPathAttributeMultiExitDisc(value=2000000000),
@@ -270,7 +275,7 @@ class Test_bgp(unittest.TestCase):
                                            addr='192.0.2.99'),
             bgp.BGPPathAttributeCommunities(communities=communities),
             bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities),
-            bgp.BGPPathAttributeAs4Path(value=[[1000000], set([1000001, 1002]),
+            bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002},
                                                [1003, 1000004]]),
             bgp.BGPPathAttributeAs4Aggregator(as_number=100040000,
                                               addr='192.0.2.99'),
-- 
2.7.4


------------------------------------------------------------------------------
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to work are irked by the imposition of MDM
restrictions. Mobile Device Manager Plus allows you to control only the
apps on BYO-devices by containerizing them, leaving personal data untouched!
https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to