2021-08-19 02:59:04 +00:00
|
|
|
from preserves import parse
|
|
|
|
|
|
|
|
constructors = {}
|
|
|
|
|
|
|
|
class InvalidTransportAddress(ValueError): pass
|
|
|
|
|
|
|
|
# decorator
|
|
|
|
def address(address_class):
|
|
|
|
def k(connection_factory_class):
|
|
|
|
constructors[address_class] = connection_factory_class
|
|
|
|
return connection_factory_class
|
|
|
|
return k
|
|
|
|
|
2021-12-25 21:59:21 +00:00
|
|
|
def connection_from_str(s, **kwargs):
|
2021-08-19 02:59:04 +00:00
|
|
|
address = parse(s)
|
|
|
|
for (address_class, factory_class) in constructors.items():
|
|
|
|
decoded_address = address_class.try_decode(address)
|
|
|
|
if decoded_address is not None:
|
2021-12-25 21:59:21 +00:00
|
|
|
return factory_class(decoded_address, **kwargs)
|
2021-08-19 02:59:04 +00:00
|
|
|
raise InvalidTransportAddress('Invalid transport address', address)
|