Improved error handling and error reporting

This commit is contained in:
Philip Trauner 2016-09-25 20:46:06 +02:00
parent 2919a7e64e
commit 9596fa2815

View file

@ -50,17 +50,27 @@ class Meta:
def run(self, data, handler): def run(self, data, handler):
if type(data) is dict: if type(data) is dict:
handler.peer_exchange_routes = data handler.peer_exchange_routes = data
Logging.info("Received peer exchange routes: %s" % str(data)) Logging.success("Received peer exchange routes: %s" % str(data))
handler.peer_reverse_exchange_routes = reverse_dict(handler.peer_exchange_routes) handler.peer_reverse_exchange_routes = reverse_dict(handler.peer_exchange_routes)
if issubclass(handler.__class__, Client): if issubclass(handler.__class__, Client):
handler.send(handler.exchange_routes, META_ROUTE, indexed_dict=True) handler.send(handler.exchange_routes, META_ROUTE, indexed_dict=True)
Routing.launch_routes(handler.routes, handler)
try: try:
handler.ready() handler.ready()
except AttributeError: except AttributeError:
Logging.warning("Consider to add a ready method to your handler. " Logging.warning("Consider to add a ready method to your handler. "
"Without one, it's pretty much useless.") "Without one, it's pretty much useless.")
if handler.debug:
Logging.info("Launching routes.")
Routing.launch_routes(handler.routes, handler)
if type(data) is int:
if data == 1:
Logging.error("Last route was invalid.")
elif data == 2:
Logging.error("Last metadata layout was invalid.")
elif data == 3:
Logging.error("Last data type was invalid.")
else:
Logging.error("Unknown error code.")
def create_metadata(data_type, converted_route, indexed_dict=False): def create_metadata(data_type, converted_route, indexed_dict=False):
@ -146,11 +156,12 @@ class Shared:
def patched_opened(self): def patched_opened(self):
self.address, self.port = self.peer_address self.address, self.port = self.peer_address
self.routes = Routing.create_routes(self.routes, self) 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.exchange_routes = Routing.create_exchange_map(self.routes)
self.reverse_exchange_routes = reverse_dict(self.exchange_routes) self.reverse_exchange_routes = reverse_dict(self.exchange_routes)
# Peer routes have not been received yet. As per convention the meta route # 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 # has to exist and we need it for our first send to succeed (otherwise it
# would fail during route lookup # would fail during route lookup).
self.peer_exchange_routes = {-1 : META_ROUTE} self.peer_exchange_routes = {-1 : META_ROUTE}
self.peer_reverse_exchange_routes = reverse_dict(self.peer_exchange_routes) self.peer_reverse_exchange_routes = reverse_dict(self.peer_exchange_routes)
try: try:
@ -178,13 +189,21 @@ class Shared:
type(data).__name__ if not metadata.data_type == INDEXED_DICT else "indexed_dict", type(data).__name__ if not metadata.data_type == INDEXED_DICT else "indexed_dict",
route, data_repr, self.address, route, data_repr, self.address,
self.port)) self.port))
try:
self.routes[route].run(data, self) self.routes[route].run(data, self)
except KeyError:
Logging.warning("'%s' does not exist." % route)
def patched_send(self, data, route, indexed_dict=False): def patched_send(self, data, route, indexed_dict=False):
self.raw_send(pack_message(data, self.peer_reverse_exchange_routes[route], try:
self.raw_send(pack_message(data,
self.peer_reverse_exchange_routes[route],
self.compression_level, debug=self.debug, self.compression_level, debug=self.debug,
indexed_dict=indexed_dict), binary=True) indexed_dict=indexed_dict), binary=True)
except KeyError:
Logging.error("'%s' is not a valid peer route." % route)
else:
if self.debug: if self.debug:
data_repr = str(data).replace("\n", " ") data_repr = str(data).replace("\n", " ")
if len(data_repr) > 80: if len(data_repr) > 80: