[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19458] branches/soc-2008-mxcurioni/source /blender/freestyle/intern/python: Improvements on error handling in the Python API.

Tamito Kajiyama rd6t-kjym at asahi-net.or.jp
Sun Mar 29 23:50:12 CEST 2009


Revision: 19458
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19458
Author:   kjym3
Date:     2009-03-29 23:50:10 +0200 (Sun, 29 Mar 2009)

Log Message:
-----------
Improvements on error handling in the Python API.

Modified Paths:
--------------
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Id.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/BPy_FEdge.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/BPy_FrsCurve.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/BPy_Stroke.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/BPy_ViewEdge.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface1D/Curve/BPy_Chain.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/StrokeShader/BPy_CalligraphicShader.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/StrokeShader/BPy_ConstantThicknessShader.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/StrokeShader/BPy_SpatialNoiseShader.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/StrokeShader/BPy_StrokeTextureShader.cpp
    branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/StrokeShader/BPy_ThicknessVariationPatternShader.cpp

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp	2009-03-29 21:05:03 UTC (rev 19457)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsMaterial.cpp	2009-03-29 21:50:10 UTC (rev 19458)
@@ -193,6 +193,7 @@
 		self->m = new FrsMaterial(&f1, &f2, &f3, &f4, f5);
 
 	} else {
+		PyErr_SetString(PyExc_TypeError, "invalid arguments");
 		return -1;
 	}
 
@@ -338,10 +339,8 @@
 PyObject * FrsMaterial_setDiffuse( BPy_FrsMaterial *self, PyObject *args ) {
 	float f1, f2, f3, f4;
 
-	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  )) {
-		cout << "ERROR: FrsMaterial_setDiffuse" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  ))
+		return NULL;
 
 	self->m->setDiffuse(f1, f2, f3, f4);
 
@@ -351,10 +350,8 @@
 PyObject * FrsMaterial_setSpecular( BPy_FrsMaterial *self, PyObject *args ) {
 	float f1, f2, f3, f4;
 
-	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  )) {
-		cout << "ERROR: FrsMaterial_setSpecular" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  ))
+		return NULL;
 
 	self->m->setSpecular(f1, f2, f3, f4);
 
@@ -364,10 +361,8 @@
 PyObject * FrsMaterial_setAmbient( BPy_FrsMaterial *self, PyObject *args ) {
 	float f1, f2, f3, f4;
 
-	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  )) {
-		cout << "ERROR: FrsMaterial_setAmbient" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  ))
+		return NULL;
 
 	self->m->setAmbient(f1, f2, f3, f4);
 
@@ -377,10 +372,8 @@
 PyObject * FrsMaterial_setEmission( BPy_FrsMaterial *self, PyObject *args ) {
 	float f1, f2, f3, f4;
 
-	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  )) {
-		cout << "ERROR: FrsMaterial_setEmission" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "ffff", &f1, &f2, &f3, &f4)  ))
+		return NULL;
 
 	self->m->setEmission(f1, f2, f3, f4);
 
@@ -390,10 +383,8 @@
 PyObject * FrsMaterial_setShininess( BPy_FrsMaterial *self, PyObject *args ) {
 	float f;
 
-	if(!( PyArg_ParseTuple(args, "f", &f)  )) {
-		cout << "ERROR: FrsMaterial_setShininess" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "f", &f)  ))
+		return NULL;
 
 	self->m->setShininess(f);
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp	2009-03-29 21:05:03 UTC (rev 19457)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_FrsNoise.cpp	2009-03-29 21:50:10 UTC (rev 19458)
@@ -1,5 +1,7 @@
 #include "BPy_FrsNoise.h"
 
+#include <sstream>
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -152,10 +154,8 @@
 	float f1, f2, f3;
 	unsigned int i;
 
-	if(!( PyArg_ParseTuple(args, "fff|I", &f1, &f2, &f3, &i) )) {
-		cout << "ERROR: FrsNoise_turbulence1" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "fff|I", &f1, &f2, &f3, &i) ))
+		return NULL;
 
 	return PyFloat_FromDouble( self->n->turbulence1(f1, f2, f3, i) );
 }
@@ -165,9 +165,13 @@
 	float f2, f3;
 	unsigned int i;
 
