| # This may be loaded as a module, in the current __main__ module, | |
| # or in another __main__ module. | |
| ####################################### | |
| # functions and generators | |
| from test._code_definitions import * | |
| ####################################### | |
| # classes | |
| class Spam: | |
| # minimal | |
| pass | |
| class SpamOkay: | |
| def okay(self): | |
| return True | |
| class SpamFull: | |
| a: object | |
| b: object | |
| c: object | |
| @staticmethod | |
| def staticmeth(cls): | |
| return True | |
| @classmethod | |
| def classmeth(cls): | |
| return True | |
| def __new__(cls, *args, **kwargs): | |
| return super().__new__(cls) | |
| def __init__(self, a, b, c): | |
| self.a = a | |
| self.b = b | |
| self.c = c | |
| # __repr__ | |
| # __str__ | |
| # ... | |
| def __eq__(self, other): | |
| if not isinstance(other, SpamFull): | |
| return NotImplemented | |
| return (self.a == other.a and | |
| self.b == other.b and | |
| self.c == other.c) | |
| @property | |
| def prop(self): | |
| return True | |
| class SubSpamFull(SpamFull): | |
| ... | |
| class SubTuple(tuple): | |
| ... | |
| def class_eggs_inner(): | |
| class EggsNested: | |
| ... | |
| return EggsNested | |
| EggsNested = class_eggs_inner() | |
| TOP_CLASSES = { | |
| Spam: (), | |
| SpamOkay: (), | |
| SpamFull: (1, 2, 3), | |
| SubSpamFull: (1, 2, 3), | |
| SubTuple: ([1, 2, 3],), | |
| } | |
| CLASSES_WITHOUT_EQUALITY = [ | |
| Spam, | |
| SpamOkay, | |
| ] | |
| BUILTIN_SUBCLASSES = [ | |
| SubTuple, | |
| ] | |
| NESTED_CLASSES = { | |
| EggsNested: (), | |
| } | |
| CLASSES = { | |
| **TOP_CLASSES, | |
| **NESTED_CLASSES, | |
| } | |
| ####################################### | |
| # exceptions | |
| class MimimalError(Exception): | |
| pass | |
| class RichError(Exception): | |
| def __init__(self, msg, value=None): | |
| super().__init__(msg, value) | |
| self.msg = msg | |
| self.value = value | |
| def __eq__(self, other): | |
| if not isinstance(other, RichError): | |
| return NotImplemented | |
| if self.msg != other.msg: | |
| return False | |
| if self.value != other.value: | |
| return False | |
| return True |