Skip to content

Commit 674f986

Browse files
committed
Add support for __class__ in escape hatch
1 parent 79bb1d4 commit 674f986

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

metaflow/plugins/env_escape/stub.py

+13-9
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
"__init__",
4848
"__metaclass__",
4949
"__module__",
50+
"__name__",
5051
"__new__",
5152
"__reduce__",
5253
"__reduce_ex__",
@@ -78,11 +79,11 @@ def fwd_request(stub, request_type, *args, **kwargs):
7879

7980

8081
class StubMetaClass(type):
81-
def __repr__(self):
82-
if self.__module__:
83-
return "<stub class '%s.%s'>" % (self.__module__, self.__name__)
82+
def __repr__(cls):
83+
if cls.__module__:
84+
return "<stub class '%s.%s'>" % (cls.__module__, cls.__name__)
8485
else:
85-
return "<stub class '%s'>" % (self.__name__,)
86+
return "<stub class '%s'>" % (cls.__name__,)
8687

8788

8889
def with_metaclass(meta, *bases):
@@ -131,9 +132,7 @@ def __del__(self):
131132

132133
def __getattribute__(self, name):
133134
if name in LOCAL_ATTRS:
134-
if name == "__class__":
135-
return None
136-
elif name == "__doc__":
135+
if name == "__doc__":
137136
return self.__getattr__("__doc__")
138137
elif name in DELETED_ATTRS:
139138
raise AttributeError()
@@ -455,9 +454,14 @@ def _do_str(self):
455454
# it but not the case if we are not.
456455
class_dict["__slots__"].append("__weakref__")
457456

457+
class_module, class_name_only = class_name.rsplit(".", 1)
458458
class_dict["___local_overrides___"] = overriden_attrs
459+
class_dict["__module__"] = class_module
459460
if parents:
460-
return MetaExceptionWithConnection(
461+
to_return = MetaExceptionWithConnection(
461462
class_name, (Stub, *parents), class_dict, connection
462463
)
463-
return MetaWithConnection(class_name, (Stub,), class_dict, connection)
464+
else:
465+
to_return = MetaWithConnection(class_name, (Stub,), class_dict, connection)
466+
to_return.__name__ = class_name_only
467+
return to_return

test/env_escape/example.py

+6
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ def run_test(through_escape=False):
8383
print("-- Test chaining of exported classes --")
8484
o2 = o1.to_class2(5)
8585
assert o2.something("foo") == "Test2:Something:foo"
86+
assert o2.__class__.__name__ == "TestClass2"
87+
assert o2.__class__.__module__ == "test_lib"
8688

8789
print("-- Test Iterating --")
8890
for idx, i in enumerate(o2):
@@ -108,6 +110,8 @@ def run_test(through_escape=False):
108110
assert isinstance(ex_child, test.ExceptionAndClass)
109111
assert isinstance(ex_child, Exception)
110112
assert isinstance(ex_child, object)
113+
assert ex_child.__class__.__name__ == "ExceptionAndClassChild"
114+
assert ex_child.__class__.__module__ == "test_lib"
111115

112116
assert issubclass(type(ex_child), test.ExceptionAndClass)
113117
assert issubclass(test.ExceptionAndClassChild, test.ExceptionAndClass)
@@ -149,6 +153,8 @@ def run_test(through_escape=False):
149153
excclass = o1.raiseOrReturnSomeException()
150154
assert not through_escape, "Should have raised through escape"
151155
assert isinstance(excclass, test.SomeException)
156+
assert excclass.__class__.__name__ == "SomeException"
157+
assert excclass.__class__.__module__ == "test_lib"
152158
except RuntimeError as e:
153159
assert (
154160
through_escape

0 commit comments

Comments
 (0)