Skip to content

Commit aafaef8

Browse files
committed
Assign __module__ properly for py3 enums
1 parent b6b5efa commit aafaef8

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
@@ -1259,11 +1259,19 @@ class py3_enum {
12591259
public:
12601260
using underlying_type = typename std::underlying_type<T>::type;
12611261

1262-
py3_enum(handle scope, const char* enum_name)
1263-
: name(enum_name),
1264-
parent(scope),
1262+
py3_enum(handle scope, const char* name)
1263+
: name(name),
1264+
scope(scope),
12651265
ctor(module::import("enum").attr("IntEnum")),
12661266
unique(module::import("enum").attr("unique")) {
1267+
kwargs["value"] = cast(name);
1268+
kwargs["names"] = entries;
1269+
if (scope) {
1270+
if (hasattr(scope, "__module__"))
1271+
kwargs["module"] = scope.attr("__module__");
1272+
else if (hasattr(scope, "__name__"))
1273+
kwargs["module"] = scope.attr("__name__");
1274+
}
12671275
update();
12681276
}
12691277

@@ -1275,14 +1283,15 @@ class py3_enum {
12751283

12761284
private:
12771285
const char *name;
1278-
handle parent;
1286+
handle scope;
12791287
dict entries;
12801288
object ctor;
12811289
object unique;
1290+
dict kwargs;
12821291

12831292
void update() {
1284-
object type = unique(ctor(name, entries));
1285-
setattr(parent, name, type);
1293+
object type = unique(ctor(**kwargs));
1294+
setattr(scope, name, type);
12861295
detail::type_caster<T>::bind(type, entries);
12871296
}
12881297
};

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)