ConstAllocationTransformRcPtr GetConstAllocationTransform(PyObject * pyobject, bool allowCast) { ConstAllocationTransformRcPtr transform = \ DynamicPtrCast<const AllocationTransform>(GetConstTransform(pyobject, allowCast)); if(!transform) { throw Exception("PyObject must be a valid OCIO.AllocationTransform."); } return transform; }
PyObject * PyOCIO_GroupTransform_push_back(PyObject * self, PyObject * args) { OCIO_PYTRY_ENTER() PyObject* pytransform = 0; if (!PyArg_ParseTuple(args,"O:push_back", &pytransform)) return NULL; GroupTransformRcPtr transform = GetEditableGroupTransform(self); if(!IsPyTransform(pytransform)) throw Exception("GroupTransform.push_back requires a transform as the first arg."); transform->push_back(GetConstTransform(pytransform, true)); Py_RETURN_NONE; OCIO_PYTRY_EXIT(NULL) }
bool FillTransformVectorFromPySequence(PyObject* datalist, std::vector<ConstTransformRcPtr> &data) { data.clear(); if(PyListOrTuple_Check(datalist)) { int sequenceSize = PyListOrTuple_GET_SIZE(datalist); data.reserve(sequenceSize); for(int i=0; i < sequenceSize; i++) { PyObject* item = PyListOrTuple_GET_ITEM(datalist, i); ConstTransformRcPtr val; try { val = GetConstTransform(item, true); } catch(...) { data.clear(); return false; } data.push_back( val ); } return true; } else { PyObject *item; PyObject *iter = PyObject_GetIter(datalist); if (iter == NULL) { PyErr_Clear(); return false; } while((item = PyIter_Next(iter)) != NULL) { ConstTransformRcPtr val; try { val = GetConstTransform(item, true); } catch(...) { Py_DECREF(item); Py_DECREF(iter); data.clear(); return false; } data.push_back(val); Py_DECREF(item); } Py_DECREF(iter); if (PyErr_Occurred()) { PyErr_Clear(); data.clear(); return false; } return true; } }