| 673 | } |
| 674 | |
| 675 | ExpressionPtr expressionFromPy(const DocumentObject* owner, const Py::Object& value) |
| 676 | { |
| 677 | if (value.isNone()) |
| 678 | return std::make_unique<PyObjectExpression>(owner); |
| 679 | if(value.isString()) { |
| 680 | return std::make_unique<StringExpression>(owner, value.as_string()); |
| 681 | } else if (PyObject_TypeCheck(value.ptr(),&QuantityPy::Type)) { |
| 682 | return std::make_unique<NumberExpression>( |
| 683 | owner, |
| 684 | *static_cast<QuantityPy*>(value.ptr())->getQuantityPtr() |
| 685 | ); |
| 686 | } else if (value.isBoolean()) { |
| 687 | if (value.isTrue()) { |
| 688 | return std::make_unique<ConstantExpression>(owner, "True", Quantity(1.0)); |
| 689 | } |
| 690 | else { |
| 691 | return std::make_unique<ConstantExpression>(owner, "False", Quantity(0.0)); |
| 692 | } |
| 693 | } else { |
| 694 | Quantity q; |
| 695 | if (pyToQuantity(q, value)) { |
| 696 | return std::make_unique<NumberExpression>(owner, q); |
| 697 | } |
| 698 | } |
| 699 | return std::make_unique<PyObjectExpression>(owner, value.ptr()); |
| 700 | } |
| 701 | |
| 702 | } // namespace App |
| 703 | |