[Bf-blender-cvs] [c592ebf] master: Freestyle: a follow-up fix of trunk revision 61233. When an iterator has reached the end, any reference of the object pointed by it will now lead to a RuntimeError instead of returning None, with the aim of forcing Python API users to check the end of iteration rather than implicitly indicating the error condition.

Campbell Barton ideasman42 at gmail.com
Sun Nov 17 05:07:59 CET 2013


Is there a reason to use PyExc_RuntimeError?, other parts of
freestyles code use: PyErr_SetNone(PyExc_StopIteration);

On Sun, Nov 17, 2013 at 9:12 AM, Tamito Kajiyama
<noreply at git.blender.org> wrote:
> Commit: c592ebf5df4a2be3b70bd3e2f2bba0e3d5908704
> Author: Tamito Kajiyama
> Date:   Sat Nov 16 22:10:27 2013 +0000
> http://developer.blender.org/rBc592ebf5df4a2be3b70bd3e2f2bba0e3d5908704
>
> Freestyle: a follow-up fix of trunk revision 61233.  When an iterator has reached
> the end, any reference of the object pointed by it will now lead to a RuntimeError
> instead of returning None, with the aim of forcing Python API users to check the
> end of iteration rather than implicitly indicating the error condition.
>
> Acknowledgement to flokkievids for API discussions in the BlenderArtists.org
> Freestyle for Blender thread.
>
> ===================================================================
>
> M       source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_CurvePointIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp
> M       source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp
>
> ===================================================================
>
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp
> index 0daaa1a0..2927297 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_AdjacencyIterator.cpp
> @@ -115,8 +115,10 @@ PyDoc_STRVAR(AdjacencyIterator_object_doc,
>
>  static PyObject *AdjacencyIterator_object_get(BPy_AdjacencyIterator *self, void *UNUSED(closure))
>  {
> -       if (self->a_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (self->a_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         ViewEdge *ve = self->a_it->operator*();
>         if (ve)
>                 return BPy_ViewEdge_from_ViewEdge(*ve);
> @@ -131,6 +133,10 @@ PyDoc_STRVAR(AdjacencyIterator_is_incoming_doc,
>
>  static PyObject *AdjacencyIterator_is_incoming_get(BPy_AdjacencyIterator *self, void *UNUSED(closure))
>  {
> +       if (self->a_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         return PyBool_from_bool(self->a_it->isIncoming());
>  }
>
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp
> index 91e8de1..9a4eb2b 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_ChainingIterator.cpp
> @@ -175,8 +175,10 @@ PyDoc_STRVAR(ChainingIterator_object_doc,
>
>  static PyObject *ChainingIterator_object_get(BPy_ChainingIterator *self, void *UNUSED(closure))
>  {
> -       if (self->c_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (self->c_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         ViewEdge *ve = self->c_it->operator*();
>         if (ve)
>                 return BPy_ViewEdge_from_ViewEdge(*ve);
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_CurvePointIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_CurvePointIterator.cpp
> index 1655b76..0329aa9 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_CurvePointIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_CurvePointIterator.cpp
> @@ -97,8 +97,10 @@ PyDoc_STRVAR(CurvePointIterator_object_doc,
>
>  static PyObject *CurvePointIterator_object_get(BPy_CurvePointIterator *self, void *UNUSED(closure))
>  {
> -       if (self->cp_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (self->cp_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         return BPy_CurvePoint_from_CurvePoint(self->cp_it->operator*());
>  }
>
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp
> index 2f6c8ff..3a24626 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_Interface0DIterator.cpp
> @@ -123,8 +123,10 @@ PyDoc_STRVAR(Interface0DIterator_object_doc,
>
>  static PyObject *Interface0DIterator_object_get(BPy_Interface0DIterator *self, void *UNUSED(closure))
>  {
> -       if (self->if0D_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (self->if0D_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         return Any_BPy_Interface0D_from_Interface0D(self->if0D_it->operator*());
>  }
>
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp
> index d493b6c..ccf52c6 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_SVertexIterator.cpp
> @@ -115,6 +115,10 @@ PyDoc_STRVAR(SVertexIterator_object_doc,
>
>  static PyObject *SVertexIterator_object_get(BPy_SVertexIterator *self, void *UNUSED(closure))
>  {
> +       if (self->sv_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         SVertex *sv = self->sv_it->operator->();
>         if (sv)
>                 return BPy_SVertex_from_SVertex(*sv);
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp
> index 3174980..8287e28 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_StrokeVertexIterator.cpp
> @@ -109,8 +109,10 @@ PyDoc_STRVAR(StrokeVertexIterator_object_doc,
>
>  static PyObject *StrokeVertexIterator_object_get(BPy_StrokeVertexIterator *self, void *UNUSED(closure))
>  {
> -       if (!self->reversed && self->sv_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (!self->reversed && self->sv_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         StrokeVertex *sv = self->sv_it->operator->();
>         if (sv)
>                 return BPy_StrokeVertex_from_StrokeVertex(*sv);
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp
> index c191a94..87e05a7 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_ViewEdgeIterator.cpp
> @@ -122,8 +122,10 @@ PyDoc_STRVAR(ViewEdgeIterator_object_doc,
>
>  static PyObject *ViewEdgeIterator_object_get(BPy_ViewEdgeIterator *self, void *UNUSED(closure))
>  {
> -       if (!self->ve_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (!self->ve_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         ViewEdge *ve = self->ve_it->operator*();
>         if (ve)
>                 return BPy_ViewEdge_from_ViewEdge(*ve);
> @@ -140,7 +142,8 @@ static PyObject *ViewEdgeIterator_current_edge_get(BPy_ViewEdgeIterator *self, v
>         ViewEdge *ve = self->ve_it->getCurrentEdge();
>         if (ve)
>                 return BPy_ViewEdge_from_ViewEdge(*ve);
> -       Py_RETURN_NONE;}
> +       Py_RETURN_NONE;
> +}
>
>  static int ViewEdgeIterator_current_edge_set(BPy_ViewEdgeIterator *self, PyObject *value, void *UNUSED(closure))
>  {
> diff --git a/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp b/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp
> index cbefcd3..12ca3d6 100644
> --- a/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp
> +++ b/source/blender/freestyle/intern/python/Iterator/BPy_orientedViewEdgeIterator.cpp
> @@ -103,8 +103,10 @@ PyDoc_STRVAR(orientedViewEdgeIterator_object_doc,
>
>  static PyObject *orientedViewEdgeIterator_object_get(BPy_orientedViewEdgeIterator *self, void *UNUSED(closure))
>  {
> -       if (self->ove_it->isEnd())
> -               Py_RETURN_NONE;
> +       if (self->ove_it->isEnd()) {
> +               PyErr_SetString(PyExc_RuntimeError, "iteration has stopped");
> +               return NULL;
> +       }
>         return BPy_directedViewEdge_from_directedViewEdge(self->ove_it->operator*());
>  }
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs



-- 
- Campbell



More information about the Bf-blender-cvs mailing list