69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
from abc import abstractmethod
|
|
|
|
from open_feature.evaluation_context.evaluation_context import EvaluationContext
|
|
from open_feature.flag_evaluation.flag_evaluation_details import FlagEvaluationDetails
|
|
from open_feature.flag_evaluation.flag_type import FlagType
|
|
from open_feature.hooks.hook_context import HookContext
|
|
|
|
|
|
class Hook:
|
|
@abstractmethod
|
|
def before(self, hook_context: HookContext, hints: dict) -> EvaluationContext:
|
|
"""
|
|
Runs before flag is resolved.
|
|
|
|
:param hook_context: Information about the particular flag evaluation
|
|
:param hints: An immutable mapping of data for users to
|
|
communicate to the hooks.
|
|
:return: An EvaluationContext. It will be merged with the
|
|
EvaluationContext instances from other hooks, the client and API.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def after(
|
|
self, hook_context: HookContext, details: FlagEvaluationDetails, hints: dict
|
|
):
|
|
"""
|
|
Runs after a flag is resolved.
|
|
|
|
:param hook_context: Information about the particular flag evaluation
|
|
:param details: Information about how the flag was resolved,
|
|
including any resolved values.
|
|
:param hints: A mapping of data for users to communicate to the hooks.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def error(self, hook_context: HookContext, exception: Exception, hints: dict):
|
|
"""
|
|
Run when evaluation encounters an error. Errors thrown will be swallowed.
|
|
|
|
:param hook_context: Information about the particular flag evaluation
|
|
:param exception: The exception that was thrown
|
|
:param hints: A mapping of data for users to communicate to the hooks.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def finally_after(self, hook_context: HookContext, hints: dict):
|
|
"""
|
|
Run after flag evaluation, including any error processing.
|
|
This will always run. Errors will be swallowed.
|
|
|
|
:param hook_context: Information about the particular flag evaluation
|
|
:param hints: A mapping of data for users to communicate to the hooks.
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def supports_flag_value_type(self, flag_type: FlagType) -> bool:
|
|
"""
|
|
Check to see if the hook supports the particular flag type.
|
|
|
|
:param flag_type: particular type of the flag
|
|
:return: a boolean containing whether the flag type is supported (True)
|
|
or not (False)
|
|
"""
|
|
return True
|