core, work in progress: basic action handlers
This commit is contained in:
parent
db6eccd974
commit
16620d0a69
1 changed files with 31 additions and 2 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue