| 457 | } |
| 458 | |
| 459 | PyObject* DocumentPy::copyObject(PyObject* args, PyObject* kwd) |
| 460 | { |
| 461 | PyObject* obj; |
| 462 | PyObject* rec = Py_False; |
| 463 | PyObject* retAll = Py_False; |
| 464 | static constexpr std::array<const char*, 4> kwlist {"object", "recursive", "return_all", nullptr}; |
| 465 | if (!Base::Wrapped_ParseTupleAndKeywords(args, |
| 466 | kwd, |
| 467 | "O|O!O!", |
| 468 | kwlist, |
| 469 | &obj, |
| 470 | &PyBool_Type, |
| 471 | &rec, |
| 472 | &PyBool_Type, |
| 473 | &retAll)) { |
| 474 | return nullptr; |
| 475 | } |
| 476 | |
| 477 | std::vector<App::DocumentObject*> objs; |
| 478 | bool single = false; |
| 479 | if (PySequence_Check(obj)) { |
| 480 | Py::Sequence seq(obj); |
| 481 | for (Py_ssize_t i = 0; i < seq.size(); ++i) { |
| 482 | if (!PyObject_TypeCheck(seq[i].ptr(), &DocumentObjectPy::Type)) { |
| 483 | PyErr_SetString(PyExc_TypeError, |
| 484 | "Expect element in sequence to be of type document object"); |
| 485 | return nullptr; |
| 486 | } |
| 487 | objs.push_back(static_cast<DocumentObjectPy*>(seq[i].ptr())->getDocumentObjectPtr()); |
| 488 | } |
| 489 | } |
| 490 | else if (!PyObject_TypeCheck(obj, &DocumentObjectPy::Type)) { |
| 491 | PyErr_SetString( |
| 492 | PyExc_TypeError, |
| 493 | "Expect first argument to be either a document object or sequence of document objects"); |
| 494 | return nullptr; |
| 495 | } |
| 496 | else { |
| 497 | objs.push_back(static_cast<DocumentObjectPy*>(obj)->getDocumentObjectPtr()); |
| 498 | single = true; |
| 499 | } |
| 500 | |
| 501 | PY_TRY |
| 502 | { |
| 503 | auto ret = |
| 504 | getDocumentPtr()->copyObject(objs, Base::asBoolean(rec), Base::asBoolean(retAll)); |
| 505 | if (ret.size() == 1 && single) { |
| 506 | return ret[0]->getPyObject(); |
| 507 | } |
| 508 | |
| 509 | Py::Tuple tuple(ret.size()); |
| 510 | for (size_t i = 0; i < ret.size(); ++i) { |
| 511 | tuple.setItem(i, Py::Object(ret[i]->getPyObject(), true)); |
| 512 | } |
| 513 | return Py::new_reference_to(tuple); |
| 514 | } |
| 515 | PY_CATCH |
| 516 | } |
nothing calls this directly
no test coverage detected