-	if(!( PyArg_ParseTuple(args, "Off|I", &obj1, &f2, &f3, &i) && PyList_Check(obj1) && PyList_Size(obj1) > 1 )) {
-		cout << "ERROR: FrsNoise_turbulence2" << endl;
-		Py_RETURN_NONE;
+	if(!( PyArg_ParseTuple(args, "O!ff|I", &PyList_Type, &obj1, &f2, &f3, &i) ))
+		return NULL;
+	if( PyList_Size(obj1) != 2 ) {
+		stringstream msg("FrsNoise::turbulence2() accepts a list of 2 elements (");
+		msg << PyList_Size(obj1) << " found)";
+		PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+		return NULL;
 	}
 
 	Vec2f v( PyFloat_AsDouble(PyList_GetItem(obj1, 0)), PyFloat_AsDouble(PyList_GetItem(obj1, 1)) );
@@ -180,9 +184,13 @@
 	float f2, f3;
 	unsigned int i;
 
-	if(!( PyArg_ParseTuple(args, "Off|I", &obj1, &f2, &f3, &i) && PyList_Check(obj1) && PyList_Size(obj1) > 2 )) {
-		cout << "ERROR: FrsNoise_turbulence3" << endl;
-		Py_RETURN_NONE;
+	if(!( PyArg_ParseTuple(args, "O!ff|I", &PyList_Type, &obj1, &f2, &f3, &i) ))
+		return NULL;
+	if( PyList_Size(obj1) != 3 ) {
+		stringstream msg("FrsNoise::turbulence3() accepts a list of 3 elements (");
+		msg << PyList_Size(obj1) << " found)";
+		PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+		return NULL;
 	}
 
 	Vec3f v( PyFloat_AsDouble(PyList_GetItem(obj1, 0)),
@@ -195,10 +203,8 @@
 PyObject * FrsNoise_smoothNoise1( BPy_FrsNoise *self , PyObject *args) {
 	float f;
 
-	if(!( PyArg_ParseTuple(args, "f", &f) )) {
-		cout << "ERROR: FrsNoise_smoothNoise1" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "f", &f) ))
+		return NULL;
 
 	return PyFloat_FromDouble( self->n->smoothNoise1(f) );
 }
@@ -206,9 +212,13 @@
 PyObject * FrsNoise_smoothNoise2( BPy_FrsNoise *self , PyObject *args) {
 	PyObject *obj;
 
-	if(!( PyArg_ParseTuple(args, "O", &obj) && PyList_Check(obj) && PyList_Size(obj) > 1 )) {
-		cout << "ERROR: FrsNoise_smoothNoise2" << endl;
-		Py_RETURN_NONE;
+	if(!( PyArg_ParseTuple(args, "O", &PyList_Type, &obj) ))
+		return NULL;
+	if( PyList_Size(obj) != 2 ) {
+		stringstream msg("FrsNoise::smoothNoise2() accepts a list of 2 elements (");
+		msg << PyList_Size(obj) << " found)";
+		PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+		return NULL;
 	}
 
 	Vec2f v( PyFloat_AsDouble(PyList_GetItem(obj, 0)), PyFloat_AsDouble(PyList_GetItem(obj, 1)) );
@@ -219,9 +229,13 @@
 PyObject * FrsNoise_smoothNoise3( BPy_FrsNoise *self , PyObject *args) {
 	PyObject *obj;
 
-	if(!( PyArg_ParseTuple(args, "O", &obj) && PyList_Check(obj) && PyList_Size(obj) > 2 )) {
-		cout << "ERROR: FrsNoise_smoothNoise3" << endl;
-		Py_RETURN_NONE;
+	if(!( PyArg_ParseTuple(args, "O", &PyList_Type, obj) ))
+		return NULL;
+	if( PyList_Size(obj) != 3 ) {
+		stringstream msg("FrsNoise::smoothNoise3() accepts a list of 3 elements (");
+		msg << PyList_Size(obj) << " found)";
+		PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+		return NULL;
 	}
 
 	Vec3f v( PyFloat_AsDouble(PyList_GetItem(obj, 0)),

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Id.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Id.cpp	2009-03-29 21:05:03 UTC (rev 19457)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/BPy_Id.cpp	2009-03-29 21:50:10 UTC (rev 19458)
@@ -165,10 +165,8 @@
 PyObject *Id_setFirst( BPy_Id *self , PyObject *args) {
 	unsigned int i;
 
-	if( !PyArg_ParseTuple(args, (char *)"i", &i) ) {
-		cout << "ERROR: Id_setFirst" << endl;
-		Py_RETURN_NONE;
-	}
+	if( !PyArg_ParseTuple(args, "i", &i) )
+		return NULL;
 
 	self->id->setFirst( i );
 
@@ -179,10 +177,8 @@
 PyObject *Id_setSecond( BPy_Id *self , PyObject *args) {
 	unsigned int i;
 
-	if( !PyArg_ParseTuple(args, (char *)"i", &i) ) {
-		cout << "ERROR: Id_setSecond" << endl;
-		Py_RETURN_NONE;
-	}
+	if( !PyArg_ParseTuple(args, "i", &i) )
+		return NULL;
 
 	self->id->setSecond( i );
 

Modified: branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp
===================================================================
--- branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp	2009-03-29 21:05:03 UTC (rev 19457)
+++ branches/soc-2008-mxcurioni/source/blender/freestyle/intern/python/Interface0D/CurvePoint/BPy_StrokeVertex.cpp	2009-03-29 21:50:10 UTC (rev 19458)
@@ -160,6 +160,7 @@
 										((BPy_StrokeVertex *) obj2)->sv,
 										PyFloat_AsDouble( obj3 ) );
 	} else {
+		PyErr_SetString(PyExc_TypeError, "invalid argument(s)");
 		return -1;
 	}
 
@@ -202,10 +203,8 @@
 PyObject *StrokeVertex_setX( BPy_StrokeVertex *self , PyObject *args) {
 	double r;
 
-	if(!( PyArg_ParseTuple(args, "d", &r)  )) {
-		cout << "ERROR: StrokeVertex_setX" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "d", &r)  ))
+		return NULL;
 
 	self->sv->setX( r );
 
@@ -215,10 +214,8 @@
 PyObject *StrokeVertex_setY( BPy_StrokeVertex *self , PyObject *args) {
 	double r;
 
-	if(!( PyArg_ParseTuple(args, "d", &r)  )) {
-		cout << "ERROR: StrokeVertex_setY" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "d", &r)  ))
+		return NULL;
 
 	self->sv->setY( r );
 
@@ -229,33 +226,34 @@
 PyObject *StrokeVertex_setPoint( BPy_StrokeVertex *self , PyObject *args) {
 	PyObject *obj1 = 0, *obj2 = 0;
 
-	if(!( PyArg_ParseTuple(args, "O|O", &obj1, &obj2) )) {
-		cout << "ERROR: StrokeVertex_setPoint" << endl;
-		Py_RETURN_NONE;
-	}
+	if(!( PyArg_ParseTuple(args, "O|O", &obj1, &obj2) ))
+		return NULL;
 	
 	if( PyList_Check(obj1) && !obj2 ){
 		if ( PyList_Size(obj1) != 2 ) {
-			cout << "Error: StrokeVertex::setPoint() accepts a list of 2 elements ("
-			     << PyList_Size(obj1) << " found)" << endl;
-			Py_RETURN_NONE;
+			stringstream msg("StrokeVertex::setPoint() accepts a list of 2 elements (");
+			msg << PyList_Size(obj1) << " found)";
+			PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+			return NULL;
 		}
 		Vec2f v( 	PyFloat_AsDouble( PyList_GetItem(obj1, 0) ),
 					PyFloat_AsDouble( PyList_GetItem(obj1, 1) )  );
 		self->sv->setPoint( v );
 	} else if ( VectorObject_Check(obj1) && !obj2) {
 		if ( ((VectorObject *)obj1)->size != 2 ) {
-			cout << "Error: StrokeVertex::setPoint() accepts a vector of 2 elements ("
-			     << ((VectorObject *)obj1)->size << " found)" << endl;
-			Py_RETURN_NONE;
+			stringstream msg("StrokeVertex::setPoint() accepts a vector of 2 elements (");
+			msg << ((VectorObject *)obj1)->size << " found)";
+			PyErr_SetString(PyExc_TypeError, msg.str().c_str());
+			return NULL;
 		}
 		Vec2f *v = Vec2f_ptr_from_Vector( obj1 );
 		self->sv->setPoint( *v );
 		delete v; 
-	} else if( obj1 && obj2 ){
+	} else if( PyFloat_Check(obj1) && obj2 && PyFloat_Check(obj2) ){
 		self->sv->setPoint( PyFloat_AsDouble(obj1), PyFloat_AsDouble(obj2) );
 	} else {
-		cout << "Error: StrokeVertex::setPoint(): unknown argument type" << endl;
+		PyErr_SetString(PyExc_TypeError, "StrokeVertex::setPoint(): unknown argument type");
+		return NULL;
 	}
 
 	Py_RETURN_NONE;
@@ -264,10 +262,8 @@
 PyObject *StrokeVertex_setAttribute( BPy_StrokeVertex *self , PyObject *args) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list