Skip to content

Commit e149824

Browse files
authored
Merge pull request #1253 from carver/peer-f-strings
p2p string formatting with f-strings
2 parents a196416 + f7a33ea commit e149824

File tree

6 files changed

+49
-45
lines changed

6 files changed

+49
-45
lines changed

p2p/auth.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def create_auth_message(self, nonce: bytes) -> bytes:
193193

194194
def decode_auth_ack_message(self, ciphertext: bytes) -> Tuple[datatypes.PublicKey, bytes]:
195195
if len(ciphertext) < ENCRYPTED_AUTH_ACK_LEN:
196-
raise BadAckMessage("Auth ack msg too short: {}".format(len(ciphertext)))
196+
raise BadAckMessage(f"Auth ack msg too short: {len(ciphertext)}")
197197
elif len(ciphertext) == ENCRYPTED_AUTH_ACK_LEN:
198198
eph_pubkey, nonce, _ = decode_ack_plain(ciphertext, self.privkey)
199199
else:
@@ -260,7 +260,7 @@ def decode_ack_plain(
260260
"""
261261
message = ecies.decrypt(ciphertext, privkey)
262262
if len(message) != AUTH_ACK_LEN:
263-
raise BadAckMessage("Unexpected size for ack message: {}".format(len(message)))
263+
raise BadAckMessage(f"Unexpected size for ack message: {len(message)}")
264264
eph_pubkey = keys.PublicKey(message[:PUBKEY_LEN])
265265
nonce = message[PUBKEY_LEN: PUBKEY_LEN + HASH_LEN]
266266
return eph_pubkey, nonce, SUPPORTED_RLPX_VERSION
@@ -286,7 +286,7 @@ def decode_auth_plain(ciphertext: bytes, privkey: datatypes.PrivateKey) -> Tuple
286286
"""Decode legacy pre-EIP-8 auth message format"""
287287
message = ecies.decrypt(ciphertext, privkey)
288288
if len(message) != AUTH_MSG_LEN:
289-
raise BadAckMessage("Unexpected size for auth message: {}".format(len(message)))
289+
raise BadAckMessage(f"Unexpected size for auth message: {len(message)}")
290290
signature = keys.Signature(signature_bytes=message[:SIGNATURE_LEN])
291291
pubkey_start = SIGNATURE_LEN + HASH_LEN
292292
pubkey = keys.PublicKey(message[pubkey_start: pubkey_start + PUBKEY_LEN])
@@ -320,7 +320,7 @@ def decode_authentication(ciphertext: bytes,
320320
Returns the initiator's ephemeral pubkey, nonce, and pubkey.
321321
"""
322322
if len(ciphertext) < ENCRYPTED_AUTH_MSG_LEN:
323-
raise DecryptionError("Auth msg too short: {}".format(len(ciphertext)))
323+
raise DecryptionError(f"Auth msg too short: {len(ciphertext)}")
324324
elif len(ciphertext) == ENCRYPTED_AUTH_MSG_LEN:
325325
sig, initiator_pubkey, initiator_nonce, _ = decode_auth_plain(
326326
ciphertext, privkey)

p2p/discovery.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def _get_handler(self, cmd: DiscoveryCommand
349349
elif cmd == CMD_NEIGHBOURS:
350350
return self.recv_neighbours
351351
else:
352-
raise ValueError("Unknwon command: {}".format(cmd))
352+
raise ValueError(f"Unknown command: {cmd}")
353353

354354
def _get_max_neighbours_per_packet(self) -> int:
355355
if self._max_neighbours_per_packet_cache is not None:
@@ -593,7 +593,7 @@ def _get_handler_v5(self, cmd: DiscoveryCommand
593593
elif cmd == CMD_TOPIC_NODES:
594594
return self.recv_topic_nodes
595595
else:
596-
raise ValueError("Unknwon command: {}".format(cmd))
596+
raise ValueError(f"Unknown command: {cmd}")
597597

598598
def receive_v5(self, address: kademlia.Address, message: bytes) -> None:
599599
try:
@@ -933,8 +933,7 @@ def acquire(self,
933933
if not self.locked(key):
934934
del self[key]
935935
else:
936-
raise AlreadyWaitingDiscoveryResponse(
937-
"Already waiting on callback for: {0}".format(key))
936+
raise AlreadyWaitingDiscoveryResponse(f"Already waiting on callback for: {key}")
938937

939938
lock = CallbackLock(callback)
940939
self[key] = lock

p2p/kademlia.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def __len__(self) -> int:
205205

206206
def __lt__(self, other: 'KBucket') -> bool:
207207
if not isinstance(other, self.__class__):
208-
raise TypeError("Cannot compare KBucket with type {}.".format(other.__class__))
208+
raise TypeError(f"Cannot compare KBucket with type {other.__class__}")
209209
return self.end < other.start
210210

211211

@@ -312,7 +312,7 @@ def binary_get_bucket_for_node(buckets: List[KBucket], node: Node) -> KBucket:
312312
assert bucket.start <= node.id <= bucket.end
313313
return bucket
314314
except (IndexError, AssertionError):
315-
raise ValueError("No bucket found for node with id {}".format(node.id))
315+
raise ValueError(f"No bucket found for node with id {node.id}")
316316

317317

318318
def _compute_shared_prefix_bits(nodes: List[Node]) -> int:

p2p/p2p_proto.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def decode(self, data: bytes) -> _DecodedMsgType:
6969
raw_decoded = cast(Dict[str, int], super().decode(data))
7070
except rlp.exceptions.ListDeserializationError:
7171
self.logger.warn("Malformed Disconnect message: %s", data)
72-
raise MalformedMessage("Malformed Disconnect message: {0}".format(data))
72+
raise MalformedMessage(f"Malformed Disconnect message: {data}")
7373
return assoc(raw_decoded, 'reason_name', self.get_reason_name(raw_decoded['reason']))
7474

7575

p2p/peer.py

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,8 @@ async def do_sub_proto_handshake(self) -> None:
256256
msg = cast(Dict[str, Any], msg)
257257
# Peers sometimes send a disconnect msg before they send the sub-proto handshake.
258258
raise HandshakeFailure(
259-
"{} disconnected before completing sub-proto handshake: {}".format(
260-
self, msg['reason_name']))
259+
f"{self} disconnected before completing sub-proto handshake: {msg['reason_name']}"
260+
)
261261
await self.process_sub_proto_handshake(cmd, msg)
262262
self.logger.debug("Finished %s handshake with %s", self.sub_proto, self.remote)
263263

@@ -278,8 +278,9 @@ async def do_p2p_handshake(self) -> None:
278278
if isinstance(cmd, Disconnect):
279279
msg = cast(Dict[str, Any], msg)
280280
# Peers sometimes send a disconnect msg before they send the initial P2P handshake.
281-
raise HandshakeFailure("{} disconnected before completing handshake: {}".format(
282-
self, msg['reason_name']))
281+
raise HandshakeFailure(
282+
f"{self} disconnected before completing sub-proto handshake: {msg['reason_name']}"
283+
)
283284
await self.process_p2p_handshake(cmd, msg)
284285

285286
@property
@@ -313,7 +314,7 @@ def get_protocol_command_for(self, msg: bytes) -> protocol.Command:
313314
elif cmd_id < self.sub_proto.cmd_id_offset + self.sub_proto.cmd_length:
314315
return self.sub_proto.cmd_by_id[cmd_id]
315316
else:
316-
raise UnknownProtocolCommand("No protocol found for cmd_id {}".format(cmd_id))
317+
raise UnknownProtocolCommand(f"No protocol found for cmd_id {cmd_id}")
317318

318319
async def read(self, n: int) -> bytes:
319320
self.logger.trace("Waiting for %s bytes from %s", n, self.remote)
@@ -405,7 +406,7 @@ def handle_p2p_msg(self, cmd: protocol.Command, msg: protocol.PayloadType) -> No
405406
# update the last time we heard from a peer in our DB (which doesn't exist yet).
406407
pass
407408
else:
408-
raise UnexpectedMessage("Unexpected msg: {} ({})".format(cmd, msg))
409+
raise UnexpectedMessage(f"Unexpected msg: {cmd} ({msg})")
409410

410411
def handle_sub_proto_msg(self, cmd: protocol.Command, msg: protocol.PayloadType) -> None:
411412
cmd_type = type(cmd)
@@ -436,22 +437,23 @@ async def process_p2p_handshake(
436437
msg = cast(Dict[str, Any], msg)
437438
if not isinstance(cmd, Hello):
438439
await self.disconnect(DisconnectReason.bad_protocol)
439-
raise HandshakeFailure("Expected a Hello msg, got {}, disconnecting".format(cmd))
440+
raise HandshakeFailure(f"Expected a Hello msg, got {cmd}, disconnecting")
440441
remote_capabilities = msg['capabilities']
441442
try:
442443
self.sub_proto = self.select_sub_protocol(remote_capabilities)
443444
except NoMatchingPeerCapabilities:
444445
await self.disconnect(DisconnectReason.useless_peer)
445446
raise HandshakeFailure(
446-
"No matching capabilities between us ({}) and {} ({}), disconnecting".format(
447-
self.capabilities, self.remote, remote_capabilities))
447+
f"No matching capabilities between us ({self.capabilities}) and {self.remote} "
448+
f"({remote_capabilities}), disconnecting"
449+
)
448450
self.logger.debug(
449451
"Finished P2P handshake with %s, using sub-protocol %s",
450452
self.remote, self.sub_proto)
451453

452454
def encrypt(self, header: bytes, frame: bytes) -> bytes:
453455
if len(header) != HEADER_LEN:
454-
raise ValueError("Unexpected header length: {}".format(len(header)))
456+
raise ValueError(f"Unexpected header length: {len(header)}")
455457

456458
header_ciphertext = self.aes_enc.update(header)
457459
mac_secret = self.egress_mac.digest()[:HEADER_LEN]
@@ -470,7 +472,9 @@ def encrypt(self, header: bytes, frame: bytes) -> bytes:
470472

471473
def decrypt_header(self, data: bytes) -> bytes:
472474
if len(data) != HEADER_LEN + MAC_LEN:
473-
raise ValueError("Unexpected header length: {}".format(len(data)))
475+
raise ValueError(
476+
f"Unexpected header length: {len(data)}, expected {HEADER_LEN} + {MAC_LEN}"
477+
)
474478

475479
header_ciphertext = data[:HEADER_LEN]
476480
header_mac = data[HEADER_LEN:]
@@ -479,15 +483,17 @@ def decrypt_header(self, data: bytes) -> bytes:
479483
self.ingress_mac.update(sxor(aes, header_ciphertext))
480484
expected_header_mac = self.ingress_mac.digest()[:HEADER_LEN]
481485
if not bytes_eq(expected_header_mac, header_mac):
482-
raise DecryptionError('Invalid header mac: expected {}, got {}'.format(
483-
expected_header_mac, header_mac))
486+
raise DecryptionError(
487+
f'Invalid header mac: expected {expected_header_mac}, got {header_mac}'
488+
)
484489
return self.aes_dec.update(header_ciphertext)
485490

486491
def decrypt_body(self, data: bytes, body_size: int) -> bytes:
487492
read_size = roundup_16(body_size)
488493
if len(data) < read_size + MAC_LEN:
489-
raise ValueError('Insufficient body length; Got {}, wanted {}'.format(
490-
len(data), (read_size + MAC_LEN)))
494+
raise ValueError(
495+
f'Insufficient body length; Got {len(data)}, wanted {read_size} + {MAC_LEN}'
496+
)
491497

492498
frame_ciphertext = data[:read_size]
493499
frame_mac = data[read_size:read_size + MAC_LEN]
@@ -497,8 +503,9 @@ def decrypt_body(self, data: bytes, body_size: int) -> bytes:
497503
self.ingress_mac.update(sxor(self.mac_enc(fmac_seed), fmac_seed))
498504
expected_frame_mac = self.ingress_mac.digest()[:MAC_LEN]
499505
if not bytes_eq(expected_frame_mac, frame_mac):
500-
raise DecryptionError('Invalid frame mac: expected {}, got {}'.format(
501-
expected_frame_mac, frame_mac))
506+
raise DecryptionError(
507+
f'Invalid frame mac: expected {expected_frame_mac}, got {frame_mac}'
508+
)
502509
return self.aes_dec.update(frame_ciphertext)[:body_size]
503510

504511
def get_frame_size(self, header: bytes) -> int:
@@ -526,7 +533,8 @@ async def disconnect(self, reason: DisconnectReason) -> None:
526533
"""
527534
if not isinstance(reason, DisconnectReason):
528535
raise ValueError(
529-
"Reason must be an item of DisconnectReason, got {}".format(reason))
536+
f"Reason must be an item of DisconnectReason, got {reason}"
537+
)
530538
self.logger.debug("Disconnecting from remote peer; reason: %s", reason.name)
531539
self.base_protocol.send_disconnect(reason.value)
532540
self.close()
@@ -555,10 +563,10 @@ def select_sub_protocol(self, remote_capabilities: List[Tuple[bytes, int]]
555563
raise NoMatchingPeerCapabilities()
556564

557565
def __str__(self) -> str:
558-
return "{} {}".format(self.__class__.__name__, self.remote)
566+
return f"{self.__class__.__name__} {self.remote}"
559567

560568
def __repr__(self) -> str:
561-
return "{} {}".format(self.__class__.__name__, repr(self.remote))
569+
return f"{self.__class__.__name__} {self.remote!r}"
562570

563571
def __hash__(self) -> int:
564572
return hash(self.remote)
@@ -867,24 +875,24 @@ async def ensure_same_side_on_dao_fork(
867875

868876
except (TimeoutError, PeerConnectionLost) as err:
869877
raise DAOForkCheckFailure(
870-
"Timed out waiting for DAO fork header from {}: {}".format(peer, err)
878+
f"Timed out waiting for DAO fork header from {peer}: {err}"
871879
) from err
872880
except ValidationError as err:
873881
raise DAOForkCheckFailure(
874-
"Invalid header response during DAO fork check: {}".format(err)
882+
f"Invalid header response during DAO fork check: {err}"
875883
) from err
876884

877885
if len(headers) != 2:
878886
raise DAOForkCheckFailure(
879-
"Peer %s failed to return DAO fork check headers".format(peer)
887+
f"Peer {peer} failed to return DAO fork check headers"
880888
)
881889
else:
882890
parent, header = headers
883891

884892
try:
885893
vm_class.validate_header(header, parent, check_seal=True)
886894
except ValidationError as err:
887-
raise DAOForkCheckFailure("Peer failed DAO fork check validation: {}".format(err))
895+
raise DAOForkCheckFailure(f"Peer failed DAO fork check validation: {err}")
888896

889897
def _peer_finished(self, peer: BaseService) -> None:
890898
"""Remove the given peer from our list of connected nodes.

p2p/protocol.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,15 @@ def __init__(self, cmd_id_offset: int) -> None:
5555
@property
5656
def logger(self) -> logging.Logger:
5757
if self._logger is None:
58-
self._logger = logging.getLogger(
59-
"p2p.protocol.{0}".format(self.__class__.__name__)
60-
)
58+
self._logger = logging.getLogger(f"p2p.protocol.{type(self).__name__}")
6159
return self._logger
6260

6361
@property
6462
def is_base_protocol(self) -> bool:
6563
return self.cmd_id_offset == 0
6664

6765
def __str__(self) -> str:
68-
return "{} (cmd_id={})".format(self.__class__.__name__, self.cmd_id)
66+
return f"{type(self).__name__} (cmd_id={self.cmd_id})"
6967

7068
def encode_payload(self, data: Union[PayloadType, sedes.CountableList]) -> bytes:
7169
if isinstance(data, dict): # convert dict to ordered list
@@ -74,8 +72,9 @@ def encode_payload(self, data: Union[PayloadType, sedes.CountableList]) -> bytes
7472
expected_keys = sorted(name for name, _ in self.structure)
7573
data_keys = sorted(data.keys())
7674
if data_keys != expected_keys:
77-
raise ValueError("Keys in data dict ({}) do not match expected keys ({})".format(
78-
data_keys, expected_keys))
75+
raise ValueError(
76+
f"Keys in data dict ({data_keys}) do not match expected keys ({expected_keys})"
77+
)
7978
data = [data[name] for name, _ in self.structure]
8079
if isinstance(self.structure, sedes.CountableList):
8180
encoder = self.structure
@@ -92,9 +91,7 @@ def decode_payload(self, rlp_data: bytes) -> PayloadType:
9291
try:
9392
data = rlp.decode(rlp_data, sedes=decoder, recursive_cache=True)
9493
except rlp.DecodingError as err:
95-
raise MalformedMessage(
96-
"Malformed {} message: {!r}".format(type(self).__name__, err)
97-
) from err
94+
raise MalformedMessage(f"Malformed {type(self).__name__} message: {err!r}") from err
9895

9996
if isinstance(self.structure, sedes.CountableList):
10097
return data
@@ -107,7 +104,7 @@ def decode_payload(self, rlp_data: bytes) -> PayloadType:
107104
def decode(self, data: bytes) -> PayloadType:
108105
packet_type = get_devp2p_cmd_id(data)
109106
if packet_type != self.cmd_id:
110-
raise MalformedMessage("Wrong packet type: {}".format(packet_type))
107+
raise MalformedMessage(f"Wrong packet type: {packet_type}, expected {self.cmd_id}")
111108
return self.decode_payload(data[1:])
112109

113110
def encode(self, data: PayloadType) -> Tuple[bytes, bytes]:

0 commit comments

Comments
 (0)