core, work in progress: basic action handlers

This commit is contained in:
Helmut Merz 2026-10-20 19:46:12 +02:00
parent db6eccd974
commit 16620d0a69

View file

@ -75,16 +75,17 @@ def create_zero(env: Mailbox) -> Mailbox:
def synapse(rcvr: Mailbox, op: SynOp = lambda x: x) -> Syn:
async def syn(msg: Message) -> None:
# op = update_op(msg)
msg_new = op(msg)
if msg_new is not None:
await rcvr.put(msg_new)
return syn
def gen_proc(actions: Actions, default: Handlers = None,
before: Handlers = None, after: Handlers = None) -> Proc:
prepare: Handlers = None, finalize: Handlers = None) -> Proc:
async def proc(msg: Message, scope: Scope) -> Scope:
acts = actions.get(msg.head['action'], actions.get(k.default, default))
acts = util.flatten(before, acts, after, ignore_none=True)
acts = util.flatten(prepare, acts, finalize, ignore_none=True)
for act in acts:
msg = await act(msg, scope)
if isinstance(msg, tuple):
@ -96,3 +97,31 @@ def gen_proc(actions: Actions, default: Handlers = None,
return scope
return proc
def gen_std(actions: Actions) -> Proc:
return gen_proc(actions, finalize=forward())
def basic_actions() -> Actions:
acts: Actions = {
k.value: value_add(),
k.create: create()
}
return acts
# predefined action handlers
def forward() -> Handler:
async def do_forward(msg, scope) -> None:
for syn in scope.syns:
await syn(msg)
return do_forward
def value_add() -> Handler:
async def do_add(msg, scope) -> tuple[Message, Scope]:
return msg, scope
return do_add
def create() -> Handler:
async def do_create(msg, scope) -> None:
return None
return do_create