From 900ecf10e030393653592b4200d2582b15158454 Mon Sep 17 00:00:00 2001 From: Arun Isaac Date: Fri, 29 Sep 2023 13:58:50 +0100 Subject: 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. --- ccwl/ccwl.scm | 20 ++++++++++++++------ 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{} or @code{} 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 object or a 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 (make-key name cwl-id step) @@ -474,7 +479,10 @@ represented by 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") -- cgit v1.2.3