Skip to content

Hooks (Pre/Post)

Hooks let you run code before or after any command without modifying the command handler itself.

Before Hook

@stack.commands.up.before
def pre_up() -> None:
    print("Checking prerequisites...")
    check_env_vars()

After Hook

@stack.commands.up.after
def post_up() -> None:
    print("Deployment complete — notifying Slack")
    notify_slack()

Full Example

from orche import Stack

stack = Stack(compose_files=["docker-compose.yml"])


@stack.commands.up.before
def pre_up() -> None:
    print("Running pre-flight checks...")


@stack.commands.up
def up() -> None:
    stack.build().up()


@stack.commands.up.after
def post_up() -> None:
    print("Services are live.")
orche up
# Running pre-flight checks...
# [build / up output]
# Services are live.

Hooks on Custom Commands

For commands registered via register(), save the handle and decorate from it:

deploy = stack.commands.register("deploy")

@deploy.before
def check_env() -> None: ...

@deploy
def deploy_handler() -> None: ...

See Custom Commands for a full example.

Multiple Hooks

You can register multiple before/after hooks. They run in registration order.

@stack.commands.up.before
def check_docker() -> None: ...

@stack.commands.up.before
def check_env() -> None: ...