aboutsummaryrefslogtreecommitdiff
path: root/ccwl/graphviz.scm
diff options
context:
space:
mode:
authorArun Isaac2024-03-22 01:29:40 +0000
committerArun Isaac2024-03-22 01:48:25 +0000
commite430937727b881be2b2428ad0f09a32ea0aaf198 (patch)
treef824400ca255da28d25a23b8e4486de7c14b4f0b /ccwl/graphviz.scm
parentd005c17106add8bd9ab07eddc30e9cf9b17de544 (diff)
downloadccwl-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.scm57
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}."