def get_async_node_data(self, async_data: IAsyncResult) -> str: try: data, _ = async_data.get() except NoNodeError as err: ErrorCodes.make_graceful(err, "No node found") sys.exit(ErrorCodes.NO_NODE.value) return data.decode("utf-8").replace("\n", "<br>")
def main(): try: host, zk_root, credentials, destination_file = get_args() export = ZkTreeExport.new(host, zk_root, credentials, destination_file) export.to_json() except IndexError as err: ErrorCodes.make_graceful(err) sys.exit(ErrorCodes.WRONG_NUM_ARGUMENTS.value, "wrong number of arguments") except NotImplementedError as err: ErrorCodes.make_graceful(err) sys.exit(ErrorCodes.NOT_IMPLEMENTED.value, "some function was not implemented")
def start_kazoo(host: str, credentials: str) -> KazooClient: """Starts a connection to the Zookeeper client""" zk_client = KazooClient(hosts=host) zk_client.add_auth_async("digest", credentials) try: event = zk_client.start_async() event.wait(timeout=10) logger.info("Zookeeper connection established") except KazooTimeoutError as err: ErrorCodes.make_graceful(err, "Zookeeper server timed out") sys.exit(ErrorCodes.KAZOO_TIMEOUT.value) return zk_client
def get_args(): # TODO: Implement argument parsing for future options if len(sys.argv) != 4: print(f"\nUsage: python3 {basename(__file__)} host:port/root /path/to/export") raise IndexError("Wrong number of arguments") try: host, zk_path = parse_zk_string(sys.argv[1]) except NotADirectoryError as err: ErrorCodes.make_graceful(err, "{zk_path} is not a directory") sys.exit(ErrorCodes.NOT_A_DIRECTORY.value) credentials = sys.argv[2] destination = sys.argv[3] return (host, zk_path, credentials, destination)
def new(cls, host: str, zk_root: str, credentials: str, destination: str) -> "ZkTreeExport": """Initializes a ZkTreeObject, performing various tests""" instance = cls(zk_root, destination) instance.zk_client = ZkTreeExport.start_kazoo(host, credentials) try: ZkTreeExport.test_write_permission(destination) logger.debug("Write permission successful.") except IsADirectoryError as err: ErrorCodes.make_graceful(err, "{destination} is a directory") sys.exit(ErrorCodes.IS_A_DIRECTORY.value) except PermissionError as err: ErrorCodes.make_graceful(err, "no write permission in {destination}") sys.exit(ErrorCodes.NO_WRITE_PERMISSION.value) return instance