diff options
author | Arun Isaac | 2023-09-29 13:58:50 +0100 |
---|---|---|
committer | Arun Isaac | 2023-09-29 13:58:50 +0100 |
commit | 900ecf10e030393653592b4200d2582b15158454 (patch) | |
tree | 97ae846ebf9ced2920e45a0b3cd413d4611603e2 | |
parent | d58e5585b62bd284a7e27045e748c2cf1d31a649 (diff) | |
download | ccwl-900ecf10e030393653592b4200d2582b15158454.tar.gz ccwl-900ecf10e030393653592b4200d2582b15158454.tar.lz ccwl-900ecf10e030393653592b4200d2582b15158454.zip |
ccwl: Allow steps with unspecified default arguments.
* ccwl/ccwl.scm (function-inputs): New function.
(function-input-keys): Use function-inputs.
(collect-steps): Do not error out on steps with unspecified default
arguments.
* tests/ccwl.scm (print-with-default): New variable.
("allow steps with unspecified default arguments"): New test.
-rw-r--r-- | ccwl/ccwl.scm | 20 | ||||
-rw-r--r-- | tests/ccwl.scm | 11 |
2 files changed, 25 insertions, 6 deletions
diff --git a/ccwl/ccwl.scm b/ccwl/ccwl.scm index f380485..174b040 100644 --- a/ccwl/ccwl.scm +++ b/ccwl/ccwl.scm @@ -372,15 +372,20 @@ RUN-ARGS. If such an input is not present in RUN-ARGS, return #f." (eq? (input-id input1) (input-id input2))) +(define (function-inputs function) + "Return the list of inputs accepted by @var{function}, a +@code{<command>} or @code{<cwl-workflow>} object." + ((cond + ((command? function) command-inputs) + ((cwl-workflow? function) cwl-workflow-inputs) + (else (error "Unrecognized ccwl function" function))) + function)) + (define (function-input-keys function) "Return the list of input keys accepted by FUNCTION, a <command> object or a <cwl-workflow> object." (map input-id - ((cond - ((command? function) command-inputs) - ((cwl-workflow? function) cwl-workflow-inputs) - (else (error "Unrecognized ccwl function" function))) - function))) + (function-inputs function))) (define-immutable-record-type <key> (make-key name cwl-id step) @@ -474,7 +479,10 @@ represented by <step> objects." ;; TODO: Filter out optional parameters. (match (lset-difference eq? - (function-input-keys function-object) + (filter-map (lambda (input) + (and (unspecified-default? (input-default input)) + (input-id input))) + (function-inputs function-object)) (map (match-lambda ((key . _) (keyword->symbol key))) (syntax->datum (pairify #'(args ...))))) diff --git a/tests/ccwl.scm b/tests/ccwl.scm index f55ef0d..9aa00f3 100644 --- a/tests/ccwl.scm +++ b/tests/ccwl.scm @@ -128,4 +128,15 @@ (print (print2) #:message message2))))) (list 'out1 'printed-message)) +;; TODO: Define this in the lexical scope of the test that requires +;; it. +(define print-with-default + (command #:inputs (message #:type string #:default "Hello") + #:run "echo" message + #:outputs (printed-message #:type stdout))) + +(test-assert "allow steps with unspecified default arguments" + (workflow () + (print-with-default))) + (test-end "ccwl") |