[cig-commits] r6172 - in cs/spatialdata-0.1/trunk/modulesrc: geocoords spatialdb utils

brad at geodynamics.org brad at geodynamics.org
Sun Mar 4 15:30:30 PST 2007


Author: brad
Date: 2007-03-04 15:30:29 -0800 (Sun, 04 Mar 2007)
New Revision: 6172

Modified:
   cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src
   cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src
   cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src
   cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src
Log:
Added catching of C++ exceptions in modules.

Modified: cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src	2007-03-03 05:29:19 UTC (rev 6171)
+++ cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src	2007-03-04 23:30:29 UTC (rev 6172)
@@ -18,6 +18,9 @@
 #include "spatialdata/geocoords/CSGeoProj.hh"
 #include "spatialdata/geocoords/Projector.hh"
 #include "spatialdata/geocoords/Converter.hh"
+
+#include <stdexcept>
+#include <Python.h>
 #}header
 
 # ----------------------------------------------------------------------
@@ -53,7 +56,15 @@
     """Initialize the coordinate system."""
     # create shim for method 'initialize'
     #embed{ void CoordSys_initialize(void* pObj)
-    ((spatialdata::geocoords::CoordSys*) pObj)->initialize();
+    try {
+      ((spatialdata::geocoords::CoordSys*) pObj)->initialize();
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
 
     CoordSys_initialize(self.thisptr)
@@ -76,7 +87,15 @@
       """Set number of dimensions for coordinates."""
       # create shim for method 'spaceDim'
       #embed{ void CoordSys_spaceDim_set(void* pObj, int ndims)
-      ((spatialdata::geocoords::CoordSys*) pObj)->setSpaceDim(ndims);
+      try {
+        ((spatialdata::geocoords::CoordSys*) pObj)->setSpaceDim(ndims);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CoordSys_spaceDim_set(self.thisptr, ndims)
 
@@ -84,7 +103,17 @@
       """Get number of dimensions for coordinates."""
       # create shim for method 'spaceDim'
       #embed{ int CoordSys_spaceDim_get(void* pObj)
-      return ((spatialdata::geocoords::CoordSys*) pObj)->spaceDim();
+      int dim = 0;
+      try {
+        dim = ((spatialdata::geocoords::CoordSys*) pObj)->spaceDim();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return dim;
       #}embed
       return CoordSys_spaceDim_get(self.thisptr)
 
@@ -110,7 +139,15 @@
       """Set scale factor for converting coordinates to SI units (meters)."""
       # create shim for method 'toMeters'
       #embed{ void CSCart_toMeters_set(void* pObj, double scale)
-      ((spatialdata::geocoords::CSCart*) pObj)->toMeters(scale);
+      try {
+        ((spatialdata::geocoords::CSCart*) pObj)->toMeters(scale);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSCart_toMeters_set(self.thisptr, scale)
 
@@ -118,7 +155,17 @@
       """Get scale factor for converting coordinates to SI units (meters)."""
       # create shim for method 'toMeters'
       #embed{ double CSCart_toMeters_get(void* pObj)
-      return ((spatialdata::geocoords::CSCart*) pObj)->toMeters();
+      double value = 0;
+      try {
+        value = ((spatialdata::geocoords::CSCart*) pObj)->toMeters();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return value;
       #}embed
       return CSCart_toMeters_get(self.thisptr)
 
@@ -144,7 +191,15 @@
       """Set reference ellipsoid."""
       # create shim for method 'ellipsoid'
       #embed{ void CSGeo_ellipsoid_set(void* pObj, char* name)
+      try {
         ((spatialdata::geocoords::CSGeo*) pObj)->ellipsoid(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSGeo_ellipsoid_set(self.thisptr, name)
 
@@ -152,7 +207,17 @@
       """Fet reference ellipsoid."""
       # create shim for method 'ellipsoid'
       #embed{ char* CSGeo_ellipsoid_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->ellipsoid();
+      char* name = 0;
+      try {      
+        name = (char*) ((spatialdata::geocoords::CSGeo*) pObj)->ellipsoid();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return CSGeo_ellipsoid_get(self.thisptr)
 
@@ -162,7 +227,15 @@
       """Set horizontal datum."""
       # create shim for method 'datumHoriz'
       #embed{ void CSGeo_datumHoriz_set(void* pObj, char* name)
-      ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz(name);
+      try {
+        ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSGeo_datumHoriz_set(self.thisptr, name)
       
@@ -170,7 +243,17 @@
       """Get horizontal datum."""
       # create shim for method 'datumHoriz'
       #embed{ char* CSGeo_datumHoriz_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return CSGeo_datumHoriz_get(self.thisptr)
 
@@ -180,7 +263,15 @@
       """Set vertical datum."""
       # create shim for method 'datumVert'
       #embed{ void CSGeo_datumVert_set(void* pObj, char* name)
+      try {
         ((spatialdata::geocoords::CSGeo*) pObj)->datumVert(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSGeo_datumVert_set(self.thisptr, name)
 
@@ -188,7 +279,17 @@
       """Get vertical datum."""
       # create shim for method 'datumVert'
       #embed{ char* CSGeo_datumVert_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumVert();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumVert();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return CSGeo_datumVert_get(self.thisptr)
 
@@ -198,7 +299,15 @@
       """Set geocentric flag."""
       # create shim for method 'isGeocentric'
       #embed{ void CSGeo_isGeocentric_set(void* pObj, int flag)
+      try {
         ((spatialdata::geocoords::CSGeo*) pObj)->isGeocentric(flag);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSGeo_isGeocentric_set(self.thisptr, flag)
 
@@ -206,7 +315,17 @@
       """Get geocentric flag."""
       # create shim for method 'isGeocentric'
       #embed{ int CSGeo_isGeocentric_get(void* pObj)
-        return ((spatialdata::geocoords::CSGeo*) pObj)->isGeocentric();
+      int value = 0;
+      try {
+        value = ((spatialdata::geocoords::CSGeo*) pObj)->isGeocentric();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return value;
       #}embed
       return CSGeo_isGeocentric_get(self.thisptr)
       
@@ -216,7 +335,15 @@
       """Set factor to convert Cartesian coordinates to meters."""
       # create shim for method 'toMeters'
       #embed{ void CSGeo_toMeters_set(void* pObj, double scale)
+      try {
         ((spatialdata::geocoords::CSGeo*) pObj)->toMeters(scale);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       CSGeo_toMeters_set(self.thisptr, scale)
 
@@ -224,7 +351,17 @@
       """Get factor to convert Cartesian coordinates to meters."""
       # create shim for method 'toMeters'
       #embed{ double CSGeo_toMeters_get(void* pObj)
-        return ((spatialdata::geocoords::CSGeo*) pObj)->toMeters();
+      double value = 0.0;
+      try {
+        value = ((spatialdata::geocoords::CSGeo*) pObj)->toMeters();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return value;
       #}embed
       return CSGeo_toMeters_get(self.thisptr)
 
@@ -249,7 +386,15 @@
     """Set origin of local cartesian coordinate system."""
     # create shim for method 'origin'
     #embed{ void CSGeoLocalCart_origin(void* pObj, double lon, double lat, double elev)
-    ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(lon, lat, elev);
+    try {
+      ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(lon, lat, elev);
+    } catch (const std::exception& err) {
+    PyErr_SetString(PyExc_RuntimeError,
+                    const_cast<char*>(err.what()));
+    } catch (...) {
+    PyErr_SetString(PyExc_RuntimeError,
+                    "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
     CSGeoLocalCart_origin(self.thisptr, lon, lat, elev)
 
@@ -258,7 +403,15 @@
     """Get origin of local cartesian coordinate system."""
     # create shim for method 'origin'
     #embed{ void CSGeoLocalCart_getOrigin(void* pObj, double* pLon, double* pLat, double* pElev)
-    ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(pLon, pLat, pElev);
+    try {
+      ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(pLon, pLat, pElev);
+    } catch (const std::exception& err) {
+    PyErr_SetString(PyExc_RuntimeError,
+                    const_cast<char*>(err.what()));
+    } catch (...) {
+    PyErr_SetString(PyExc_RuntimeError,
+                    "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
     cdef double lon, lat, elev
     CSGeoLocalCart_getOrigin(self.thisptr, &lon, &lat, &elev)
@@ -286,9 +439,17 @@
       """Set projector."""
       # create shim for method 'projector'
       #embed{ void CSGeoProj_projector(void* pObj, void* pProjObj)
-      const spatialdata::geocoords::Projector* pProj =
+      try {
+        const spatialdata::geocoords::Projector* pProj =
         (spatialdata::geocoords::Projector*) pProjObj;
         ((spatialdata::geocoords::CSGeoProj*) pObj)->projector(*pProj);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       if not proj.name == "spatialdata_geocoords_Projector":
         raise TypeError, \
@@ -321,7 +482,15 @@
       """Set projection."""
       # create shim for method 'projection'
       #embed{ void Projector_projection_set(void* pObj, char* name)
-      ((spatialdata::geocoords::Projector*) pObj)->projection(name);
+      try {
+        ((spatialdata::geocoords::Projector*) pObj)->projection(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       Projector_projection_set(self.thisptr, name)
 
@@ -329,7 +498,17 @@
       """Get projection."""
       # create shim for method 'projection'
       #embed{ char* Projector_projection_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::Projector*) pObj)->projection();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::geocoords::Projector*) pObj)->projection();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return Projector_projection_get(self.thisptr)
 
@@ -339,7 +518,15 @@
       """Set units of projection."""
       # create shim for method 'units'
       #embed{ void Projector_units_set(void* pObj, char* name)
-      ((spatialdata::geocoords::Projector*) pObj)->units(name);
+      try {
+        ((spatialdata::geocoords::Projector*) pObj)->units(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       Projector_units_set(self.thisptr, name)
 
@@ -347,7 +534,17 @@
       """Get units of projection."""
       # create shim for method 'units'
       #embed{ char* Projector_units_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::Projector*) pObj)->units();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::geocoords::Projector*) pObj)->units();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return Projector_units_get(self.thisptr)
 
@@ -356,7 +553,15 @@
       """Set proj.4 options for projector."""
       # create shim for method 'projOptions'
       #embed{ void Projector_projOptions_set(void* pObj, char* options)
+      try {
         ((spatialdata::geocoords::Projector*) pObj)->projOptions(options);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       Projector_projOptions_set(self.thisptr, options)
 
@@ -364,7 +569,17 @@
       """Set proj.4 options for projector."""
       # create shim for method 'projOptions'
       #embed{ char* Projector_projOptions_get(void* pObj)
-        return (char*) ((spatialdata::geocoords::Projector*) pObj)->projOptions();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::geocoords::Projector*) pObj)->projOptions();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return Projector_projOptions_get(self.thisptr)
 
@@ -373,11 +588,19 @@
     """Initialize projector."""
     # create shim for method 'initialize'
     #embed{ void Projector_initialize(void* pObj, void* pCSObj)
-    const spatialdata::geocoords::CoordSys* pCS =
-      (spatialdata::geocoords::CoordSys*) pCSObj;
-    const spatialdata::geocoords::CSGeo* pCSGeo =
-      dynamic_cast<const spatialdata::geocoords::CSGeo*>(pCS);
-    ((spatialdata::geocoords::Projector*) pObj)->initialize(*pCSGeo);
+    try {
+      const spatialdata::geocoords::CoordSys* pCS =
+        (spatialdata::geocoords::CoordSys*) pCSObj;
+      const spatialdata::geocoords::CSGeo* pCSGeo =
+        dynamic_cast<const spatialdata::geocoords::CSGeo*>(pCS);
+      ((spatialdata::geocoords::Projector*) pObj)->initialize(*pCSGeo);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch      
     #}embed
 
     if not csGeo.name == "spatialdata_geocoords_CoordSys":
@@ -392,7 +615,15 @@
     """Project geographic coordinates."""
     # create shim for method 'project'
     #embed{ void Projector_project(void* pObj, double* pX, double* pY, double lon, double lat)
-    ((spatialdata::geocoords::Projector*) pObj)->project(pX, pY, lon, lat);
+    try {
+      ((spatialdata::geocoords::Projector*) pObj)->project(pX, pY, lon, lat);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch      
     #}embed
 
     cdef double x
@@ -411,7 +642,15 @@
     """Get geographics coordinates for projected location."""
     # create shim for method 'invproject'
     #embed{ void Projector_invproject(void* pObj, double* pLon, double* pLat, double x, double y)
-    ((spatialdata::geocoords::Projector*) pObj)->invproject(pLon, pLat, x, y);
+    try {
+      ((spatialdata::geocoords::Projector*) pObj)->invproject(pLon, pLat, x, y);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch      
     #}embed
 
     cdef double lon
@@ -440,12 +679,20 @@
 # ----------------------------------------------------------------------
 # create shim for Converter method 'convert'
 #embed{ void CppConverter_convert(double* coords, int numLocs, int numDims, void* pCSDestObj, void* pCSSrcObj)
-spatialdata::geocoords::CoordSys* pCSDest =
-  (spatialdata::geocoords::CoordSys*) pCSDestObj;
-spatialdata::geocoords::CoordSys* pCSSrc =
-  (spatialdata::geocoords::CoordSys*) pCSSrcObj;
-spatialdata::geocoords::Converter::convert(coords, numLocs, numDims,
-                                           pCSDest, pCSSrc);
+try {
+  spatialdata::geocoords::CoordSys* pCSDest =
+    (spatialdata::geocoords::CoordSys*) pCSDestObj;
+  spatialdata::geocoords::CoordSys* pCSSrc =
+    (spatialdata::geocoords::CoordSys*) pCSSrcObj;
+  spatialdata::geocoords::Converter::convert(coords, numLocs, numDims,
+                                             pCSDest, pCSSrc);
+} catch (const std::exception& err) {
+  PyErr_SetString(PyExc_RuntimeError,
+                  const_cast<char*>(err.what()));
+} catch (...) {
+  PyErr_SetString(PyExc_RuntimeError,
+                  "Caught unknown C++ exception.");
+} // try/catch  
 #}embed
 
 def Converter_convert(coordsSrc, csDest, csSrc):

Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src	2007-03-03 05:29:19 UTC (rev 6171)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src	2007-03-04 23:30:29 UTC (rev 6172)
@@ -18,6 +18,9 @@
 #include "spatialdata/spatialdb/SimpleDBTypes.hh"
 
 #include "spatialdata/geocoords/CoordSys.hh"
+
+#include <stdexcept>
+#include <Python.h>
 #}header
 
 # ----------------------------------------------------------------------
@@ -64,7 +67,15 @@
       """
       # create shim for method 'label'
       #embed{ void SpatialDB_label_set(void* pObj, char* name)
-      ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
+      try {
+        ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
 
       SpatialDB_label_set(self.thisptr, name)
@@ -75,7 +86,17 @@
       """
       # create shim for method 'label'
       #embed{ char* SpatialDB_label_get(void* pObj)
-      return (char*) ((spatialdata::spatialdb::SpatialDB*) pObj)->label();
+      char* label = 0;
+      try {
+        label = (char*) ((spatialdata::spatialdb::SpatialDB*) pObj)->label();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return label;
       #}embed
 
       return SpatialDB_label_get(self.thisptr)
@@ -87,7 +108,15 @@
     """
     # create shim for method 'open'
     #embed{ void SpatialDB_open(void* pObj)
-    ((spatialdata::spatialdb::SpatialDB*) pObj)->open();
+    try {
+      ((spatialdata::spatialdb::SpatialDB*) pObj)->open();
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
 
     SpatialDB_open(self.thisptr)
@@ -100,7 +129,15 @@
     """
     # create shim for method 'close'
     #embed{ void SpatialDB_close(void* pObj)
-    ((spatialdata::spatialdb::SpatialDB*) pObj)->close();
+    try {
+      ((spatialdata::spatialdb::SpatialDB*) pObj)->close();
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
 
     SpatialDB_close(self.thisptr)
@@ -113,7 +150,15 @@
     """
     # create shim for method 'queryVals'
     #embed{ void SpatialDB_queryVals(void* pObj, char** names, int numVals)
-    ((spatialdata::spatialdb::SpatialDB*) pObj)->queryVals((const char**) names, numVals);
+    try {
+      ((spatialdata::spatialdb::SpatialDB*) pObj)->queryVals((const char**) names, numVals);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
 
     cdef char** pNames
@@ -143,11 +188,21 @@
     """
     # create shim for method 'query'
     #embed{ int SpatialDB_query(void* pObj, double* vals, int nvals, double* coords, int spaceDim, void* csObj)
-    spatialdata::geocoords::CoordSys* pCS =
-      (spatialdata::geocoords::CoordSys*) csObj;
-      return ((spatialdata::spatialdb::SpatialDB*) pObj)->query(vals, nvals,
-                                                          coords, spaceDim,
-                                                          pCS);
+    int err = 0;
+    try {
+      spatialdata::geocoords::CoordSys* pCS =
+        (spatialdata::geocoords::CoordSys*) csObj;
+        err = ((spatialdata::spatialdb::SpatialDB*) pObj)->query(vals, nvals,
+                                                            coords, spaceDim,
+                                                            pCS);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
+    return err;
     #}embed
 
     import spatialdata.utils.simplearray
@@ -412,75 +467,4 @@
     return
 
 
-  def writeNew(self, namesObj, unitsObj, dataObj, spaceDim, dataDim, cs):
-    """
-    Write database to file.
-    """
-    # create shim for method 'write'
-    #embed{ void SimpleIOAscii_writeNew(void* pObj, char** names, char** units, double* data, int numLocs, int spaceDim, int numValues, int dataDim, void* pCSObj)
-    spatialdata::spatialdb::SimpleDB::DataStruct* pData =
-      new spatialdata::spatialdb::SimpleDB::DataStruct;
-    pData->data = data;
-    
-
-    spatialdata::geocoords::CoordSys* pCS =
-      (spatialdata::geocoords::CoordSys*) pCSObj;  
-    ((spatialdata::spatialdb::SimpleIOAscii*) pObj)->write(*pData, pCS);
-    delete pData; pData = 0;
-    #}embed
-
-    
-    import spatialdata.utils.simplearray
-    data = spatialdata.utils.simplearray.objAsSimpleArray(dataObj)
-    if not dataA.isCompatible(nd=2,
-                              simpletype="double",
-                              contiguous=True,
-                              notswapped=True):
-      raise TypeError, \
-            "Argument 'dataObj' must be a contiguous, 2-D array of type double."
-    numValues = len(names)
-    if not (numValues == len(units)):
-      raise ValueError, \
-            "Arguments 'names' and 'values' must have the same length."
-    (numLocs, totalDim) = data.shape
-    if totalDim != numValues + spaceDim:
-      raise ValueError, \
-            "'dataObj' not compatible with number of values and spaceDim."
-    if not cs.name == "spatialdata_geocoords_CoordSys":
-      raise TypeError, \
-            "Argument 'cs' must be extension module type 'CoordSys'."
-
-    cdef double* dataArray
-    dataArray = <double*> PyCObject_AsVoidPtr(data.data)
-
-    cdef char** namesArray
-    cdef char** unitsArray
-    namesArray = NULL
-    unitsArray = NULL
-    if numValues > 0:
-      namesArray = <char**> malloc(numValues*sizeof(char))
-      unitsArray = <char**> malloc(numValues*sizeof(char))
-    for i from 0 <= i < numValues:
-      strsize = len(names[i])
-      namesArray[i] = <char*> malloc(1+strsize*sizeof(char))
-      tmp = names[i] # KLUDGE??
-      strcpy(namesArray[i], tmp)
-
-      strsize = len(units[i])
-      unitsArray[i] = <char*> malloc(1+strsize*sizeof(char))
-      tmp = units[i] # KLUDGE??
-      strcpy(unitsArray[i], tmp)
-      
-    SimpleIOAscii_writeNew(self.thisptr,
-                           namesArray, unitsArray, dataArray,
-                           numLocs, spaceDim, numValues, dataDim,
-                           ptrFromHandle(cs))
-    for i from 0 <= i < numValues:
-      free(<void*> namesArray[i])
-      free(<void*> unitsArray[i])
-    free(<void*> namesArray)
-    free(<void*> unitsArray)
-    return
-
-
 # End of file 

Modified: cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src	2007-03-03 05:29:19 UTC (rev 6171)
+++ cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src	2007-03-04 23:30:29 UTC (rev 6172)
@@ -122,7 +122,7 @@
       if not nd == self.nd:
         if _debuglevel > 0:
           print "Expected nd '%d' but have nd '%d'." % \
-                (nd, self.nd)
+                    (nd, self.nd)
         return False
     if not simpletype is None:
       if not simpletype == self._typeinfo['type']:

Modified: cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src	2007-03-03 05:29:19 UTC (rev 6171)
+++ cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src	2007-03-04 23:30:29 UTC (rev 6172)
@@ -11,6 +11,9 @@
 
 #header{
 #include "spatialdata/utils/PointsStream.hh"
+
+#include <stdexcept>
+#include <Python.h>
 #}header
 
 # ----------------------------------------------------------------------
@@ -55,7 +58,15 @@
       """
       # create shim for method 'filename'
       #embed{ void PointsStream_filename_set(void* pObj, char* filename)
-      ((spatialdata::utils::PointsStream*) pObj)->filename(filename);
+      try {
+        ((spatialdata::utils::PointsStream*) pObj)->filename(filename);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       PointsStream_filename_set(self.thisptr, filename)
 
@@ -65,7 +76,17 @@
       """
       # create shim for method 'filename'
       #embed{ char* PointsStream_filename_get(void* pObj)
-      return (char*) ((spatialdata::utils::PointsStream*) pObj)->filename();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::utils::PointsStream*) pObj)->filename();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return PointsStream_filename_get(self.thisptr)
 
@@ -77,7 +98,15 @@
       """
       # create shim for method 'commentFlag'
       #embed{ void PointsStream_commentFlag_set(void* pObj, char* flag)
-      ((spatialdata::utils::PointsStream*) pObj)->commentFlag(flag);
+      try {
+        ((spatialdata::utils::PointsStream*) pObj)->commentFlag(flag);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       PointsStream_commentFlag_set(self.thisptr, flag)
 
@@ -87,7 +116,17 @@
       """
       # create shim for method 'commentFlag'
       #embed{ char* PointsStream_commentFlag_get(void* pObj)
-      return (char*) ((spatialdata::utils::PointsStream*) pObj)->commentFlag();
+      char* name = 0;
+      try {
+        name = (char*) ((spatialdata::utils::PointsStream*) pObj)->commentFlag();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return name;
       #}embed
       return PointsStream_commentFlag_get(self.thisptr)
 
@@ -99,7 +138,15 @@
       """
       # create shim for method 'fieldWidth'
       #embed{ void PointsStream_fieldWidth_set(void* pObj, int width)
-      ((spatialdata::utils::PointsStream*) pObj)->fieldWidth(width);
+      try {
+        ((spatialdata::utils::PointsStream*) pObj)->fieldWidth(width);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       PointsStream_fieldWidth_set(self.thisptr, width)
 
@@ -109,7 +156,16 @@
       """
       # create shim for method 'fieldWidth'
       #embed{ int PointsStream_fieldWidth_get(void* pObj)
-      return ((spatialdata::utils::PointsStream*) pObj)->fieldWidth();
+      int width = 0;
+      try {
+        width = ((spatialdata::utils::PointsStream*) pObj)->fieldWidth();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       return PointsStream_fieldWidth_get(self.thisptr)
 
@@ -121,7 +177,15 @@
       """
       # create shim for method 'precision'
       #embed{ void PointsStream_precision_set(void* pObj, int precision)
-      ((spatialdata::utils::PointsStream*) pObj)->precision(precision);
+      try {
+        ((spatialdata::utils::PointsStream*) pObj)->precision(precision);
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
       #}embed
       PointsStream_precision_set(self.thisptr, precision)
 
@@ -131,7 +195,17 @@
       """
       # create shim for method 'precision'
       #embed{ int PointsStream_precision_get(void* pObj)
-      return ((spatialdata::utils::PointsStream*) pObj)->precision();
+      int precision = 0;
+      try {
+        precision = ((spatialdata::utils::PointsStream*) pObj)->precision();
+      } catch (const std::exception& err) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        const_cast<char*>(err.what()));
+      } catch (...) {
+        PyErr_SetString(PyExc_RuntimeError,
+                        "Caught unknown C++ exception.");
+      } // try/catch
+      return precision;
       #}embed
       return PointsStream_precision_get(self.thisptr)
 
@@ -142,8 +216,16 @@
     """
     # create shim for method 'read'
     #embed{ void PointsStream_read(void* pObj, double** ppVals, int* pNumPts, int* pNumDims)
-    ((spatialdata::utils::PointsStream*) pObj)->read(ppVals,
-                                                     pNumPts, pNumDims);
+    try {
+      ((spatialdata::utils::PointsStream*) pObj)->read(ppVals,
+                                                       pNumPts, pNumDims);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
     cdef double* pVals
     cdef int numPts
@@ -165,7 +247,15 @@
     """
     # create shim for method 'write'
     #embed{ void PointsStream_write(void* pObj, double* pVals, int numPts, int numDims)
-    ((spatialdata::utils::PointsStream*) pObj)->write(pVals, numPts, numDims);
+    try {
+      ((spatialdata::utils::PointsStream*) pObj)->write(pVals, numPts, numDims);
+    } catch (const std::exception& err) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      const_cast<char*>(err.what()));
+    } catch (...) {
+      PyErr_SetString(PyExc_RuntimeError,
+                      "Caught unknown C++ exception.");
+    } // try/catch
     #}embed
     
     import spatialdata.utils.simplearray



More information about the cig-commits mailing list