def test_misc_14(): import collections import logging class MockLoggingHandler(logging.Handler): def __init__(self, *args, **kwargs): super(MockLoggingHandler, self).__init__(*args, **kwargs) self.messages = collections.defaultdict(list) def emit(self, record): self.messages[record.levelname].append(record.getMessage()) logger = logging.getLogger('gdal_logging_test') logger.setLevel(logging.DEBUG) logger.propagate = False handler = MockLoggingHandler(level=logging.DEBUG) logger.addHandler(handler) prev_debug = gdal.GetConfigOption("CPL_DEBUG") try: gdal.ConfigurePythonLogging(logger_name='gdal_logging_test', enable_debug=True) assert gdal.GetConfigOption("CPL_DEBUG") == "ON", "should have enabled debug" gdal.Debug("test1", "debug1") gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") expected = { 'DEBUG': ["test1: debug1", "FileIO: debug2"], 'INFO': ["AppDefined: info1"], 'WARNING': ["AssertionFailed: warning1"], 'ERROR': ["99999: error1"], } assert handler.messages == expected, "missing log messages" gdal.SetErrorHandler('CPLDefaultErrorHandler') handler.messages.clear() gdal.SetConfigOption('CPL_DEBUG', "OFF") gdal.ConfigurePythonLogging(logger_name='gdal_logging_test') assert gdal.GetConfigOption("CPL_DEBUG") == "OFF", \ "shouldn't have enabled debug" # these get suppressed by CPL_DEBUG gdal.Debug("test1", "debug3") # these don't gdal.Error(gdal.CE_Debug, gdal.CPLE_None, "debug4") assert handler.messages['DEBUG'] == ['debug4'], "unexpected log messages" finally: gdal.SetErrorHandler('CPLDefaultErrorHandler') gdal.SetConfigOption('CPL_DEBUG', prev_debug) logger.removeHandler(handler)
def basic_test_10(): # Check that reference counting works OK gdal.PushErrorHandler(my_python_error_handler_class().handler) gdal.Error(1,2,'test') gdal.PopErrorHandler() error_handler = my_python_error_handler_class() gdal.PushErrorHandler(error_handler.handler) gdal.Error(1,2,'test') gdal.PopErrorHandler() if error_handler.eErrClass != 1: gdaltest.post_reason('fail') return 'fail' if error_handler.err_no != 2: gdaltest.post_reason('fail') return 'fail' if error_handler.msg != 'test': gdaltest.post_reason('fail') return 'fail' return 'success'
def test_basic_test_10(): # Check that reference counting works OK gdal.PushErrorHandler(my_python_error_handler_class().handler) gdal.Error(1, 2, 'test') gdal.PopErrorHandler() error_handler = my_python_error_handler_class() gdal.PushErrorHandler(error_handler.handler) gdal.Error(1, 2, 'test') gdal.PopErrorHandler() assert error_handler.eErrClass == 1 assert error_handler.err_no == 2 assert error_handler.msg == 'test'
def test_error_handler(): # install error handler gdal.PushErrorHandler(gdal_error_handler) # Raise a dummy error gdal.Error(1, 2, 'test error') #uninstall error handler gdal.PopErrorHandler()
def test_basic_test_9(): gdaltest.eErrClass = 0 gdaltest.err_no = 0 gdaltest.msg = '' gdal.PushErrorHandler(my_python_error_handler) gdal.Error(1, 2, 'test') gdal.PopErrorHandler() assert gdaltest.eErrClass == 1 assert gdaltest.err_no == 2 assert gdaltest.msg == 'test'
def basic_test_9(): gdaltest.eErrClass = 0 gdaltest.err_no = 0 gdaltest.msg = '' gdal.PushErrorHandler(my_python_error_handler) gdal.Error(1,2,'test') gdal.PopErrorHandler() if gdaltest.eErrClass != 1: gdaltest.post_reason('fail') return 'fail' if gdaltest.err_no != 2: gdaltest.post_reason('fail') return 'fail' if gdaltest.msg != 'test': gdaltest.post_reason('fail') return 'fail' return 'success'
def misc_15(): messages0 = [] def handle0(ecls, ecode, emsg): messages0.append((ecls, ecode, emsg)) messages1 = [] def handle1(ecls, ecode, emsg): messages1.append((ecls, ecode, emsg)) prev_debug = gdal.GetConfigOption("CPL_DEBUG") try: gdal.SetErrorHandler(handle0) gdal.SetConfigOption('CPL_DEBUG', "ON") gdal.Debug('foo', 'bar') gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") expected0 = [ (gdal.CE_Debug, 0, 'foo: bar'), (gdal.CE_Debug, gdal.CPLE_FileIO, "debug2"), (gdal.CE_None, gdal.CPLE_AppDefined, "info1"), (gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1"), (gdal.CE_Failure, 99999, "error1"), ] if expected0 != messages0: gdaltest.post_reason("SetErrorHandler: mismatched log messages") return 'fail' messages0[:] = [] # Check Push gdal.PushErrorHandler(handle1) gdal.SetConfigOption("CPL_DEBUG", "OFF") gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") if len(messages0) != 0: gdaltest.post_reason("PushErrorHandler: unexpected log messages") return 'fail' if len(messages1) != 4: gdaltest.post_reason("PushErrorHandler: missing log messages") return 'fail' # and pop restores original behaviour gdal.PopErrorHandler() messages1[:] = [] gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") if len(messages0) != 4: gdaltest.post_reason("PopErrorHandler: missing log messages") return 'fail' if len(messages1) != 0: gdaltest.post_reason("PopErrorHandler: unexpected log messages") return 'fail' finally: gdal.SetErrorHandler('CPLDefaultErrorHandler') gdal.SetConfigOption('CPL_DEBUG', prev_debug) return 'success'
global CREATED if not CREATED: print("Initializing GDAL Exceptions") err = GdalErrorHandler() handler = err.handler # Note don't pass class method directly or python segfaults # due to a reference counting bug # http://trac.osgeo.org/gdal/ticket/5186#comment:4 gdal.PushErrorHandler(handler) gdal.UseExceptions( ) # Exceptions will get raised on anything >= gdal.CE_Failure ogr.UseExceptions() CREATED = True if __name__ == '__main__': initGDALOGRErrors() try: gdal.Error(gdal.CE_Warning, 1, 'Test warning message') except Exception as e: print('Operation raised an exception') raise e # else: # if err.err_level >= gdal.CE_Warning: # print('Operation raised an warning') # raise RuntimeError(err.err_level, err.err_no, err.err_msg) finally: gdal.PopErrorHandler()
def test_misc_15(): messages0 = [] def handle0(ecls, ecode, emsg): messages0.append((ecls, ecode, emsg)) messages1 = [] def handle1(ecls, ecode, emsg): messages1.append((ecls, ecode, emsg)) prev_debug = gdal.GetConfigOption("CPL_DEBUG") try: gdal.SetErrorHandler(handle0) gdal.SetConfigOption('CPL_DEBUG', "ON") gdal.Debug('foo', 'bar') gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") expected0 = [ (gdal.CE_Debug, 0, 'foo: bar'), (gdal.CE_Debug, gdal.CPLE_FileIO, "debug2"), (gdal.CE_None, gdal.CPLE_AppDefined, "info1"), (gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1"), (gdal.CE_Failure, 99999, "error1"), ] assert expected0 == messages0, "SetErrorHandler: mismatched log messages" messages0[:] = [] # Check Push gdal.PushErrorHandler(handle1) gdal.SetConfigOption("CPL_DEBUG", "OFF") gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") assert len(messages0) == 0, "PushErrorHandler: unexpected log messages" assert len(messages1) == 4, "PushErrorHandler: missing log messages" # and pop restores original behaviour gdal.PopErrorHandler() messages1[:] = [] gdal.Error(gdal.CE_Debug, gdal.CPLE_FileIO, "debug2") gdal.Error(gdal.CE_None, gdal.CPLE_AppDefined, "info1") gdal.Error(gdal.CE_Warning, gdal.CPLE_AssertionFailed, "warning1") gdal.Error(gdal.CE_Failure, 99999, "error1") assert len(messages0) == 4, "PopErrorHandler: missing log messages" assert len(messages1) == 0, "PopErrorHandler: unexpected log messages" finally: gdal.SetErrorHandler('CPLDefaultErrorHandler') gdal.SetConfigOption('CPL_DEBUG', prev_debug)
def do_something(ds1, ds2): if ds1.GetProjection() != ds2.GetProjection(): gdal.Error(gdal.CE_Failure, gdal.CPLE_AppDefined, 'Datasets must have the same SRS') return False
from osgeo import ogr, osr, gdal except: sys.exit('ERROR: cannot find GDAL/OGR modules') # example GDAL error handler function def gdal_error_handler(err_class, err_num, err_msg): errtype = { gdal.CE_None: 'None', gdal.CE_Debug: 'Debug', gdal.CE_Warning: 'Warning', gdal.CE_Failure: 'Failure', gdal.CE_Fatal: 'Fatal', } err_msg = err_msg.replace('\n', ' ') err_class = errtype.get(err_class, 'None') print('Error Number: %s' % (err_num)) print('Error Type: %s' % (err_class)) print('Error Message: %s' % (err_msg)) if __name__ == '__main__': # install error handler gdal.PushErrorHandler(gdal_error_handler) # Raise a dummy error gdal.Error(gdal.CE_Warning, 2, 'test error') gdal.Error(3, 2, 'test error') # uninstall error handler gdal.PopErrorHandler()
def gdal_error_hander(err_class, err_num, err_msg): ''' This fun is used to show more clearly error info''' err_type = { gdal.CE_None: 'None', gdal.CE_Debug: 'Debug', gdal.CE_Warning: 'Warning', gdal.CE_Failure: 'Failure', gdal.CE_Fatal: 'Fatal' } err_msg = err_msg.replace('\n', ' ') err_class = err_type.get(err_class, 'None') print 'Error Number : %s' % (err_num) print 'Error Type: %s' % (err_class) print 'Error Message: %s' % (err_msg) if __name__ == '__main__': # install error handler gdal.PushErrorHandler(gdal_error_hander) gdal.Error(1, 2, 'test error') # for support chinese character in file path gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO") # for support chinese character in attribute table field gdal.SetConfigOption("SHAPE_ENCODING", "") # register all drivers
self.err_level=gdal.CE_None self.err_no=0 self.err_msg='' def handler(self, err_level, err_no, err_msg): self.err_level=err_level self.err_no=err_no self.err_msg=err_msg if __name__=='__main__': err=GdalErrorHandler() handler=err.handler # Note don't pass class method directly or python segfaults # due to a reference counting bug # http://trac.osgeo.org/gdal/ticket/5186#comment:4 gdal.PushErrorHandler(handler) gdal.UseExceptions() #Exceptions will get raised on anything >= gdal.CE_Failure try: gdal.Error(gdal.CE_Warning,1,'gdal.CE_Warning warning') except Exception as e: print('Operation raised an exception') print(e) else: print('No exception') if err.err_level >= gdal.CE_Warning: raise RuntimeError(err.err_level, err.err_no, err.err_msg) finally: print(err.err_level, err.err_no, err.err_msg) gdal.PopErrorHandler()