| 447 | } |
| 448 | |
| 449 | App::any pyObjectToAny(Py::Object value, bool check) { |
| 450 | |
| 451 | if(value.isNone()) |
| 452 | return {}; |
| 453 | |
| 454 | PyObject *pyvalue = value.ptr(); |
| 455 | |
| 456 | if(!check) |
| 457 | return {pyObjectWrap(pyvalue)}; |
| 458 | |
| 459 | if (PyObject_TypeCheck(pyvalue, &Base::QuantityPy::Type)) { |
| 460 | Base::QuantityPy * qp = static_cast<Base::QuantityPy*>(pyvalue); |
| 461 | Base::Quantity * q = qp->getQuantityPtr(); |
| 462 | |
| 463 | return App::any(*q); |
| 464 | } |
| 465 | if (PyFloat_Check(pyvalue)) |
| 466 | return App::any(PyFloat_AsDouble(pyvalue)); |
| 467 | if (PyLong_Check(pyvalue)) |
| 468 | return App::any(PyLong_AsLong(pyvalue)); |
| 469 | else if (PyUnicode_Check(pyvalue)) { |
| 470 | const char* utf8value = PyUnicode_AsUTF8(pyvalue); |
| 471 | if (!utf8value) { |
| 472 | FC_THROWM(Base::ValueError, "Invalid unicode string"); |
| 473 | } |
| 474 | return App::any(std::string(utf8value)); |
| 475 | } |
| 476 | else { |
| 477 | return App::any(pyObjectWrap(pyvalue)); |
| 478 | } |
| 479 | } |
| 480 | |
| 481 | bool pyToQuantity(Quantity &q, const Py::Object &pyobj) { |
| 482 | if (PyObject_TypeCheck(*pyobj, &Base::QuantityPy::Type)) |
no test coverage detected