Usage
Overview
teksi_hooks provides a set of reusable framework components for:
Parsing configuration
Resolving definitions
Evaluating rules
Reporting findings
Executing hooks
Applications compose these components through capabilities and runtime configuration.
Creating a Hook
from teksi_hooks import (
HookBase,
HookContext,
HookMetadata,
)
class Hook(HookBase):
required_capabilities = frozenset()
@property
def metadata(
self,
) -> HookMetadata:
return HookMetadata(
name="Example Hook",
description="Example implementation.",
)
def run_hook(
self,
context: HookContext,
) -> None:
context.logger.info(
"Hello from a hook.",
)
Executing a Hook
from teksi_hooks import (
HookContext,
HookHandler,
)
context = HookContext(
parameters={},
logger=logger,
capabilities={},
)
HookHandler(
file="example_hook.py",
).run(
context,
)
Working with Capabilities
Capabilities are application-provided services.
service = context.capability(
MyCapability,
)
Hooks may declare required capabilities.
class Hook(HookBase):
required_capabilities = frozenset(
{
MyCapability,
},
)
Parsing Configuration
Parsers convert external configuration into typed framework models.
from teksi_hooks.parser import (
RightsParser,
)
rights = RightsParser().parse_file(
"rights.yml",
)
The parser validates document structure but does not resolve inheritance, defaults or references.
Resolving Definitions
Resolvers transform parsed definitions into runtime-ready models.
resolved_rights = rights_resolver.resolve(
rights,
)
Typical resolver responsibilities include:
Applying defaults
Resolving inheritance
Resolving references
Expanding derived rights
Evaluating Rules
Evaluators apply runtime logic and return findings.
findings = validation_evaluator.evaluate(
change=change,
resolved_rights=resolved_rights,
)
Each finding contains a severity and a human-readable message.
Finding(
severity=Severity.ERROR,
message="Invalid transition.",
)
Failing on Errors
Framework findings can be converted into exceptions.
findings = validation_evaluator.evaluate(
change=change,
resolved_rights=resolved_rights,
)
TeksiHookError.raise_if_errors(
findings,
)
This raises a TeksiHookError when one or more findings have severity
ERROR while allowing warnings and informational findings to continue.
Creating Framework Errors
Single errors can be created directly from a message.
raise TeksiHookError.from_message(
"Provider OID is missing.",
)
The framework automatically converts the message into an error-level
Finding.