from amqp.adapter.logging_utils import logging_error from amqp.model.model import AMQRoute # record separator RS = ":" # null route, in lieu of None value NULL_ROUTE = { "componentName": "", "exchange": None, "queue": None, "routingKey": "#", "timeout": 1, "validUntil": 0, } class AMQRouteFactory: """ Define the methods to create and validate AMQRoute objects. """ @staticmethod def from_string(data): """ Builds the AMQRoute from its string form. :param data: route string :return: AMQRoute object """ try: _keys = data.split(RS) if len(_keys) >= 5: _i = 0 _component_name = _keys[_i] _i += 1 _exchange = _keys[_i] _i += 1 _queue = _keys[_i] if _i < len(_keys) else "" _i += 1 _routing_key = _keys[_i] if _i < len(_keys) else "" _i += 1 _timeout = int(_keys[_i]) if _i < len(_keys) else 0 _i += 1 _valid_until = int(_keys[_i]) if _i < len(_keys) else 0 return AMQRoute( component_name=_component_name, exchange=_exchange, queue=_queue, key=_routing_key, timeout=_timeout, valid_until=_valid_until, ) logging_error( "AMQRoute incorrect format. AMQRoute expects input as: " "'Component-Name:AMQExchange-Name:Queue-Name:Routing-Key:Timeout:Valid-Until', " "got: ['%s']", data, ) except Exception as err: logging_error( "%s: AMQRoute incorrect format. AMQRoute expects input as: " "'Component-Name:AMQExchange-Name:Queue-Name:Routing-Key:Timeout:Valid-Until', " "got: ['%s']", err, data, ) return NULL_ROUTE @staticmethod def validate(route_str): """ Validates the route string. :param route_str: route string :return: boolean validity indicator """ if route_str is not None: return route_str.count(":") > 4 return False