Exemple #1
0
 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>")
Exemple #2
0
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")
Exemple #3
0
 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
Exemple #4
0
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)
Exemple #5
0
    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