################################################################### # This example demonstrates the use of ResInsight exceptions # for proper error handling ################################################################### import rips import grpc import tempfile resinsight = rips.Instance.find() case = None # Try loading a non-existing case. We should get a grpc.RpcError exception from the server try: case = resinsight.project.load_case("Nonsense") except grpc.RpcError as e: print("Expected Server Exception Received while loading case: ", e.code(), e.details()) # Try loading well paths from a non-existing folder. We should get a grpc.RpcError exception from the server try: well_path_files = resinsight.project.import_well_paths(well_path_folder="NONSENSE/NONSENSE") except grpc.RpcError as e: print("Expected Server Exception Received while loading wellpaths: ", e.code(), e.details()) # Try loading well paths from an existing but empty folder. We should get a warning. try: with tempfile.TemporaryDirectory() as tmpdirname: well_path_files = resinsight.project.import_well_paths(well_path_folder=tmpdirname) assert(len(well_path_files) == 0) assert(resinsight.project.has_warnings()) print("Should get warnings below") for warning in resinsight.project.warnings(): print (warning) except grpc.RpcError as e: print("Unexpected Server Exception caught!!!", e) case = resinsight.project.case(case_id=0) if case is not None: results = case.active_cell_property('STATIC_NATIVE', 'PORO', 0) active_cell_count = len(results) # Send the results back to ResInsight inside try / except construct try: case.set_active_cell_property(results, 'GENERATED', 'POROAPPENDED', 0) print("Everything went well as expected") except: # Match any exception, but it should not happen print("Ooops!") # Add another value, so this is outside the bounds of the active cell result storage results.append(1.0) # This time we should get a grpc.RpcError exception, which is a server side error. try: case.set_active_cell_property(results, 'GENERATED', 'POROAPPENDED', 0) print("Everything went well??") except grpc.RpcError as e: print("Expected Server Exception Received: ", e) except IndexError: print ("Got index out of bounds error. This shouldn't happen here") # With a chunk size exactly matching the active cell count the server will not # be able to see any error as it will successfully close the stream after receiving # the correct number of values, even if the python client has more chunks to send case.chunk_size = active_cell_count try: case.set_active_cell_property(results, 'GENERATED', 'POROAPPENDED', 0) print("Everything went well??") except grpc.RpcError as e: print("Got unexpected server exception", e, "This should not happen now") except IndexError: print ("Got expected index out of bounds error on client side")