From 2b09a43f99b060de8af89ba6687847666115938c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 28 Jun 2023 16:19:06 +0200 Subject: [PATCH] python: ugh, once again hit the "let's interpret an int as enum" bug. --- src/python/magnum/trade.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/python/magnum/trade.cpp b/src/python/magnum/trade.cpp index 2595036..16f9f88 100644 --- a/src/python/magnum/trade.cpp +++ b/src/python/magnum/trade.cpp @@ -957,11 +957,6 @@ void trade(py::module_& m) { /* Has to be a function instead of a property because there's an overload taking a morph target ID and an overload taking a name */ .def("attribute_count", static_cast(&Trade::MeshData::attributeCount), "Attribute array count") - .def("attribute_count", static_cast(&Trade::MeshData::attributeCount), "Attribute array count for given morph target", - #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 - py::kw_only{}, /* new in pybind11 2.6 */ - #endif - py::arg("morph_target_id")) /** @todo direct access to MeshAttributeData, once making custom MeshData is desired */ .def("has_attribute", &Trade::MeshData::hasAttribute, "Whether the mesh has given attribute", py::arg("name"), @@ -969,17 +964,22 @@ void trade(py::module_& m) { py::kw_only{}, /* new in pybind11 2.6 */ #endif py::arg("morph_target_id") = -1) - .def("attribute_count", static_cast(&Trade::MeshData::attributeCount), "Count of given named attribute", py::arg("name"), - #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 - py::kw_only{}, /* new in pybind11 2.6 */ - #endif - py::arg("morph_target_id") = -1) /* IMPORTANT: due to pybind11 behavioral differences on (already EOL'd) Python 3.7 the following overloads need to have the MeshAttribute overload *before* the UnsignedInt overload, otherwise the integer overload gets picked even if an enum is passed from Python, causing massive suffering */ + .def("attribute_count", static_cast(&Trade::MeshData::attributeCount), "Count of given named attribute", py::arg("name"), + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif + py::arg("morph_target_id") = -1) + .def("attribute_count", static_cast(&Trade::MeshData::attributeCount), "Attribute array count for given morph target", + #if PYBIND11_VERSION_MAJOR*100 + PYBIND11_VERSION_MINOR >= 206 + py::kw_only{}, /* new in pybind11 2.6 */ + #endif + py::arg("morph_target_id")) .def("attribute_name", [](Trade::MeshData& self, UnsignedInt id) { if(id >= self.attributeCount()) { PyErr_SetNone(PyExc_IndexError);