From 48b513fc421e25d26fc5afda68d67758f2184fd7 Mon Sep 17 00:00:00 2001 From: scott Date: Tue, 6 Jul 2021 22:07:00 -0500 Subject: [PATCH 1/4] throw exception from c++ GdalAccessor instead of exit(1) Leads to an OSError being thrown instead of shutting down the whole program --- .../DataAccessor/bindings/DataAccessormodule.cpp | 10 ++++++++++ .../InterleavedAccessor/include/GDALAccessor.h | 1 + .../ImageApi/InterleavedAccessor/src/GDALAccessor.cpp | 5 +++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp index 2f34c76..6beb17e 100644 --- a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp +++ b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp @@ -135,9 +135,19 @@ createAccessor_C(PyObject* self, PyObject* args) exit(1); } if (casterCh[0] == '\0') + { + try { ptDataAccessor = (uint64_t) AF->createAccessor(filename, filemode, size, bands, width, scheme); + } + catch(const std::exception& e) + { + std::cerr << e.what() << '\n'; + PyErr_SetString(PyExc_OSError, "Failed to created DataAccessor."); + return NULL; + } + } else if (casterCh[0] != '\0' && PyDict_Size(dict) == 0) { diff --git a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h index 1707cf7..0161f3b 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h +++ b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h @@ -9,6 +9,7 @@ #endif #include +#include #include "InterleavedBase.h" #include #include "gdal_priv.h" diff --git a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp index 4cb0a4c..e546a5c 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp +++ b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp @@ -71,10 +71,11 @@ GDALAccessor::openFile (string filename, string accessMode, GDALDataset ** fd) std::cout << "GDAL open (R): " << filename << std::endl; (*fd) = (GDALDataset *) GDALOpenShared (filename.c_str (), GA_ReadOnly); if ((*fd) == NULL) - { + { cout << "Error. Cannot open the file " << filename << " in " << accessMode << " mode." << endl; - ERR_MESSAGE + throw runtime_error("GDAL file open error."); + // ERR_MESSAGE ; } } From 99d478f87ea10e547f6cf739744507eff61a9109 Mon Sep 17 00:00:00 2001 From: scott Date: Wed, 7 Jul 2021 08:19:30 -0500 Subject: [PATCH 2/4] send better error message in c++, pass along in py --- .../bindings/DataAccessormodule.cpp | 3 +-- .../InterleavedAccessor/src/GDALAccessor.cpp | 26 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp index 6beb17e..b74b273 100644 --- a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp +++ b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp @@ -143,8 +143,7 @@ createAccessor_C(PyObject* self, PyObject* args) } catch(const std::exception& e) { - std::cerr << e.what() << '\n'; - PyErr_SetString(PyExc_OSError, "Failed to created DataAccessor."); + PyErr_SetString(PyExc_OSError, e.what()); return NULL; } diff --git a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp index e546a5c..ad69276 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp +++ b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp @@ -69,22 +69,22 @@ GDALAccessor::openFile (string filename, string accessMode, GDALDataset ** fd) if (accessMode == "read" || accessMode == "READ") { std::cout << "GDAL open (R): " << filename << std::endl; - (*fd) = (GDALDataset *) GDALOpenShared (filename.c_str (), GA_ReadOnly); - if ((*fd) == NULL) - { - cout << "Error. Cannot open the file " << filename << " in " - << accessMode << " mode." << endl; - throw runtime_error("GDAL file open error."); - // ERR_MESSAGE - ; - } + (*fd) = (GDALDataset *) GDALOpenShared (filename.c_str (), GA_ReadOnly); + if ((*fd) == NULL) + { + string errMsg = "Cannot open the file " + filename + " in " + + accessMode + " mode."; + throw runtime_error(errMsg); + // ERR_MESSAGE + // ; + } } else { - cout << "Error. Only read mode is available and not " << accessMode - << " mode." << endl; - ERR_MESSAGE - ; + string errMsg = "Error. Only read mode is available and not " + accessMode + " mode."; + throw runtime_error(errMsg); + // ERR_MESSAGE + // ; } } From 5181aa0e6dc33a9bfddaacb88d043215e07990f3 Mon Sep 17 00:00:00 2001 From: scott Date: Wed, 7 Jul 2021 12:46:25 -0500 Subject: [PATCH 3/4] move stdexcept to base, convert InterleavedAccessor.cpp to exceptions --- .../InterleavedAccessor/include/GDALAccessor.h | 1 - .../InterleavedAccessor/include/InterleavedBase.h | 1 + .../InterleavedAccessor/src/GDALAccessor.cpp | 3 +-- .../InterleavedAccessor/src/InterleavedAccessor.cpp | 12 ++++++------ 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h index 0161f3b..1707cf7 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h +++ b/components/iscesys/ImageApi/InterleavedAccessor/include/GDALAccessor.h @@ -9,7 +9,6 @@ #endif #include -#include #include "InterleavedBase.h" #include #include "gdal_priv.h" diff --git a/components/iscesys/ImageApi/InterleavedAccessor/include/InterleavedBase.h b/components/iscesys/ImageApi/InterleavedAccessor/include/InterleavedBase.h index bba0790..fc66f59 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/include/InterleavedBase.h +++ b/components/iscesys/ImageApi/InterleavedAccessor/include/InterleavedBase.h @@ -10,6 +10,7 @@ #include #include +#include using namespace std; diff --git a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp index ad69276..2ae9c3c 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp +++ b/components/iscesys/ImageApi/InterleavedAccessor/src/GDALAccessor.cpp @@ -75,8 +75,7 @@ GDALAccessor::openFile (string filename, string accessMode, GDALDataset ** fd) string errMsg = "Cannot open the file " + filename + " in " + accessMode + " mode."; throw runtime_error(errMsg); - // ERR_MESSAGE - // ; + // ERR_MESSAGE; } } else diff --git a/components/iscesys/ImageApi/InterleavedAccessor/src/InterleavedAccessor.cpp b/components/iscesys/ImageApi/InterleavedAccessor/src/InterleavedAccessor.cpp index 5951606..498dae0 100644 --- a/components/iscesys/ImageApi/InterleavedAccessor/src/InterleavedAccessor.cpp +++ b/components/iscesys/ImageApi/InterleavedAccessor/src/InterleavedAccessor.cpp @@ -112,8 +112,8 @@ void InterleavedAccessor::openFile(string filename, string accessMode, fstream fd.open(filename.c_str(), ios_base::in); if(fd.fail()) { - cout << "Error. Cannot open the file " << filename << " in " << accessMode << " mode." < Date: Wed, 7 Jul 2021 12:49:21 -0500 Subject: [PATCH 4/4] indent exception catch --- .../bindings/DataAccessormodule.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp index b74b273..6a0a114 100644 --- a/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp +++ b/components/iscesys/ImageApi/DataAccessor/bindings/DataAccessormodule.cpp @@ -136,16 +136,16 @@ createAccessor_C(PyObject* self, PyObject* args) } if (casterCh[0] == '\0') { - try - { - ptDataAccessor = (uint64_t) AF->createAccessor(filename, filemode, size, - bands, width, scheme); - } - catch(const std::exception& e) - { - PyErr_SetString(PyExc_OSError, e.what()); - return NULL; - } + try + { + ptDataAccessor = (uint64_t) AF->createAccessor(filename, filemode, size, + bands, width, scheme); + } + catch(const std::exception& e) + { + PyErr_SetString(PyExc_OSError, e.what()); + return NULL; + } } else if (casterCh[0] != '\0' && PyDict_Size(dict) == 0)