diff --git a/src/App/GroupExtension.pyi b/src/App/GroupExtension.pyi index cef2617867..8d50bc416b 100644 --- a/src/App/GroupExtension.pyi +++ b/src/App/GroupExtension.pyi @@ -70,3 +70,9 @@ class GroupExtension(DocumentObjectExtension): @param recursive if true check also if the obj is child of some sub group (default is false). """ ... + + def allowObject(self, obj: Any) -> bool: + """ + Returns true if obj is allowed in the group extension. + """ + ... diff --git a/src/App/GroupExtensionPyImp.cpp b/src/App/GroupExtensionPyImp.cpp index a13fbd7f65..fc281215d8 100644 --- a/src/App/GroupExtensionPyImp.cpp +++ b/src/App/GroupExtensionPyImp.cpp @@ -318,3 +318,30 @@ int GroupExtensionPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj* { return 0; } + +// def allowObject(self, obj: Any) -> bool: +PyObject* GroupExtensionPy::allowObject(PyObject* args) +{ + PyObject* object; + if (!PyArg_ParseTuple(args, "O!", &(DocumentObjectPy::Type), &object)) { + return nullptr; + } + + auto* docObj = static_cast(object); + if (!docObj->getDocumentObjectPtr() + || !docObj->getDocumentObjectPtr()->isAttachedToDocument()) { + PyErr_SetString(Base::PyExc_FC_GeneralError, "Cannot check an invalid object"); + return nullptr; + } + if (docObj->getDocumentObjectPtr()->getDocument() + != getGroupExtensionPtr()->getExtendedObject()->getDocument()) { + PyErr_SetString(Base::PyExc_FC_GeneralError, + "Cannot check an object from another document from this group"); + return nullptr; + } + + GroupExtension* grp = getGroupExtensionPtr(); + + bool allowed = grp->allowObject(docObj->getDocumentObjectPtr()); + return PyBool_FromLong(allowed ? 1 : 0); +}