Пример #1
0
 def parse_routing_info(cls, records):
     """ Parse the records returned from a getServers call and
     return a new RoutingTable instance.
     """
     if len(records) != 1:
         raise ProtocolError("Expected exactly one record")
     record = records[0]
     routers = []
     readers = []
     writers = []
     try:
         servers = record["servers"]
         for server in servers:
             role = server["role"]
             addresses = []
             for address in server["addresses"]:
                 addresses.extend(resolve(SocketAddress.parse(address, DEFAULT_PORT)))
             if role == "ROUTE":
                 routers.extend(addresses)
             elif role == "READ":
                 readers.extend(addresses)
             elif role == "WRITE":
                 writers.extend(addresses)
         ttl = record["ttl"]
     except (KeyError, TypeError):
         raise ProtocolError("Cannot parse routing info")
     else:
         return cls(routers, readers, writers, ttl)
 def test_should_fail_on_non_numeric_port(self):
     with self.assertRaises(ValueError):
         _ = SocketAddress.parse("127.0.0.1:X")
 def test_should_parse_ipv6_address_and_port(self):
     parsed = SocketAddress.parse("[::1]:7687")
     assert parsed == ("::1", 7687, 0, 0)
 def test_should_parse_host_name_and_port(self):
     parsed = SocketAddress.parse("localhost:7687")
     assert parsed == ("localhost", 7687)
 def test_should_parse_ipv4_address_and_port(self):
     parsed = SocketAddress.parse("127.0.0.1:7687")
     assert parsed == ("127.0.0.1", 7687)