diff options
author | Arun Isaac | 2024-03-22 01:29:40 +0000 |
---|---|---|
committer | Arun Isaac | 2024-03-22 01:48:25 +0000 |
commit | e430937727b881be2b2428ad0f09a32ea0aaf198 (patch) | |
tree | f824400ca255da28d25a23b8e4486de7c14b4f0b /ccwl/graphviz.scm | |
parent | d005c17106add8bd9ab07eddc30e9cf9b17de544 (diff) | |
download | ccwl-e430937727b881be2b2428ad0f09a32ea0aaf198.tar.gz ccwl-e430937727b881be2b2428ad0f09a32ea0aaf198.tar.lz ccwl-e430937727b881be2b2428ad0f09a32ea0aaf198.zip |
ccwl: Implement js-expression.
js-expression corresponds to ExpressionTool in the CWL specification.
* ccwl/ccwl.scm (<js-expression>): New type.
(js-expression): New macro.
(function-inputs, function-outputs, function-object): Support
<js-expression> objects.
(function-input-keys): Mention <js-expression> objects in docstring.
* ccwl/cwl.scm (function->cwl, workflow->cwl-scm): Support
<js-expression> objects.
(command->cwl-scm): Move staging requirements handling to ...
(staging-requirements): ... this new function.
(js-expression->cwl, js-expression->cwl-scm): New functions.
* ccwl/graphviz.scm (function->dot): Support <js-expression> objects.
(command->graph): Abstract to ...
(single-node-workflow->graph): ... this new function.
(js-expression->dot, js-expression->graph): New functions.
* scripts/ccwl (main): Support <js-expression> objects.
* doc/ccwl.skb (Cookbook){Javascript expressions via ExpressionTool}:
New section.
* doc/js-expression-iota.scm: New file.
Diffstat (limited to 'ccwl/graphviz.scm')
-rw-r--r-- | ccwl/graphviz.scm | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/ccwl/graphviz.scm b/ccwl/graphviz.scm index 2d39156..970af72 100644 --- a/ccwl/graphviz.scm +++ b/ccwl/graphviz.scm @@ -41,7 +41,9 @@ (((? workflow? workflow) port) (workflow->dot workflow port)) (((? command? command) port) - (command->dot command port)))) + (command->dot command port)) + (((? js-expression? expression) port) + (js-expression->dot expression port)))) (define (workflow->dot workflow port) "Render WORKFLOW, a <workflow> object, to PORT in the graphviz dot @@ -121,18 +123,13 @@ language." #:subgraphs (list (inputs-cluster (workflow-inputs workflow)) (outputs-cluster (workflow-outputs workflow))))) -(define (command->dot command port) - "Render @var{command}, a @code{<command>} object, to @var{port} in the -graphviz dot language." - (graph->dot (command->graph command) - port)) - -(define (command->graph command) - "Convert @var{command}, a @code{<command>} object, to a @code{<graph>} -object." +(define (single-node-workflow->graph node-name inputs outputs) + "Convert a single node workflow (usually a @code{<command>} or +@code{<js-expression>}) with @var{node-name}, @var{inputs} and +@var{outputs}, to a @code{<graph>} object." (graph 'workflow #:properties '((bgcolor . "#eeeeee")) - #:nodes (list (graph-node 'command + #:nodes (list (graph-node node-name '((fillcolor . "lightgoldenrodyellow") (shape . "record") (style . "filled")))) @@ -140,15 +137,41 @@ object." ;; Connect inputs to command. (map (lambda (input) (cons (input-id input) - 'command)) - (command-inputs command)) + node-name)) + inputs) ;; Connect command to outputs. (map (lambda (output) - (cons 'command + (cons node-name (output-id output))) - (command-outputs command))) - #:subgraphs (list (inputs-cluster (command-inputs command)) - (outputs-cluster (command-outputs command))))) + outputs)) + #:subgraphs (list (inputs-cluster inputs) + (outputs-cluster outputs)))) + +(define (command->dot command port) + "Render @var{command}, a @code{<command>} object, to @var{port} in the +graphviz dot language." + (graph->dot (command->graph command) + port)) + +(define (command->graph command) + "Convert @var{command}, a @code{<command>} object, to a @code{<graph>} +object." + (single-node-workflow->graph 'command + (command-inputs command) + (command-outputs command))) + +(define (js-expression->dot expression port) + "Render @var{expression}, a @code{<js-expression>} object, to +@var{port} in the graphviz dot language." + (graph->dot (js-expression->graph expression) + port)) + +(define (js-expression->graph expression) + "Convert @var{expression}, a @code{<js-expression>} object, to a +@code{<graph>} object." + (single-node-workflow->graph 'js-expression + (js-expression-inputs expression) + (js-expression-outputs expression))) (define (step-node id) "Return graph node describing step with @var{id}." |