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 deregister_all_jpeg2000_drivers_but(name_of_driver_to_keep): global jp2kak_drv, jpeg2000_drv, jp2ecw_drv, jp2mrsid_drv, jp2openjpeg_drv global jp2kak_drv_unregistered,jpeg2000_drv_unregistered,jp2ecw_drv_unregistered,jp2mrsid_drv_unregistered,jp2openjpeg_drv_unregistered # Deregister other potential conflicting JPEG2000 drivers that will # be re-registered in the cleanup try: jp2kak_drv = gdal.GetDriverByName('JP2KAK') if name_of_driver_to_keep != 'JP2KAK' and jp2kak_drv: gdal.Debug('gdaltest','Deregistering JP2KAK') jp2kak_drv.Deregister() jp2kak_drv_unregistered = True except: pass try: jpeg2000_drv = gdal.GetDriverByName('JPEG2000') if name_of_driver_to_keep != 'JPEG2000' and jpeg2000_drv: gdal.Debug('gdaltest','Deregistering JPEG2000') jpeg2000_drv.Deregister() jpeg2000_drv_unregistered = True except: pass try: jp2ecw_drv = gdal.GetDriverByName('JP2ECW') if name_of_driver_to_keep != 'JP2ECW' and jp2ecw_drv: gdal.Debug('gdaltest.','Deregistering JP2ECW') jp2ecw_drv.Deregister() jp2ecw_drv_unregistered = True except: pass try: jp2mrsid_drv = gdal.GetDriverByName('JP2MrSID') if name_of_driver_to_keep != 'JP2MrSID' and jp2mrsid_drv: gdal.Debug('gdaltest.','Deregistering JP2MrSID') jp2mrsid_drv.Deregister() jp2mrsid_drv_unregistered = True except: pass try: jp2openjpeg_drv = gdal.GetDriverByName('JP2OpenJPEG') if name_of_driver_to_keep != 'JP2OpenJPEG' and jp2openjpeg_drv: gdal.Debug('gdaltest.','Deregistering JP2OpenJPEG') jp2openjpeg_drv.Deregister() jp2openjpeg_drv_unregistered = True except: pass return True
def MDArrayWriteArray(mdarray, array, array_start_idx=None, array_step=None): if not array_start_idx: array_start_idx = [0] * mdarray.GetDimensionCount() if not array_step: array_step = [1] * mdarray.GetDimensionCount() buffer_datatype = mdarray.GetDataType() typecode = ExtendedDataTypeToNumPyDataType(buffer_datatype) if array.dtype != typecode: datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) # if we receive some odd type, like int64, try casting to a very # generic type we do support (#2285) if not datatype: gdal.Debug('gdal_array', 'force array to float64') array = array.astype(numpy.float64) datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) if not datatype: raise ValueError( "array does not have corresponding GDAL data type") buffer_datatype = gdal.ExtendedDataType.Create(datatype) ret = MDArrayIONumPy(True, mdarray, array, array_start_idx, array_step, buffer_datatype) if ret != 0: _RaiseException() return ret
def BandWriteArray(band, array, xoff=0, yoff=0, resample_alg=gdal.GRIORA_NearestNeighbour, callback=None, callback_data=None): """Pure python implementation of writing a chunk of a GDAL file from a numpy array. Used by the gdal.Band.WriteArray method.""" if array is None or len(array.shape) != 2: raise ValueError("expected array of dim 2") xsize = array.shape[1] ysize = array.shape[0] if xsize + xoff > band.XSize or ysize + yoff > band.YSize: raise ValueError("array larger than output file, or offset off edge") datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) # if we receive some odd type, like int64, try casting to a very # generic type we do support (#2285) if not datatype: gdal.Debug('gdal_array', 'force array to float64') array = array.astype(numpy.float64) datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) if not datatype: raise ValueError("array does not have corresponding GDAL data type") return BandRasterIONumPy(band, 1, xoff, yoff, xsize, ysize, array, datatype, resample_alg, callback, callback_data)
def testMetaCRS(self): result = self.parse_line() if result != 'success': return result try: gdal.PushErrorHandler( 'CPLQuietErrorHandler' ) ct = osr.CoordinateTransformation( self.src_srs, self.dst_srs ) gdal.PopErrorHandler() if gdal.GetLastErrorMsg().find('Unable to load PROJ.4') != -1: gdaltest.post_reason( 'PROJ.4 missing, transforms not available.' ) return 'skip' except ValueError: gdal.PopErrorHandler() if gdal.GetLastErrorMsg().find('Unable to load PROJ.4') != -1: gdaltest.post_reason( 'PROJ.4 missing, transforms not available.' ) return 'skip' else: gdaltest.post_reason( 'failed to create coordinate transformation. %s' % gdal.GetLastErrorMsg()) return 'fail' except: gdal.PopErrorHandler() gdaltest.post_reason( 'failed to create coordinate transformation. %s' % gdal.GetLastErrorMsg()) return 'fail' ###################################################################### # Transform source point to destination SRS, swapping EPSG GEOGCS # axes if needed. if self.src_srs.EPSGTreatsAsLatLong(): self.src_xyz = (self.src_xyz[1],self.src_xyz[0],self.src_xyz[2]) result = ct.TransformPoint( self.src_xyz[0], self.src_xyz[1], self.src_xyz[2] ) if self.src_srs.EPSGTreatsAsLatLong(): result = (result[1],result[0],result[2]) ###################################################################### # Check results. error = abs(result[0] - self.dst_xyz[0]) \ + abs(result[1] - self.dst_xyz[1]) \ + abs(result[2] - self.dst_xyz[2]) if error > self.dst_error: err_msg = 'Dest error is %g, src=%g,%g,%g, dst=%g,%g,%g, exp=%g,%g,%g' \ % (error, self.src_xyz[0],self.src_xyz[1],self.src_xyz[2], result[0], result[1], result[2], self.dst_xyz[0],self.dst_xyz[1],self.dst_xyz[2]) gdaltest.post_reason( err_msg ) gdal.Debug( 'OSR', 'Src SRS:\n%s\n\nDst SRS:\n%s\n' \ % (self.src_srs.ExportToPrettyWkt(), self.dst_srs.ExportToPrettyWkt()) ) return 'fail' return 'success'
def reregister_all_jpeg2000_drivers(): global jp2kak_drv, jpeg2000_drv, jp2ecw_drv, jp2mrsid_drv, jp2openjpeg_drv global jp2kak_drv_unregistered,jpeg2000_drv_unregistered,jp2ecw_drv_unregistered,jp2mrsid_drv_unregistered, jp2openjpeg_drv_unregistered try: if jp2kak_drv_unregistered: jp2kak_drv.Register() jp2kak_drv_unregistered = False gdal.Debug('gdaltest','Registering JP2KAK') except: pass try: if jpeg2000_drv_unregistered: jpeg2000_drv.Register() jpeg2000_drv_unregistered = False gdal.Debug('gdaltest','Registering JPEG2000') except: pass try: if jp2ecw_drv_unregistered: jp2ecw_drv.Register() jp2ecw_drv_unregistered = False gdal.Debug('gdaltest','Registering JP2ECW') except: pass try: if jp2mrsid_drv_unregistered: jp2mrsid_drv.Register() jp2mrsid_drv_unregistered = False gdal.Debug('gdaltest','Registering JP2MrSID') except: pass try: if jp2openjpeg_drv_unregistered: jp2openjpeg_drv.Register() jp2openjpeg_drv = False gdal.Debug('gdaltest','Registering JP2OpenJPEG') except: pass return True
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 test_metacrs(self, test_line): self.test_line = test_line self.src_xyz = None self.dst_xyz = None self.src_srs = None self.dst_srs = None self.dst_error = None result = self.parse_line() ct = osr.CoordinateTransformation(self.src_srs, self.dst_srs) ###################################################################### # Transform source point to destination SRS result = ct.TransformPoint(self.src_xyz[0], self.src_xyz[1], self.src_xyz[2]) # This is odd, but it seems the expected results are switched if self.src_srs.EPSGTreatsAsLatLong(): result = (result[1], result[0], result[2]) ###################################################################### # Check results. error = abs(result[0] - self.dst_xyz[0]) \ + abs(result[1] - self.dst_xyz[1]) \ + abs(result[2] - self.dst_xyz[2]) if error > self.dst_error: err_msg = 'Dest error is %g, src=%g,%g,%g, dst=%.18g,%.18g,%.18g, exp=%.18g,%.18g,%.18g' \ % (error, self.src_xyz[0], self.src_xyz[1], self.src_xyz[2], result[0], result[1], result[2], self.dst_xyz[0], self.dst_xyz[1], self.dst_xyz[2]) gdal.Debug( 'OSR', 'Src SRS:\n%s\n\nDst SRS:\n%s\n' % (self.src_srs.ExportToPrettyWkt(), self.dst_srs.ExportToPrettyWkt())) if test_line[ 'testName'] == 'WGS84 Geogrpahic 2D to CSPC Z3 USFT NAD83' and gdaltest.is_github_workflow_mac( ): pytest.xfail( 'Failure ' + err_msg + '. See https://github.com/rouault/gdal/runs/1329425333?check_suite_focus=true' ) pytest.fail(err_msg) self.src_srs = None self.dst_srs = None
def test_metacrs(self, test_line): self.test_line = test_line self.src_xyz = None self.dst_xyz = None self.src_srs = None self.dst_srs = None self.dst_error = None result = self.parse_line() ct = osr.CoordinateTransformation(self.src_srs, self.dst_srs) ###################################################################### # Transform source point to destination SRS result = ct.TransformPoint(self.src_xyz[0], self.src_xyz[1], self.src_xyz[2]) # This is odd, but it seems the expected results are switched if self.src_srs.EPSGTreatsAsLatLong(): result = (result[1], result[0], result[2]) ###################################################################### # Check results. error = abs(result[0] - self.dst_xyz[0]) \ + abs(result[1] - self.dst_xyz[1]) \ + abs(result[2] - self.dst_xyz[2]) if error > self.dst_error: err_msg = 'Dest error is %g, src=%g,%g,%g, dst=%.18g,%.18g,%.18g, exp=%.18g,%.18g,%.18g' \ % (error, self.src_xyz[0], self.src_xyz[1], self.src_xyz[2], result[0], result[1], result[2], self.dst_xyz[0], self.dst_xyz[1], self.dst_xyz[2]) gdal.Debug( 'OSR', 'Src SRS:\n%s\n\nDst SRS:\n%s\n' % (self.src_srs.ExportToPrettyWkt(), self.dst_srs.ExportToPrettyWkt())) pytest.fail(err_msg) self.src_srs = None self.dst_srs = None
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'
def DatasetWriteArray(ds, array, xoff=0, yoff=0, band_list=None, interleave='band', resample_alg=gdal.GRIORA_NearestNeighbour, callback=None, callback_data=None): """Pure python implementation of writing a chunk of a GDAL file from a numpy array. Used by the gdal.Dataset.WriteArray method.""" if band_list is None: band_list = list(range(1, ds.RasterCount + 1)) interleave = interleave.lower() if interleave == 'band': interleave = True xdim = 2 ydim = 1 banddim = 0 elif interleave == 'pixel': interleave = False xdim = 1 ydim = 0 banddim = 2 else: raise ValueError('Interleave should be band or pixel') if len(band_list) == 1: if array is None or (len(array.shape) != 2 and len(array.shape) != 3): raise ValueError("expected array of dim 2 or 3") if len(array.shape) == 3: if array.shape[banddim] != 1: raise ValueError("expected size of dimension %d should be 1" % banddim) array = array[banddim] return BandWriteArray(ds.GetRasterBand(band_list[0]), array, xoff=xoff, yoff=yoff, resample_alg=resample_alg, callback=callback, callback_data=callback_data) if array is None or len(array.shape) != 3: raise ValueError("expected array of dim 3") xsize = array.shape[xdim] ysize = array.shape[ydim] if xsize + xoff > ds.RasterXSize or ysize + yoff > ds.RasterYSize: raise ValueError("array larger than output file, or offset off edge") if array.shape[banddim] != len(band_list): raise ValueError( 'Dimension %d of array should have size %d to store bands)' % (banddim, len(band_list))) datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) # if we receive some odd type, like int64, try casting to a very # generic type we do support (#2285) if not datatype: gdal.Debug('gdal_array', 'force array to float64') array = array.astype(numpy.float64) datatype = NumericTypeCodeToGDALTypeCode(array.dtype.type) if not datatype: raise ValueError("array does not have corresponding GDAL data type") ret = DatasetIONumPy(ds, 1, xoff, yoff, xsize, ysize, array, datatype, resample_alg, callback, callback_data, interleave, band_list) if ret != 0: _RaiseException() return ret