Loading django/contrib/gis/gdal/error.py +26 −6 Original line number Diff line number Diff line Loading @@ -42,14 +42,34 @@ OGRERR_DICT = { } OGRERR_NONE = 0 # CPL Error Codes # http://www.gdal.org/cpl__error_8h.html CPLERR_DICT = { 1: (GDALException, 'AppDefined'), 2: (GDALException, 'OutOfMemory'), 3: (GDALException, 'FileIO'), 4: (GDALException, 'OpenFailed'), 5: (GDALException, 'IllegalArg'), 6: (GDALException, 'NotSupported'), 7: (GDALException, 'AssertionFailed'), 8: (GDALException, 'NoWriteAccess'), 9: (GDALException, 'UserInterrupt'), 10: (GDALException, 'ObjectNull'), } CPLERR_NONE = 0 def check_err(code): "Checks the given OGRERR, and raises an exception where appropriate." def check_err(code, cpl=False): """ Checks the given CPL/OGRERR, and raises an exception where appropriate. """ err_none = CPLERR_NONE if cpl else OGRERR_NONE err_dict = CPLERR_DICT if cpl else OGRERR_DICT if code == OGRERR_NONE: if code == err_none: return elif code in OGRERR_DICT: e, msg = OGRERR_DICT[code] elif code in err_dict: e, msg = err_dict[code] raise e(msg) else: raise OGRException('Unknown error code: "%s"' % code) raise GDALException('Unknown error code: "%s"' % code) django/contrib/gis/gdal/prototypes/errcheck.py +6 −6 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ def ptr_byref(args, offset=-1): ### String checking Routines ### def check_const_string(result, func, cargs, offset=None): def check_const_string(result, func, cargs, offset=None, cpl=False): """ Similar functionality to `check_string`, but does not free the pointer. """ if offset: check_err(result) check_err(result, cpl=cpl) ptr = ptr_byref(cargs, offset) return ptr.value else: Loading Loading @@ -101,20 +101,20 @@ def check_srs(result, func, cargs): ### Other error-checking routines ### def check_arg_errcode(result, func, cargs): def check_arg_errcode(result, func, cargs, cpl=False): """ The error code is returned in the last argument, by reference. Check its value with `check_err` before returning the result. """ check_err(arg_byref(cargs)) check_err(arg_byref(cargs), cpl=cpl) return result def check_errcode(result, func, cargs): def check_errcode(result, func, cargs, cpl=False): """ Check the error code returned (c_int). """ check_err(result) check_err(result, cpl=cpl) def check_pointer(result, func, cargs): Loading django/contrib/gis/gdal/prototypes/generation.py +7 −7 Original line number Diff line number Diff line Loading @@ -2,8 +2,8 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ from ctypes import c_char_p, c_double, c_int, c_void_p from functools import partial from django.contrib.gis.gdal.prototypes.errcheck import ( check_arg_errcode, check_errcode, check_geom, check_geom_offset, check_pointer, check_srs, check_str_arg, check_string, check_const_string) Loading @@ -13,12 +13,12 @@ class gdal_char_p(c_char_p): pass def double_output(func, argtypes, errcheck=False, strarg=False): def double_output(func, argtypes, errcheck=False, strarg=False, cpl=False): "Generates a ctypes function that returns a double value." func.argtypes = argtypes func.restype = c_double if errcheck: func.errcheck = check_arg_errcode func.errcheck = partial(check_arg_errcode, cpl=cpl) if strarg: func.errcheck = check_str_arg return func Loading Loading @@ -66,7 +66,7 @@ def srs_output(func, argtypes): return func def const_string_output(func, argtypes, offset=None, decoding=None): def const_string_output(func, argtypes, offset=None, decoding=None, cpl=False): func.argtypes = argtypes if offset: func.restype = c_int Loading @@ -74,7 +74,7 @@ def const_string_output(func, argtypes, offset=None, decoding=None): func.restype = c_char_p def _check_const(result, func, cargs): res = check_const_string(result, func, cargs, offset=offset) res = check_const_string(result, func, cargs, offset=offset, cpl=cpl) if res and decoding: res = res.decode(decoding) return res Loading Loading @@ -112,7 +112,7 @@ def string_output(func, argtypes, offset=-1, str_result=False, decoding=None): return func def void_output(func, argtypes, errcheck=True): def void_output(func, argtypes, errcheck=True, cpl=False): """ For functions that don't only return an error code that needs to be examined. Loading @@ -123,7 +123,7 @@ def void_output(func, argtypes, errcheck=True): # `errcheck` keyword may be set to False for routines that # return void, rather than a status code. func.restype = c_int func.errcheck = check_errcode func.errcheck = partial(check_errcode, cpl=cpl) else: func.restype = None Loading django/contrib/gis/gdal/prototypes/raster.py +7 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ This module houses the ctypes function prototypes for GDAL DataSource (raster) related data structures. """ from ctypes import c_char_p, c_double, c_int, c_void_p, POINTER from functools import partial from django.contrib.gis.gdal.libgdal import lgdal from django.contrib.gis.gdal.prototypes.generation import (const_string_output, double_output, int_output, void_output, voidptr_output) Loading @@ -11,6 +13,11 @@ from django.contrib.gis.gdal.prototypes.generation import (const_string_output, # http://gdal.org/gdal_8h.html # http://gdal.org/gdalwarper_8h.html # Prepare partial functions that use cpl error codes void_output = partial(void_output, cpl=True) const_string_output = partial(const_string_output, cpl=True) double_output = partial(double_output, cpl=True) ### Raster Driver Routines ### register_all = void_output(lgdal.GDALAllRegister, []) get_driver = voidptr_output(lgdal.GDALGetDriver, [c_int]) Loading Loading
django/contrib/gis/gdal/error.py +26 −6 Original line number Diff line number Diff line Loading @@ -42,14 +42,34 @@ OGRERR_DICT = { } OGRERR_NONE = 0 # CPL Error Codes # http://www.gdal.org/cpl__error_8h.html CPLERR_DICT = { 1: (GDALException, 'AppDefined'), 2: (GDALException, 'OutOfMemory'), 3: (GDALException, 'FileIO'), 4: (GDALException, 'OpenFailed'), 5: (GDALException, 'IllegalArg'), 6: (GDALException, 'NotSupported'), 7: (GDALException, 'AssertionFailed'), 8: (GDALException, 'NoWriteAccess'), 9: (GDALException, 'UserInterrupt'), 10: (GDALException, 'ObjectNull'), } CPLERR_NONE = 0 def check_err(code): "Checks the given OGRERR, and raises an exception where appropriate." def check_err(code, cpl=False): """ Checks the given CPL/OGRERR, and raises an exception where appropriate. """ err_none = CPLERR_NONE if cpl else OGRERR_NONE err_dict = CPLERR_DICT if cpl else OGRERR_DICT if code == OGRERR_NONE: if code == err_none: return elif code in OGRERR_DICT: e, msg = OGRERR_DICT[code] elif code in err_dict: e, msg = err_dict[code] raise e(msg) else: raise OGRException('Unknown error code: "%s"' % code) raise GDALException('Unknown error code: "%s"' % code)
django/contrib/gis/gdal/prototypes/errcheck.py +6 −6 Original line number Diff line number Diff line Loading @@ -22,12 +22,12 @@ def ptr_byref(args, offset=-1): ### String checking Routines ### def check_const_string(result, func, cargs, offset=None): def check_const_string(result, func, cargs, offset=None, cpl=False): """ Similar functionality to `check_string`, but does not free the pointer. """ if offset: check_err(result) check_err(result, cpl=cpl) ptr = ptr_byref(cargs, offset) return ptr.value else: Loading Loading @@ -101,20 +101,20 @@ def check_srs(result, func, cargs): ### Other error-checking routines ### def check_arg_errcode(result, func, cargs): def check_arg_errcode(result, func, cargs, cpl=False): """ The error code is returned in the last argument, by reference. Check its value with `check_err` before returning the result. """ check_err(arg_byref(cargs)) check_err(arg_byref(cargs), cpl=cpl) return result def check_errcode(result, func, cargs): def check_errcode(result, func, cargs, cpl=False): """ Check the error code returned (c_int). """ check_err(result) check_err(result, cpl=cpl) def check_pointer(result, func, cargs): Loading
django/contrib/gis/gdal/prototypes/generation.py +7 −7 Original line number Diff line number Diff line Loading @@ -2,8 +2,8 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ from ctypes import c_char_p, c_double, c_int, c_void_p from functools import partial from django.contrib.gis.gdal.prototypes.errcheck import ( check_arg_errcode, check_errcode, check_geom, check_geom_offset, check_pointer, check_srs, check_str_arg, check_string, check_const_string) Loading @@ -13,12 +13,12 @@ class gdal_char_p(c_char_p): pass def double_output(func, argtypes, errcheck=False, strarg=False): def double_output(func, argtypes, errcheck=False, strarg=False, cpl=False): "Generates a ctypes function that returns a double value." func.argtypes = argtypes func.restype = c_double if errcheck: func.errcheck = check_arg_errcode func.errcheck = partial(check_arg_errcode, cpl=cpl) if strarg: func.errcheck = check_str_arg return func Loading Loading @@ -66,7 +66,7 @@ def srs_output(func, argtypes): return func def const_string_output(func, argtypes, offset=None, decoding=None): def const_string_output(func, argtypes, offset=None, decoding=None, cpl=False): func.argtypes = argtypes if offset: func.restype = c_int Loading @@ -74,7 +74,7 @@ def const_string_output(func, argtypes, offset=None, decoding=None): func.restype = c_char_p def _check_const(result, func, cargs): res = check_const_string(result, func, cargs, offset=offset) res = check_const_string(result, func, cargs, offset=offset, cpl=cpl) if res and decoding: res = res.decode(decoding) return res Loading Loading @@ -112,7 +112,7 @@ def string_output(func, argtypes, offset=-1, str_result=False, decoding=None): return func def void_output(func, argtypes, errcheck=True): def void_output(func, argtypes, errcheck=True, cpl=False): """ For functions that don't only return an error code that needs to be examined. Loading @@ -123,7 +123,7 @@ def void_output(func, argtypes, errcheck=True): # `errcheck` keyword may be set to False for routines that # return void, rather than a status code. func.restype = c_int func.errcheck = check_errcode func.errcheck = partial(check_errcode, cpl=cpl) else: func.restype = None Loading
django/contrib/gis/gdal/prototypes/raster.py +7 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,8 @@ This module houses the ctypes function prototypes for GDAL DataSource (raster) related data structures. """ from ctypes import c_char_p, c_double, c_int, c_void_p, POINTER from functools import partial from django.contrib.gis.gdal.libgdal import lgdal from django.contrib.gis.gdal.prototypes.generation import (const_string_output, double_output, int_output, void_output, voidptr_output) Loading @@ -11,6 +13,11 @@ from django.contrib.gis.gdal.prototypes.generation import (const_string_output, # http://gdal.org/gdal_8h.html # http://gdal.org/gdalwarper_8h.html # Prepare partial functions that use cpl error codes void_output = partial(void_output, cpl=True) const_string_output = partial(const_string_output, cpl=True) double_output = partial(double_output, cpl=True) ### Raster Driver Routines ### register_all = void_output(lgdal.GDALAllRegister, []) get_driver = voidptr_output(lgdal.GDALGetDriver, [c_int]) Loading