Skip to content

Commit 23cea3a

Browse files
committed
Assign __module__ properly for py3 enums
1 parent d5e39cf commit 23cea3a

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

include/pybind11/pybind11.h

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,11 +1243,19 @@ class py3_enum {
12431243
public:
12441244
using underlying_type = typename std::underlying_type<T>::type;
12451245

1246-
py3_enum(handle scope, const char* enum_name)
1247-
: name(enum_name),
1248-
parent(scope),
1246+
py3_enum(handle scope, const char* name)
1247+
: name(name),
1248+
scope(scope),
12491249
ctor(module::import("enum").attr("IntEnum")),
12501250
unique(module::import("enum").attr("unique")) {
1251+
kwargs["value"] = cast(name);
1252+
kwargs["names"] = entries;
1253+
if (scope) {
1254+
if (hasattr(scope, "__module__"))
1255+
kwargs["module"] = scope.attr("__module__");
1256+
else if (hasattr(scope, "__name__"))
1257+
kwargs["module"] = scope.attr("__name__");
1258+
}
12511259
update();
12521260
}
12531261

@@ -1259,14 +1267,15 @@ class py3_enum {
12591267

12601268
private:
12611269
const char *name;
1262-
handle parent;
1270+
handle scope;
12631271
dict entries;
12641272
object ctor;
12651273
object unique;
1274+
dict kwargs;
12661275

12671276
void update() {
1268-
object type = unique(ctor(name, entries));
1269-
setattr(parent, name, type);
1277+
object type = unique(ctor(**kwargs));
1278+
setattr(scope, name, type);
12701279
detail::type_caster<T>::bind(type, entries);
12711280
}
12721281
};

tests/test_enum.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ def test_py3_enum():
135135
for tp, entries in expected.items():
136136
assert issubclass(tp, IntEnum)
137137
assert sorted(tp.__members__.items()) == entries
138+
assert tp.__module__ == 'pybind11_tests'
138139

139140
assert make_py3_enum(True) is Py3EnumScoped.X
140141
assert make_py3_enum(False) is Py3EnumScoped.Y

0 commit comments

Comments
 (0)