Changeset View
Changeset View
Standalone View
Standalone View
python_modules/dagster/dagster/core/definitions/decorators/hook.py
Show All 30 Lines | class _Hook: | ||||
def __init__( | def __init__( | ||||
self, name: Optional[str] = None, required_resource_keys: Optional[AbstractSet[str]] = None | self, name: Optional[str] = None, required_resource_keys: Optional[AbstractSet[str]] = None | ||||
): | ): | ||||
self.name = check.opt_str_param(name, "name") | self.name = check.opt_str_param(name, "name") | ||||
self.required_resource_keys = check.opt_set_param( | self.required_resource_keys = check.opt_set_param( | ||||
required_resource_keys, "required_resource_keys" | required_resource_keys, "required_resource_keys" | ||||
) | ) | ||||
def __call__(self, fn: Callable[["HookContext", List["DagsterEvent"]], Any]) -> HookDefinition: | def __call__(self, fn) -> HookDefinition: | ||||
check.callable_param(fn, "fn") | check.callable_param(fn, "fn") | ||||
if not self.name: | if not self.name: | ||||
self.name = fn.__name__ | self.name = fn.__name__ | ||||
expected_positionals = ["context", "event_list"] | expected_positionals = ["context", "event_list"] | ||||
_validate_hook_fn_params(fn, expected_positionals) | _validate_hook_fn_params(fn, expected_positionals) | ||||
hook_def = HookDefinition( | hook_def = HookDefinition( | ||||
name=self.name, | name=self.name or "", | ||||
hook_fn=fn, | hook_fn=fn, | ||||
required_resource_keys=self.required_resource_keys, | required_resource_keys=self.required_resource_keys, | ||||
) | ) | ||||
update_wrapper(cast(Callable[..., Any], hook_def), fn) | update_wrapper(cast(Callable[..., Any], hook_def), fn) | ||||
return hook_def | return hook_def | ||||
def event_list_hook( | def event_list_hook( | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | if callable(name): | ||||
return _Hook()(name) | return _Hook()(name) | ||||
return _Hook(name=name, required_resource_keys=required_resource_keys) | return _Hook(name=name, required_resource_keys=required_resource_keys) | ||||
def success_hook( | def success_hook( | ||||
name: Union[Optional[str], Callable[..., Any]] = None, | name: Union[Optional[str], Callable[..., Any]] = None, | ||||
required_resource_keys: Optional[AbstractSet[str]] = None, | required_resource_keys: Optional[AbstractSet[str]] = None, | ||||
) -> Union[ | ) -> Union[Union[HookDefinition, _Hook], Callable[..., Union[HookDefinition, _Hook]],]: | ||||
Union[HookDefinition, _Hook], | |||||
Callable[[Callable[["HookContext"], Any]], Union[HookDefinition, _Hook]], | |||||
]: | |||||
"""Create a hook on step success events with the specified parameters from the decorated function. | """Create a hook on step success events with the specified parameters from the decorated function. | ||||
Args: | Args: | ||||
name (Optional[str]): The name of this hook. | name (Optional[str]): The name of this hook. | ||||
required_resource_keys (Optional[AbstractSet[str]]): Keys for the resources required by the | required_resource_keys (Optional[AbstractSet[str]]): Keys for the resources required by the | ||||
hook. | hook. | ||||
Examples: | Examples: | ||||
.. code-block:: python | .. code-block:: python | ||||
@success_hook(required_resource_keys={'slack'}) | @success_hook(required_resource_keys={'slack'}) | ||||
def slack_message_on_success(context): | def slack_message_on_success(context): | ||||
message = 'solid {} succeeded'.format(context.solid.name) | message = 'solid {} succeeded'.format(context.solid.name) | ||||
context.resources.slack.send_message(message) | context.resources.slack.send_message(message) | ||||
@success_hook | @success_hook | ||||
def do_something_on_success(context): | def do_something_on_success(context): | ||||
do_something() | do_something() | ||||
""" | """ | ||||
def wrapper(fn: Callable[["HookContext"], Any]) -> Union[HookDefinition, _Hook]: | def wrapper(fn) -> Union[HookDefinition, _Hook]: | ||||
check.callable_param(fn, "fn") | check.callable_param(fn, "fn") | ||||
expected_positionals = ["context"] | expected_positionals = ["context"] | ||||
_validate_hook_fn_params(fn, expected_positionals) | _validate_hook_fn_params(fn, expected_positionals) | ||||
if name is None or callable(name): | if name is None or callable(name): | ||||
_name = fn.__name__ | _name = fn.__name__ | ||||
▲ Show 20 Lines • Show All 85 Lines • Show Last 20 Lines |