diff --git a/src/App/PropertyLinks.cpp b/src/App/PropertyLinks.cpp index dca519f014..c49afd62fb 100644 --- a/src/App/PropertyLinks.cpp +++ b/src/App/PropertyLinks.cpp @@ -3471,11 +3471,24 @@ PyObject *PropertyXLink::getPyObject(void) { if(!_pcLink) Py_Return; - if(_SubList.empty()) + const auto &subs = getSubValues(false); + if(subs.empty()) return _pcLink->getPyObject(); Py::Tuple ret(2); ret.setItem(0,Py::Object(_pcLink->getPyObject(),true)); - ret.setItem(1,Py::String(getSubName(true))); + PropertyString propString; + if (subs.size() == 1) { + propString.setValue(subs.front()); + ret.setItem(1,Py::asObject(propString.getPyObject())); + } else { + Py::List list(subs.size()); + int i = 0; + for (auto &sub : subs) { + propString.setValue(sub); + list[i++] = Py::asObject(propString.getPyObject()); + } + ret.setItem(1, list); + } return Py::new_reference_to(ret); } @@ -3492,16 +3505,19 @@ void PropertyXLink::setPyObject(PyObject *value) { return; } else if(!PyObject_TypeCheck(pyObj.ptr(), &DocumentObjectPy::Type)) throw Base::TypeError("Expect the first element to be of 'DocumentObject'"); - if(pySub.isString()) - subs.push_back(pySub.as_string()); - else if(pySub.isSequence()) { + PropertyString propString; + if(pySub.isString()) { + propString.setPyObject(pySub.ptr()); + subs.push_back(propString.getStrValue()); + } else if (pySub.isSequence()) { Py::Sequence seq(pySub); subs.reserve(seq.size()); for(size_t i=0;i(_SubList.size())); - if (_pcLink) - tup[0] = Py::asObject(_pcLink->getPyObject()); - else { - tup[0] = Py::None(); - if(_SubList.empty()) - Py_Return; + if(!_pcLink) + Py_Return; + Py::Tuple ret(2); + ret.setItem(0,Py::Object(_pcLink->getPyObject(),true)); + const auto &subs = getSubValues(false); + Py::List list(subs.size()); + int i = 0; + PropertyString propString; + for (auto &sub : subs) { + propString.setValue(sub); + list[i++] = Py::asObject(propString.getPyObject()); } - for(unsigned int i = 0;i<_SubList.size(); i++) - list[i] = Py::String(_SubList[i]); - tup[1] = list; - return Py::new_reference_to(tup); + ret.setItem(1, list); + return Py::new_reference_to(ret); } //**************************************************************************