[style] apply google python style guide (#4501)

This commit applies and enforces Google's python style for tests.
This commit is contained in:
Yakun Xu
2020-02-04 10:27:50 -08:00
committed by GitHub
parent 8368d440dd
commit 33808ebfba
501 changed files with 6674 additions and 5515 deletions
+93 -154
View File
@@ -116,7 +116,16 @@ class LowpanIPHC:
def __repr__(self):
return "LowpanIPHC(tf={}, nh={}, hlim={}, cid={}, sac={}, sam={}, m={}, dac={}, dam={})".format(
self.tf, self.nh, self.hlim, self.cid, self.sac, self.sam, self.m, self.dac, self.dam, )
self.tf,
self.nh,
self.hlim,
self.cid,
self.sac,
self.sam,
self.m,
self.dac,
self.dam,
)
class LowpanNHC:
@@ -201,7 +210,6 @@ class LowpanUDPHC:
class LowpanHopByHopFactory:
""" Factory that produces HopByHop extension header. """
def __init__(self, hop_by_hop_options_factory):
@@ -213,8 +221,7 @@ class LowpanHopByHopFactory:
ext_header_data = data.read(ext_header_length)
options = self._hop_by_hop_options_factory.parse(
io.BytesIO(ext_header_data), message_info
)
io.BytesIO(ext_header_data), message_info)
ext_header = ipv6.HopByHop(next_header, options)
@@ -224,7 +231,6 @@ class LowpanHopByHopFactory:
class LowpanExtensionHeadersFactory:
""" Factory that produces extension headers. """
NHC_NH_INLINE = 0
@@ -232,8 +238,7 @@ class LowpanExtensionHeadersFactory:
def __init__(self, ext_headers_factories):
self._ext_headers_factories = (
ext_headers_factories if ext_headers_factories is not None else {}
)
ext_headers_factories if ext_headers_factories is not None else {})
def _decompress_nh(self, hc, data):
if hc.nh == self.NHC_NH_INLINE:
@@ -248,10 +253,8 @@ class LowpanExtensionHeadersFactory:
except BaseException:
raise RuntimeError(
"Could not find an extension header factory for the EID type: {}".format(
eid
)
)
"Could not find an extension header factory for the EID type: {}"
.format(eid))
def parse(self, data, message_info):
nhc = LowpanNHC.from_bytes(bytearray(data.read(1)))
@@ -264,7 +267,6 @@ class LowpanExtensionHeadersFactory:
class LowpanUdpHeaderFactory:
""" Factory producing UDP header. """
UDP_HC_C_INLINE = 0
@@ -317,6 +319,7 @@ class LowpanUdpHeaderFactory:
class Context:
def __init__(self, prefix, prefix_length=None):
if isinstance(prefix, str):
prefix, prefix_length = prefix.split("/")
@@ -329,19 +332,16 @@ class Context:
elif isinstance(prefix, bytearray):
self._prefix = prefix
self._prefix_length = (
prefix_length
if prefix_length is not None
else len(self._prefix) * 8
)
self._prefix_length = (prefix_length if prefix_length is not None
else len(self._prefix) * 8)
@property
def prefix(self):
return self._prefix[: self.prefix_length_all_bytes]
return self._prefix[:self.prefix_length_all_bytes]
@property
def prefix_full_bytes(self):
return self._prefix[: self.prefix_length_full_bytes]
return self._prefix[:self.prefix_length_full_bytes]
@property
def prefix_length(self):
@@ -364,16 +364,13 @@ class Context:
class ContextManager(dict):
""" Class representing Context Manager. """
def __check_index(self, index):
if index < 0 or index > 15:
raise IndexError(
"Invalid index: {}. Valid index is in range [0, 15]".format(
index
)
)
index))
def __check_type(self, value):
if not isinstance(value, Context):
@@ -392,12 +389,10 @@ class ContextManager(dict):
class LowpanIpv6HeaderFactory:
""" Factory that produces IPv6 header. """
IPV6_LINKLOCAL_PREFIX = bytearray(
[0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
)
[0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
SHORT_ADDR_PADDING_BYTES = bytearray([0x00, 0x00, 0x00, 0xff, 0xfe, 0x00])
@@ -551,11 +546,8 @@ class LowpanIpv6HeaderFactory:
return self.IPV6_LINKLOCAL_PREFIX + bytearray(data.read(8))
elif iphc.sam == self.IPHC_SAM_16B:
return (
self.IPV6_LINKLOCAL_PREFIX
+ self.SHORT_ADDR_PADDING_BYTES
+ bytearray(data.read(2))
)
return (self.IPV6_LINKLOCAL_PREFIX + self.SHORT_ADDR_PADDING_BYTES +
bytearray(data.read(2)))
elif iphc.sam == self.IPHC_SAM_ELIDED:
return self.IPV6_LINKLOCAL_PREFIX + src_mac_addr.convert_to_iid()
@@ -596,11 +588,9 @@ class LowpanIpv6HeaderFactory:
address_overlapping_byte = address_bytes[-required_bytes]
overlapping_byte = prefix_overlapping_byte & ~(
0xff >> prefix_length_rest_bits
)
0xff >> prefix_length_rest_bits)
overlapping_byte |= address_overlapping_byte & (
0xff >> prefix_length_rest_bits
)
0xff >> prefix_length_rest_bits)
src_addr += bytearray([overlapping_byte])
required_bytes -= 1
@@ -612,11 +602,8 @@ class LowpanIpv6HeaderFactory:
required_bytes -= prefix_length_all_bytes
required_bytes -= len(address_bytes)
src_addr = (
prefix[:prefix_length_all_bytes]
+ bytearray([0x00] * required_bytes)
+ address_bytes
)
src_addr = (prefix[:prefix_length_all_bytes] +
bytearray([0x00] * required_bytes) + address_bytes)
return src_addr
@@ -636,8 +623,7 @@ class LowpanIpv6HeaderFactory:
elif iphc.sam == self.IPHC_SAM_16B:
context = self._context_manager[sci]
address_bytes = self.SHORT_ADDR_PADDING_BYTES + bytearray(
data.read(2)
)
data.read(2))
return self._merge_prefix_with_address(
prefix=context.prefix,
@@ -656,14 +642,11 @@ class LowpanIpv6HeaderFactory:
def _decompress_src_addr(self, iphc, src_mac_addr, sci, data):
if iphc.sac == self.IPHC_SAC_STATELESS:
return self._decompress_src_addr_stateless(
iphc, src_mac_addr, data
)
return self._decompress_src_addr_stateless(iphc, src_mac_addr, data)
elif iphc.sac == self.IPHC_SAC_STATEFUL:
return self._decompress_src_addr_stateful(
iphc, src_mac_addr, sci, data
)
return self._decompress_src_addr_stateful(iphc, src_mac_addr, sci,
data)
def _decompress_unicast_dst_addr_stateless(self, iphc, dst_mac_addr, data):
if iphc.dam == self.IPHC_DAM_128B:
@@ -673,18 +656,14 @@ class LowpanIpv6HeaderFactory:
return self.IPV6_LINKLOCAL_PREFIX + bytearray(data.read(8))
elif iphc.dam == self.IPHC_DAM_16B:
return (
self.IPV6_LINKLOCAL_PREFIX
+ self.SHORT_ADDR_PADDING_BYTES
+ bytearray(data.read(2))
)
return (self.IPV6_LINKLOCAL_PREFIX + self.SHORT_ADDR_PADDING_BYTES +
bytearray(data.read(2)))
elif iphc.dam == self.IPHC_DAM_ELIDED:
return self.IPV6_LINKLOCAL_PREFIX + dst_mac_addr.convert_to_iid()
def _decompress_unicast_dst_addr_stateful(
self, iphc, dst_mac_addr, dci, data
):
def _decompress_unicast_dst_addr_stateful(self, iphc, dst_mac_addr, dci,
data):
if iphc.dam == self.IPHC_DAM_128B:
raise RuntimeError("Reserved")
@@ -700,8 +679,7 @@ class LowpanIpv6HeaderFactory:
elif iphc.dam == self.IPHC_DAM_16B:
context = self._context_manager[dci]
address_bytes = self.SHORT_ADDR_PADDING_BYTES + bytearray(
data.read(2)
)
data.read(2))
return self._merge_prefix_with_address(
prefix=context.prefix,
@@ -721,13 +699,11 @@ class LowpanIpv6HeaderFactory:
def _decompress_unicast_dst_addr(self, iphc, dst_mac_addr, dci, data):
if iphc.dac == self.IPHC_DAC_STATELESS:
return self._decompress_unicast_dst_addr_stateless(
iphc, dst_mac_addr, data
)
iphc, dst_mac_addr, data)
elif iphc.dac == self.IPHC_DAC_STATEFUL:
return self._decompress_unicast_dst_addr_stateful(
iphc, dst_mac_addr, dci, data
)
iphc, dst_mac_addr, dci, data)
def _decompress_multicast_dst_addr_stateless(self, iphc, data):
if iphc.dam == self.IPHC_DAM_128B:
@@ -735,24 +711,17 @@ class LowpanIpv6HeaderFactory:
elif iphc.dam == self.IPHC_DAM_48B:
addr48b = bytearray(data.read(6))
return (
bytearray([0xff, addr48b[0]])
+ bytearray([0x00] * 9)
+ addr48b[1:]
)
return (bytearray([0xff, addr48b[0]]) + bytearray([0x00] * 9) +
addr48b[1:])
elif iphc.dam == self.IPHC_DAM_32B:
addr32b = bytearray(data.read(4))
return (
bytearray([0xff, addr32b[0]])
+ bytearray([0x00] * 11)
+ addr32b[1:]
)
return (bytearray([0xff, addr32b[0]]) + bytearray([0x00] * 11) +
addr32b[1:])
elif iphc.dam == self.IPHC_DAM_8B:
return (
bytearray([0xff, 0x02]) + bytearray([0x00] * 13) + data.read(1)
)
return (bytearray([0xff, 0x02]) + bytearray([0x00] * 13) +
data.read(1))
def _decompress_multicast_dst_addr_stateful(self, iphc, dci, data):
if iphc.dam == self.IPHC_M_DAM_00:
@@ -770,13 +739,8 @@ class LowpanIpv6HeaderFactory:
if missing_bytes > 0:
prefix += bytearray([0x00] * missing_bytes)
return (
bytearray([0xff])
+ addr48b[:2]
+ bytearray([prefix_length])
+ prefix
+ addr48b[2:]
)
return (bytearray([0xff]) + addr48b[:2] +
bytearray([prefix_length]) + prefix + addr48b[2:])
elif iphc.dam == self.IPHC_M_DAM_01:
raise RuntimeError("Reserved")
@@ -792,15 +756,12 @@ class LowpanIpv6HeaderFactory:
return self._decompress_multicast_dst_addr_stateless(iphc, data)
elif iphc.dac == self.IPHC_DAC_STATEFUL:
return self._decompress_multicast_dst_addr_stateful(
iphc, dci, data
)
return self._decompress_multicast_dst_addr_stateful(iphc, dci, data)
def _decompress_dst_addr(self, iphc, dst_mac_addr, dci, data):
if iphc.m == self.IPHC_M_NO:
return self._decompress_unicast_dst_addr(
iphc, dst_mac_addr, dci, data
)
return self._decompress_unicast_dst_addr(iphc, dst_mac_addr, dci,
data)
elif iphc.m == self.IPHC_M_YES:
return self._decompress_multicast_dst_addr(iphc, dci, data)
@@ -819,17 +780,15 @@ class LowpanIpv6HeaderFactory:
hop_limit = self._decompress_hlim(iphc, data)
src_address = self._decompress_src_addr(
iphc, message_info.source_mac_address, sci, data
)
src_address = self._decompress_src_addr(iphc,
message_info.source_mac_address,
sci, data)
dst_address = self._decompress_dst_addr(
iphc, message_info.destination_mac_address, dci, data
)
iphc, message_info.destination_mac_address, dci, data)
header = ipv6.IPv6Header(
src_address, dst_address, traffic_class, flow_label, hop_limit
)
header = ipv6.IPv6Header(src_address, dst_address, traffic_class,
flow_label, hop_limit)
header.next_header = next_header
@@ -837,7 +796,6 @@ class LowpanIpv6HeaderFactory:
class LowpanDecompressor:
""" Class decompressing 6LoWPAN packets. """
def __init__(
@@ -848,8 +806,7 @@ class LowpanDecompressor:
):
self._lowpan_ip_header_factory = lowpan_ip_header_factory
self._lowpan_extension_headers_factory = (
lowpan_extension_headers_factory
)
lowpan_extension_headers_factory)
self._lowpan_udp_header_factory = lowpan_udp_header_factory
def _is_ipv6_extension_header(self, header_first_byte):
@@ -897,8 +854,7 @@ class LowpanDecompressor:
elif self._is_udp_header(header_first_byte):
udp_header = self._lowpan_udp_header_factory.parse(
data, message_info
)
data, message_info)
# Update next header field in the previous header
previous_header.next_header = udp_header.type
@@ -910,12 +866,10 @@ class LowpanDecompressor:
class LowpanMeshHeader(object):
""" Class representing 6LoWPAN mesh header (RFC 4944 5.2). """
def __init__(
self, hops_left, originator_address, final_destination_address
):
def __init__(self, hops_left, originator_address,
final_destination_address):
self._hops_left = hops_left
self._originator_address = originator_address
self._final_destination_address = final_destination_address
@@ -934,6 +888,7 @@ class LowpanMeshHeader(object):
class LowpanMeshHeaderFactory:
def _parse_address(self, data, is_short):
if is_short:
return common.MacAddress.from_rloc16(bytearray(data.read(2)))
@@ -951,19 +906,17 @@ class LowpanMeshHeaderFactory:
else:
hops_left = ord(data.read(1))
originator_address = self._parse_address(
data, is_short_originator_address
)
originator_address = self._parse_address(data,
is_short_originator_address)
final_destination_address = self._parse_address(
data, is_short_final_destination_address
)
data, is_short_final_destination_address)
return LowpanMeshHeader(
hops_left, originator_address, final_destination_address
)
return LowpanMeshHeader(hops_left, originator_address,
final_destination_address)
class LowpanFragmentationHeader(object):
def __init__(self, datagram_size, datagram_tag, datagram_offset=0):
self._datagram_size = datagram_size
self._datagram_tag = datagram_tag
@@ -1001,6 +954,7 @@ class LowpanFragmentationHeader(object):
class LowpanFragmentsBuffer(object):
def __init__(self, buffer_size):
self._buffer = [None] * buffer_size
self._position = 0
@@ -1034,8 +988,7 @@ class LowpanFragmentsBuffer(object):
def read(self):
if not self.whole_packet_received():
raise ValueError(
"Only a part of the packet has been stored in the buffer."
)
"Only a part of the packet has been stored in the buffer.")
return bytearray(self._buffer)
@@ -1044,33 +997,31 @@ class LowpanFragmentsBuffer(object):
class LowpanFragmentsBuffersManager(object):
def __init__(self):
self._fragments_buffers = {}
def _create_key(self, message_info, datagram_tag):
key = (
bytes(message_info.source_mac_address.mac_address)
+ bytes(message_info.destination_mac_address.mac_address)
+ bytes(datagram_tag)
)
key = (bytes(message_info.source_mac_address.mac_address) +
bytes(message_info.destination_mac_address.mac_address) +
bytes(datagram_tag))
return key
def _allocate_fragments_buffer(self, key, datagram_size):
if datagram_size is None or datagram_size < 0:
raise ValueError(
"Could not allocate fragments buffer. Invalid datagram size: {}".format(
datagram_size
)
)
"Could not allocate fragments buffer. Invalid datagram size: {}"
.format(datagram_size))
fragments_buffer = LowpanFragmentsBuffer(datagram_size)
self._fragments_buffers[key] = fragments_buffer
return fragments_buffer
def get_fragments_buffer(
self, message_info, datagram_tag, datagram_size=None
):
def get_fragments_buffer(self,
message_info,
datagram_tag,
datagram_size=None):
key = self._create_key(message_info, datagram_tag)
if key not in self._fragments_buffers:
@@ -1085,6 +1036,7 @@ class LowpanFragmentsBuffersManager(object):
class LowpanParser(object):
def __init__(
self,
lowpan_mesh_header_factory,
@@ -1095,8 +1047,7 @@ class LowpanParser(object):
self._lowpan_mesh_header_factory = lowpan_mesh_header_factory
self._lowpan_decompressor = lowpan_decompressor
self._lowpan_fragments_buffers_manager = (
lowpan_fragements_buffers_manager
)
lowpan_fragements_buffers_manager)
self._ipv6_packet_factory = ipv6_packet_factory
def _peek_n_bytes(self, data, n):
@@ -1129,15 +1080,13 @@ class LowpanParser(object):
)
ipv6_header, extension_headers, udp_header = self._decompress_iphc(
data, message_info
)
data, message_info)
uncompressed_data = data.read()
# Update payload lengths
ipv6_header.payload_length = fragmentation_header.datagram_size - len(
ipv6_header
)
ipv6_header)
fragments_buffer.seek(0)
fragments_buffer.write(ipv6_header.to_bytes())
@@ -1154,8 +1103,7 @@ class LowpanParser(object):
data = io.BytesIO(fragments_buffer.read())
self._lowpan_fragments_buffers_manager.free_fragments_buffer(
message_info, fragmentation_header.datagram_tag
)
message_info, fragmentation_header.datagram_tag)
return self._ipv6_packet_factory.parse(data, message_info)
@@ -1179,8 +1127,7 @@ class LowpanParser(object):
data = io.BytesIO(fragments_buffer.read())
self._lowpan_fragments_buffers_manager.free_fragments_buffer(
message_info, fragmentation_header.datagram_tag
)
message_info, fragmentation_header.datagram_tag)
return self._ipv6_packet_factory.parse(data, message_info)
@@ -1188,8 +1135,7 @@ class LowpanParser(object):
def _handle_iphc_header(self, data, message_info):
ipv6_header, extension_headers, udp_header = self._decompress_iphc(
data, message_info
)
data, message_info)
uncompressed_data = data.read()
@@ -1209,9 +1155,8 @@ class LowpanParser(object):
decompressed_data = ipv6_header.to_bytes() + decompressed_data
return self._ipv6_packet_factory.parse(
io.BytesIO(decompressed_data), message_info
)
return self._ipv6_packet_factory.parse(io.BytesIO(decompressed_data),
message_info)
def set_lowpan_context(self, cid, prefix):
self._lowpan_decompressor.set_lowpan_context(cid, prefix)
@@ -1223,30 +1168,24 @@ class LowpanParser(object):
if self._is_mesh_header(first_byte):
mesh_header = self._lowpan_mesh_header_factory.parse(
data, message_info
)
data, message_info)
message_info.source_mac_address = (
mesh_header.originator_address
)
mesh_header.originator_address)
message_info.destination_mac_address = (
mesh_header.final_destination_address
)
mesh_header.final_destination_address)
elif self._is_first_fragmentation_header(first_byte):
return self._handle_first_fragmentation_header(
data, message_info
)
data, message_info)
elif self._is_subsequent_fragmentation_header(first_byte):
return self._handle_subsequent_fragmentation_header(
data, message_info
)
data, message_info)
elif self._is_iphc(first_byte):
return self._handle_iphc_header(data, message_info)
else:
raise RuntimeError(
"Unsupported header type: 0x{:02x}".format(first_byte)
)
"Unsupported header type: 0x{:02x}".format(first_byte))