MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / PyInit

Method PyInit

src/Base/UnitPyImp.cpp:51–111  ·  view source on GitHub ↗

constructor method

Source from the content-addressed store, hash-verified

49
50// constructor method
51int UnitPy::PyInit(PyObject* args, PyObject* /*kwd*/)
52{
53 PyObject* object {};
54 Unit* self = getUnitPtr();
55
56 // get quantity
57 if (PyArg_ParseTuple(args, "O!", &(QuantityPy::Type), &object)) {
58 *self = static_cast<QuantityPy*>(object)->getQuantityPtr()->getUnit();
59 return 0;
60 }
61 PyErr_Clear(); // set by PyArg_ParseTuple()
62
63 // get unit
64 if (PyArg_ParseTuple(args, "O!", &(UnitPy::Type), &object)) {
65 *self = *(static_cast<UnitPy*>(object)->getUnitPtr());
66 return 0;
67 }
68 PyErr_Clear(); // set by PyArg_ParseTuple()
69
70 // get string
71 char* string {};
72 if (PyArg_ParseTuple(args, "et", "utf-8", &string)) {
73 std::string str(string);
74 PyMem_Free(string);
75 try {
76 *self = Quantity::parse(str).getUnit();
77 return 0;
78 }
79 catch (const ParserError& e) {
80 PyErr_SetString(PyExc_ValueError, e.what());
81 return -1;
82 }
83 }
84 PyErr_Clear(); // set by PyArg_ParseTuple()
85
86 int i1 {0};
87 int i2 {0};
88 int i3 {0};
89 int i4 {0};
90 int i5 {0};
91 int i6 {0};
92 int i7 {0};
93 int i8 {0};
94 if (PyArg_ParseTuple(args, "|iiiiiiii", &i1, &i2, &i3, &i4, &i5, &i6, &i7, &i8)) {
95 try {
96 *self = Unit(i1, i2, i3, i4, i5, i6, i7, i8);
97 return 0;
98 }
99 catch (const OverflowError& e) {
100 PyErr_SetString(PyExc_OverflowError, e.what());
101 return -1;
102 }
103 catch (const UnderflowError& e) {
104 PyErr_SetString(PyExc_OverflowError, e.what());
105 return -1;
106 }
107 }
108

Callers

nothing calls this directly

Calls 4

UnitFunction · 0.70
parseFunction · 0.50
getUnitMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected