123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- _magic_methods = [
- "__subclasscheck__",
- "__hex__",
- "__rmul__",
- "__float__",
- "__idiv__",
- "__setattr__",
- "__div__",
- "__invert__",
- "__nonzero__",
- "__rshift__",
- "__eq__",
- "__pos__",
- "__round__",
- "__rand__",
- "__or__",
- "__complex__",
- "__divmod__",
- "__len__",
- "__reversed__",
- "__copy__",
- "__reduce__",
- "__deepcopy__",
- "__rdivmod__",
- "__rrshift__",
- "__ifloordiv__",
- "__hash__",
- "__iand__",
- "__xor__",
- "__isub__",
- "__oct__",
- "__ceil__",
- "__imod__",
- "__add__",
- "__truediv__",
- "__unicode__",
- "__le__",
- "__delitem__",
- "__sizeof__",
- "__sub__",
- "__ne__",
- "__pow__",
- "__bytes__",
- "__mul__",
- "__itruediv__",
- "__bool__",
- "__iter__",
- "__abs__",
- "__gt__",
- "__iadd__",
- "__enter__",
- "__floordiv__",
- "__call__",
- "__neg__",
- "__and__",
- "__ixor__",
- "__getitem__",
- "__exit__",
- "__cmp__",
- "__getstate__",
- "__index__",
- "__contains__",
- "__floor__",
- "__lt__",
- "__getattr__",
- "__mod__",
- "__trunc__",
- "__delattr__",
- "__instancecheck__",
- "__setitem__",
- "__ipow__",
- "__ilshift__",
- "__long__",
- "__irshift__",
- "__imul__",
- "__lshift__",
- "__dir__",
- "__ge__",
- "__int__",
- "__ior__",
- ]
- class MockedObject:
- _name: str
- def __new__(cls, *args, **kwargs):
- # _suppress_err is set by us in the mocked module impl, so that we can
- # construct instances of MockedObject to hand out to people looking up
- # module attributes.
- # Any other attempt to construct a MockedObject instance (say, in the
- # unpickling process) should give an error.
- if not kwargs.get("_suppress_err"):
- raise NotImplementedError(
- f"Object '{cls._name}' was mocked out during packaging "
- f"but it is being used in '__new__'. If this error is "
- "happening during 'load_pickle', please ensure that your "
- "pickled object doesn't contain any mocked objects."
- )
- # Otherwise, this is just a regular object creation
- # (e.g. `x = MockedObject("foo")`), so pass it through normally.
- return super().__new__(cls)
- def __init__(self, name: str, _suppress_err: bool):
- self.__dict__["_name"] = name
- def __repr__(self):
- return f"MockedObject({self._name})"
- def install_method(method_name):
- def _not_implemented(self, *args, **kwargs):
- raise NotImplementedError(
- f"Object '{self._name}' was mocked out during packaging but it is being used in {method_name}"
- )
- setattr(MockedObject, method_name, _not_implemented)
- for method_name in _magic_methods:
- install_method(method_name)
|