Expose PropertyEnumeration values list to python.

This commit is contained in:
Markus Lampert
2020-12-31 20:06:02 -08:00
parent 2203dcec93
commit 8fbbfb29d8
4 changed files with 38 additions and 1 deletions

View File

@@ -97,6 +97,11 @@ text names of the status.
<UserDocu>Return the documentation string of the property of this class.</UserDocu>
</Documentation>
</Methode>
<Methode Name="getEnumerationsOfProperty">
<Documentation>
<UserDocu>Return all enumeration strings of the property of this class or None if not a PropertyEnumeration.</UserDocu>
</Documentation>
</Methode>
<Methode Name="dumpPropertyContent" Keyword="true" Const="true">
<Documentation>
<UserDocu>Dumps the content of the property, both the XML representation as well as the additional datafiles

View File

@@ -357,7 +357,34 @@ PyObject* PropertyContainerPy::getDocumentationOfProperty(PyObject *args)
else
return Py::new_reference_to(Py::String(""));
}
PyObject* PropertyContainerPy::getEnumerationsOfProperty(PyObject *args)
{
char *pstr;
if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C
return NULL; // NULL triggers exception
Property* prop = getPropertyContainerPtr()->getPropertyByName(pstr);
if (!prop) {
PyErr_Format(PyExc_AttributeError, "Property container has no property '%s'", pstr);
return 0;
}
PropertyEnumeration *enumProp = dynamic_cast<PropertyEnumeration*>(prop);
if (!enumProp) {
Py_INCREF(Py_None);
return Py_None;
}
std::vector<std::string> enumerations = enumProp->getEnumVector();
Py::List ret;
for (std::vector<std::string>::const_iterator it = enumerations.begin(); it != enumerations.end(); ++it) {
ret.append(Py::String(*it));
}
return Py::new_reference_to(ret);
}
Py::List PropertyContainerPy::getPropertiesList(void) const
{
Py::List ret;

View File

@@ -80,6 +80,9 @@ class DocumentObject(object):
def getDocumentationOfProperty(self,attr):
"returns the documentation string of a given property"
return self.__object__.getDocumentationOfProperty(attr)
def getEnumerationsOfProperty(self,attr):
"returns the documentation string of a given property"
return self.__object__.getEnumerationsOfProperty(attr)
def touch(self):
"marks this object to be recomputed"
return self.__object__.touch()

View File

@@ -143,6 +143,7 @@ class DocumentBasicCases(unittest.TestCase):
self.failUnless(not L1.getDocumentationOfProperty("Source1") == "")
self.failUnless(L1.getGroupOfProperty("Source1") == "Feature Test")
self.failUnless(L1.getTypeOfProperty("Source1") == [])
self.failUnless(L1.getEnumerationsOfProperty("Source1") is None)
# test the constraint types ( both are constraint to percent range)
@@ -170,6 +171,7 @@ class DocumentBasicCases(unittest.TestCase):
FreeCAD.Console.PrintLog(" exception thrown, OK\n")
else:
self.fail("no exception thrown")
self.failUnless(sorted(L1.getEnumerationsOfProperty('Enum')) == sorted(['Zero', 'One', 'Two', 'Three', 'Four']))
#self.failUnless(L1.IntegerList == [4711] )
#f = L1.FloatList