From 9fc033dc18f7c955560be2b740451b6c41ba52f2 Mon Sep 17 00:00:00 2001 From: Philip Trauner Date: Sun, 16 Oct 2016 23:11:27 +0200 Subject: [PATCH] Refactoring: less unneeded oo, unreachable code gone, relocated logic --- Shared/Highway.py | 49 +++++++++++++++++------------------------------ 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/Shared/Highway.py b/Shared/Highway.py index 24ba2bf..f932286 100644 --- a/Shared/Highway.py +++ b/Shared/Highway.py @@ -32,6 +32,7 @@ META_ROUTE = "meta" META_ROUTE_INDEX = 0 PACK_FORMAT = "BH" +METADATA_LENGTH = struct.calcsize(PACK_FORMAT) class ConvertFailedError(ValueError): @@ -39,12 +40,6 @@ class ConvertFailedError(ValueError): super(ValueError, self).__init__("conversion failed (invalid data type supplied)") -class Metadata: - def __init__(self, data_type, m_route): - self.data_type = REVERSE_DATA_TYPES[data_type] - self.m_route = m_route - - class Meta: def run(self, data, handler): if type(data) is dict: @@ -82,10 +77,6 @@ def create_metadata(data_type, converted_route, indexed_dict=False): def prepare_data(data): original_data_type = type(data) - if original_data_type in DATA_TYPES: - data_type = DATA_TYPES[original_data_type] - else: - data_type = DATA_TYPES[bytes] if original_data_type is str: data = data.encode() elif original_data_type in (int, float): @@ -107,12 +98,7 @@ def pack_message(data, exchange_route, def parse_metadata(message): metadata = struct.unpack(PACK_FORMAT, message[:4]) - return Metadata(metadata[0], metadata[1]) - - -def parse_message(data, data_type): - data = convert_data(data[4:], data_type) - return data + return REVERSE_DATA_TYPES[metadata[0]], metadata[1] def convert_data(data, data_type, debug=False): @@ -144,6 +130,15 @@ class Shared: def setup(self, routes, debug=False): self.routes = routes self.routes["meta"] = Meta() + self.routes = Routing.create_routes(self.routes) + self.reverse_routes = reverse_dict(self.routes) + self.exchange_routes = Routing.create_exchange_map(self.routes) + self.reverse_exchange_routes = reverse_dict(self.exchange_routes) + # Peer routes have not been received yet. As per convention the meta route + # has to exist and we need it for our first send to succeed (otherwise it + # would fail during route lookup). + self.peer_exchange_routes = {META_ROUTE_INDEX : META_ROUTE} + self.peer_reverse_exchange_routes = reverse_dict(self.peer_exchange_routes) self.debug = debug @@ -156,15 +151,6 @@ class Shared: def patched_opened(self): self.address, self.port = self.peer_address - self.routes = Routing.create_routes(self.routes, self) - self.reverse_routes = reverse_dict(self.routes) - self.exchange_routes = Routing.create_exchange_map(self.routes) - self.reverse_exchange_routes = reverse_dict(self.exchange_routes) - # Peer routes have not been received yet. As per convention the meta route - # has to exist and we need it for our first send to succeed (otherwise it - # would fail during route lookup). - self.peer_exchange_routes = {META_ROUTE_INDEX : META_ROUTE} - self.peer_reverse_exchange_routes = reverse_dict(self.peer_exchange_routes) try: self.post_opened() except AttributeError: @@ -173,21 +159,22 @@ class Shared: def patched_received_message(self, message): message = message.data - metadata = parse_metadata(message) + print(message) + data_type, m_route = parse_metadata(message) try: - route = self.exchange_routes[metadata.m_route] + route = self.exchange_routes[m_route] except KeyError: - self.send(Handler.INVALID_ROUTE, META_ROUTE) + self.send(INVALID_ROUTE, META_ROUTE) Logging.error("Received message with non-existing route '%d' from '%s:%d'" % ( - metadata.m_route, self.address, self.port)) + m_route, self.address, self.port)) return - data = parse_message(message, metadata.data_type) + data = convert_data(message[METADATA_LENGTH:], data_type) if self.debug: data_repr = str(data).replace("\n", " ") if len(data_repr) > 80: data_repr = data_repr[:80] + "..." Logging.info("Received '%s' on route '%s': %s (%s:%d)" % ( - type(data).__name__ if not metadata.data_type == INDEXED_DICT else "indexed_dict", + type(data).__name__ if not data_type == INDEXED_DICT else "indexed_dict", route, data_repr, self.address, self.port)) try: