1 from __future__
import annotations
3 __all__ = (
"DataFrameAction",)
6 from typing
import Iterable, Any, Mapping
8 from ..configurableActions
import ConfigurableAction
12 _actionCache: Mapping[int, Any]
14 cache = Field(doc=
"Controls if the results of this action should be cached,"
15 " only works on frozen actions",
16 dtype=bool, default=
False)
17 cacheArgs = ListField(doc=
"If cache is True, this is a list of argument keys that will be used to "
18 "compute the cache key in addition to the DataFrameId", dtype=str)
23 def call_wrapper(function):
24 def inner_wrapper(self, dataFrame, **kwargs):
27 for name
in (self.
cacheArgscacheArgs
or tuple()):
28 if name
not in kwargs:
29 raise ValueError(f
"{name} is not part of call signature and cant be used for "
31 extra.append(kwargs[name])
34 if self.
cachecache
and self._frozen:
38 result = function(self, dataFrame, **kwargs)
39 if self.
cachecache
and self._frozen:
46 def __call__(self, dataFrame, **kwargs) -> Iterable[Any]:
47 """This method should return the result of an action performed on a
50 raise NotImplementedError(
"This method should be overloaded in a subclass")
54 """This property should return an iterable of columns needed by this action
56 raise NotImplementedError(
"This method should be overloaded in a subclass")
Any __call__(self, *args, **kwargs)
Iterable[str] columns(self)
Iterable[Any] __call__(self, dataFrame, **kwargs)
None __init_subclass__(cls, **kwargs)