syndesizer: absorb json_translator
This commit is contained in:
parent
7ed62e0482
commit
eeaa80db88
27
README.md
27
README.md
|
@ -80,6 +80,29 @@ $mpvSpace [
|
|||
]
|
||||
```
|
||||
|
||||
### JSON Stdio Translator
|
||||
|
||||
Executes a command, parses its JSON output, converts to record `<recv @jsonData any>`, and publishes and messages it to a dataspace.
|
||||
|
||||
```
|
||||
# Configuration example
|
||||
<require-service <daemon syndesizer>>
|
||||
|
||||
let ?ds = dataspace
|
||||
<bind <ref {oid: "syndicate" key: #x""}> $ds #f>
|
||||
|
||||
? <service-object <daemon syndesizer> ?cap> [
|
||||
$cap <json-stdio-translator {
|
||||
argv: [
|
||||
"yt-dlp"
|
||||
"--dump-json"
|
||||
"https://youtu.be/RR9GkEXDvog"
|
||||
]
|
||||
dataspace: $ds
|
||||
}>
|
||||
]
|
||||
```
|
||||
|
||||
### Webooks
|
||||
|
||||
Listens for webhook requests and sends request data to a dataspace as messages.
|
||||
|
@ -106,10 +129,6 @@ Request data is formated according to the http schema [defined in syndicate-prot
|
|||
|
||||
---
|
||||
|
||||
## json_translator
|
||||
|
||||
Wrapper that executes a command, parses its JSON output, converts to Preserves record `<recv @jsonData any>`, and publishes and messages to its initial dataspace.
|
||||
|
||||
## mintsturdyref
|
||||
|
||||
A utility for minting [Sturdyrefs](https://synit.org/book/operation/builtin/gatekeeper.html#sturdyrefs).
|
||||
|
|
|
@ -6,6 +6,11 @@ CacheArguments = <cache {
|
|||
lifetime: float
|
||||
}>.
|
||||
|
||||
JsonTranslatorArguments = <json-stdio-translator {
|
||||
argv: [string ...]
|
||||
dataspace: #!any
|
||||
}>.
|
||||
|
||||
JsonTranslatorConnected = <connected @path string>.
|
||||
|
||||
JsonSocketTranslatorArguments = <json-socket-translator {
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||
# SPDX-License-Identifier: Unlicense
|
||||
|
||||
import std/[json, os, osproc]
|
||||
import preserves
|
||||
import syndicate, syndicate/relays
|
||||
|
||||
from preserves/jsonhooks import toPreservesHook
|
||||
|
||||
import ./json_messages
|
||||
|
||||
proc runChild: string =
|
||||
let params = commandLineParams()
|
||||
if params.len < 1:
|
||||
stderr.writeLine "not enough parameters"
|
||||
quit 1
|
||||
let
|
||||
cmd = params[0]
|
||||
args = params[1..params.high]
|
||||
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
||||
except CatchableError as err:
|
||||
quit("execProcess failed: " & err.msg)
|
||||
if result == "":
|
||||
stderr.writeLine "no ouput"
|
||||
quit 1
|
||||
|
||||
runActor("main") do (ds: Cap; turn: var Turn):
|
||||
connectStdio(turn, ds)
|
||||
let js = runChild().parseJson()
|
||||
message(turn, ds, RecvJson(data: js))
|
||||
discard publish(turn, ds, RecvJson(data: js))
|
|
@ -3,6 +3,13 @@ import
|
|||
preserves, std/tables
|
||||
|
||||
type
|
||||
JsonTranslatorArgumentsField0* {.preservesDictionary.} = object
|
||||
`argv`*: seq[string]
|
||||
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
|
||||
|
||||
JsonTranslatorArguments* {.preservesRecord: "json-stdio-translator".} = object
|
||||
`field0`*: JsonTranslatorArgumentsField0
|
||||
|
||||
JsonTranslatorConnected* {.preservesRecord: "connected".} = object
|
||||
`path`*: string
|
||||
|
||||
|
@ -31,13 +38,15 @@ type
|
|||
`host`*: string
|
||||
`port`*: BiggestInt
|
||||
|
||||
proc `$`*(x: JsonTranslatorConnected | JsonSocketTranslatorArguments |
|
||||
proc `$`*(x: JsonTranslatorArguments | JsonTranslatorConnected |
|
||||
JsonSocketTranslatorArguments |
|
||||
WebhooksArguments |
|
||||
CacheArguments |
|
||||
Tcp): string =
|
||||
`$`(toPreserves(x))
|
||||
|
||||
proc encode*(x: JsonTranslatorConnected | JsonSocketTranslatorArguments |
|
||||
proc encode*(x: JsonTranslatorArguments | JsonTranslatorConnected |
|
||||
JsonSocketTranslatorArguments |
|
||||
WebhooksArguments |
|
||||
CacheArguments |
|
||||
Tcp): seq[byte] =
|
||||
|
|
|
@ -6,11 +6,12 @@
|
|||
import syndicate, syndicate/relays, syndicate/actors/timers
|
||||
|
||||
import ./syndesizer/[
|
||||
cache_actor, json_socket_translator, webhooks]
|
||||
cache_actor, json_socket_translator, json_translator, webhooks]
|
||||
|
||||
runActor("syndesizer") do (turn: var Turn; root: Cap):
|
||||
connectStdio(turn, root)
|
||||
discard spawnTimers(turn, root)
|
||||
discard spawnCacheActor(turn, root)
|
||||
discard spawnJsonSocketTranslator(turn, root)
|
||||
discard spawnJsonStdioTranslator(turn, root)
|
||||
discard spawnWebhookActor(turn, root)
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||
# SPDX-License-Identifier: Unlicense
|
||||
|
||||
import std/[json, osproc]
|
||||
import preserves
|
||||
import syndicate, syndicate/relays
|
||||
|
||||
import ../schema/config
|
||||
import ../json_messages
|
||||
|
||||
proc runChild(params: seq[string]): string =
|
||||
if params.len < 1:
|
||||
stderr.writeLine "not enough parameters"
|
||||
let
|
||||
cmd = params[0]
|
||||
args = params[1..params.high]
|
||||
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
||||
except CatchableError as err:
|
||||
quit("execProcess failed: " & err.msg)
|
||||
if result == "":
|
||||
stderr.writeLine "no ouput"
|
||||
|
||||
proc spawnJsonStdioTranslator*(turn: var Turn; root: Cap): Actor {.discardable.} =
|
||||
spawn("json-stdio-translator", turn) do (turn: var Turn):
|
||||
during(turn, root, ?:JsonTranslatorArguments) do (argv: seq[string], ds: Cap):
|
||||
var js = parseJson(runChild(argv))
|
||||
message(turn, ds, RecvJson(data: js))
|
||||
discard publish(turn, ds, RecvJson(data: js))
|
||||
|
||||
when isMainModule:
|
||||
runActor("main") do (turn: var Turn; root: Cap):
|
||||
connectStdio(turn, root)
|
||||
spawnJsonStdioTranslator(turn, root)
|
|
@ -5,7 +5,7 @@ author = "Emery Hemingway"
|
|||
description = "Utilites for Syndicated Actors and Synit"
|
||||
license = "unlicense"
|
||||
srcDir = "src"
|
||||
bin = @["json_translator", "mintsturdyref", "mount_actor", "msg", "net_mapper", "preserve_process_environment", "syndex_card", "syndump"]
|
||||
bin = @["mintsturdyref", "mount_actor", "msg", "net_mapper", "preserve_process_environment", "syndex_card", "syndump"]
|
||||
|
||||
|
||||
# Dependencies
|
||||
|
|
Loading…
Reference in New Issue