|
3 | 3 |
|
4 | 4 | __all__ = ("BaseSubprocessor", "CallResultT", "ContextT") |
5 | 5 |
|
6 | | -import dataclasses |
7 | 6 | import typing |
8 | 7 |
|
9 | 8 | from ..context import BaseProcessorContext |
|
14 | 13 | CallResultT = typing.TypeVar("CallResultT", bound=typing.Any) |
15 | 14 |
|
16 | 15 |
|
17 | | -@dataclasses.dataclass(unsafe_hash=True) |
18 | 16 | class BaseSubprocessor(typing.Generic[ContextT, CallResultT], metaclass=MetaSubprocessor): |
19 | | - context: ContextT = dataclasses.field(init=False, hash=False) |
20 | | - call_result: CallResultT = dataclasses.field(init=False, hash=False) |
| 17 | + _context: ContextT | None = None |
| 18 | + _call_result: CallResultT | None = None |
21 | 19 |
|
22 | 20 | def __call__(self) -> CallResultT: |
23 | 21 | msg = "Base subprocess call method is required to be implemented" |
24 | 22 | raise NotImplementedError(msg) |
| 23 | + |
| 24 | + @property |
| 25 | + def context(self) -> ContextT | None: |
| 26 | + return self._context |
| 27 | + |
| 28 | + @context.setter |
| 29 | + def context(self, value: ContextT) -> None: |
| 30 | + self._context = value # noqa: WPS601 |
| 31 | + |
| 32 | + @property |
| 33 | + def call_result(self) -> CallResultT | None: |
| 34 | + return self._call_result |
| 35 | + |
| 36 | + @call_result.setter |
| 37 | + def call_result(self, value: CallResultT) -> None: |
| 38 | + self._call_result = value # noqa: WPS601 |
| 39 | + |
| 40 | + def __repr__(self): |
| 41 | + context_str = f"{self.context!r}" |
| 42 | + call_result_str = f"{self.call_result!r}" |
| 43 | + return f"{self.__class__.__name__}({context_str=}, {call_result_str=})" |
| 44 | + |
| 45 | + def __hash__(self): |
| 46 | + return hash(f"{self.__class__.__name__}{id(self)}") |
0 commit comments