[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35585] trunk/blender/source/blender/ python/generic/mathutils_Vector.c: fix for [#26524] Api autocomplete more errors
Campbell Barton
ideasman42 at gmail.com
Thu Mar 17 05:43:58 CET 2011
Revision: 35585
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35585
Author: campbellbarton
Date: 2011-03-17 04:43:58 +0000 (Thu, 17 Mar 2011)
Log Message:
-----------
fix for [#26524] Api autocomplete more errors
problem was caused by change in python behavior, now hasattr(val, attr) only suppresses attribute exceptions.
Modified Paths:
--------------
trunk/blender/source/blender/python/generic/mathutils_Vector.c
Modified: trunk/blender/source/blender/python/generic/mathutils_Vector.c
===================================================================
--- trunk/blender/source/blender/python/generic/mathutils_Vector.c 2011-03-17 02:53:56 UTC (rev 35584)
+++ trunk/blender/source/blender/python/generic/mathutils_Vector.c 2011-03-17 04:43:58 UTC (rev 35585)
@@ -792,12 +792,13 @@
return self->size;
}
/* sequence accessor (get): vector[index] */
-static PyObject *Vector_item(VectorObject *self, int i)
+static PyObject *vector_item_internal(VectorObject *self, int i, const int is_attr)
{
if(i<0) i= self->size-i;
if(i < 0 || i >= self->size) {
- PyErr_SetString(PyExc_IndexError,"vector[index]: out of range");
+ if(is_attr) PyErr_Format(PyExc_AttributeError,"vector.%c: unavailable on %dd vector", *(((char *)"xyzw") + i), self->size);
+ else PyErr_SetString(PyExc_IndexError,"vector[index]: out of range");
return NULL;
}
@@ -806,11 +807,16 @@
return PyFloat_FromDouble(self->vec[i]);
}
+
+static PyObject *Vector_item(VectorObject *self, int i)
+{
+ return vector_item_internal(self, i, FALSE);
+}
/* sequence accessor (set): vector[index] = value */
-static int Vector_ass_item(VectorObject *self, int i, PyObject * ob)
+static int vector_ass_item_internal(VectorObject *self, int i, PyObject *value, const int is_attr)
{
float scalar;
- if((scalar=PyFloat_AsDouble(ob))==-1.0f && PyErr_Occurred()) { /* parsed item not a number */
+ if((scalar=PyFloat_AsDouble(value))==-1.0f && PyErr_Occurred()) { /* parsed item not a number */
PyErr_SetString(PyExc_TypeError, "vector[index] = x: index argument not a number");
return -1;
}
@@ -818,7 +824,8 @@
if(i<0) i= self->size-i;
if(i < 0 || i >= self->size){
- PyErr_SetString(PyExc_IndexError, "vector[index] = x: assignment index out of range");
+ if(is_attr) PyErr_Format(PyExc_AttributeError,"vector.%c = x: unavailable on %dd vector", *(((char *)"xyzw") + i), self->size);
+ else PyErr_SetString(PyExc_IndexError, "vector[index] = x: assignment index out of range");
return -1;
}
self->vec[i] = scalar;
@@ -828,6 +835,11 @@
return 0;
}
+static int Vector_ass_item(VectorObject *self, int i, PyObject *value)
+{
+ return vector_ass_item_internal(self, i, value, FALSE);
+}
+
/* sequence slice (get): vector[a:b] */
static PyObject *Vector_slice(VectorObject *self, int begin, int end)
{
@@ -1461,12 +1473,12 @@
static PyObject *Vector_getAxis(VectorObject *self, void *type)
{
- return Vector_item(self, GET_INT_FROM_POINTER(type));
+ return vector_item_internal(self, GET_INT_FROM_POINTER(type), TRUE);
}
static int Vector_setAxis(VectorObject *self, PyObject * value, void *type)
{
- return Vector_ass_item(self, GET_INT_FROM_POINTER(type), value);
+ return vector_ass_item_internal(self, GET_INT_FROM_POINTER(type), value, TRUE);
}
/* vector.length */
More information about the Bf-blender-cvs
mailing list