@classmethod<EOL><INDENT>def parse_routing_info(cls, records):<DEDENT>
if len(records) != <NUM_LIT:1>:<EOL><INDENT>raise RoutingProtocolError("<STR_LIT>")<EOL><DEDENT>record = records[<NUM_LIT:0>]<EOL>routers = []<EOL>readers = []<EOL>writers = []<EOL>try:<EOL><INDENT>servers = record["<STR_LIT>"]<EOL>for server in servers:<EOL><INDENT>role = server["<STR_LIT>"]<EOL>addresses = []<EOL>for address in server["<STR_LIT>"]:<EOL><INDENT>addresses.append(SocketAddress.parse(address, DEFAULT_PORT))<EOL><DEDENT>if role == "<STR_LIT>":<EOL><INDENT>routers.extend(addresses)<EOL><DEDENT>elif role == "<STR_LIT>":<EOL><INDENT>readers.extend(addresses)<EOL><DEDENT>elif role == "<STR_LIT>":<EOL><INDENT>writers.extend(addresses)<EOL><DEDENT><DEDENT>ttl = record["<STR_LIT>"]<EOL><DEDENT>except (KeyError, TypeError):<EOL><INDENT>raise RoutingProtocolError("<STR_LIT>")<EOL><DEDENT>else:<EOL><INDENT>return cls(routers, readers, writers, ttl)<EOL><DEDENT>
Parse the records returned from a getServers call and
        return a new RoutingTable instance.