Skip to content

Custom target example

You may need extra lifecycle stages. You may extend existing stages with your own

Here TargetMeta relies on class name, so it's important to make class name str.endswith(("Target", "TargetABC"))

from systempy import (
    DIRECTION,
    Target,
    register_hook_after,
    register_hook_before,
)

class ExtTarget(Target):
    @register_hook_after(Target.on_startup, DIRECTION.FORWARD)
    async def post_startup(self) -> None: ...

    @register_hook_before(Target.on_shutdown, DIRECTION.BACKWARD)
    async def pre_shutdown(self) -> None: ...

Here TargetMeta relies on explicit role kwarg and doesn't check class name, so you may give your class arbitrary name

from systempy import (
    DIRECTION,
    ROLE,
    Target,
    register_hook_after,
    register_hook_before,
)

class ExtTarget(Target, role=ROLE.TARGET):
    @register_hook_after(Target.on_startup, DIRECTION.FORWARD)
    async def post_startup(self) -> None: ...

    @register_hook_before(Target.on_shutdown, DIRECTION.BACKWARD)
    async def pre_shutdown(self) -> None: ...