File tree 2 files changed +16
-6
lines changed 2 files changed +16
-6
lines changed Original file line number Diff line number Diff line change @@ -1259,11 +1259,19 @@ class py3_enum {
1259
1259
public:
1260
1260
using underlying_type = typename std::underlying_type<T>::type;
1261
1261
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),
1265
1265
ctor(module::import(" enum" ).attr(" IntEnum" )),
1266
1266
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
+ }
1267
1275
update ();
1268
1276
}
1269
1277
@@ -1275,14 +1283,15 @@ class py3_enum {
1275
1283
1276
1284
private:
1277
1285
const char *name;
1278
- handle parent ;
1286
+ handle scope ;
1279
1287
dict entries;
1280
1288
object ctor;
1281
1289
object unique;
1290
+ dict kwargs;
1282
1291
1283
1292
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);
1286
1295
detail::type_caster<T>::bind (type, entries);
1287
1296
}
1288
1297
};
Original file line number Diff line number Diff line change @@ -135,6 +135,7 @@ def test_py3_enum():
135
135
for tp , entries in expected .items ():
136
136
assert issubclass (tp , IntEnum )
137
137
assert sorted (tp .__members__ .items ()) == entries
138
+ assert tp .__module__ == 'pybind11_tests'
138
139
139
140
assert make_py3_enum (True ) is Py3EnumScoped .X
140
141
assert make_py3_enum (False ) is Py3EnumScoped .Y
You can’t perform that action at this time.
0 commit comments