Skip to content

Commit

Permalink
Add stageAs option to input path [DSL2]
Browse files Browse the repository at this point in the history
  • Loading branch information
pditommaso committed Aug 25, 2019
1 parent 376d932 commit 9b5f55f
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 32 deletions.
Expand Up @@ -41,6 +41,9 @@ class FileInParam extends BaseInParam implements PathQualifier {
* Define the file name
*/
FileInParam name( obj ) {
if(pathQualifier)
throw new MissingMethodException("name", this.class, [String] as Object[])

if( obj instanceof String ) {
filePattern = obj
return this
Expand All @@ -62,8 +65,8 @@ class FileInParam extends BaseInParam implements PathQualifier {
}

String getName() {

if( bindObject instanceof Map ) {
assert !pathQualifier
def entry = bindObject.entrySet().first()
return entry?.key
}
Expand All @@ -73,7 +76,14 @@ class FileInParam extends BaseInParam implements PathQualifier {
}

return super.getName()
}

@Override
BaseInParam bind( obj ) {
if( pathQualifier && obj instanceof Map )
throw new IllegalArgumentException("Input `path` does not allow such argument: ${obj.entrySet().collect{"${it.key}:${it.value}"}.join(',')}")
super.bind(obj)
return this
}

String getFilePattern(Map ctx = null) {
Expand All @@ -82,6 +92,7 @@ class FileInParam extends BaseInParam implements PathQualifier {
return resolve(ctx,filePattern)

if( bindObject instanceof Map ) {
assert !pathQualifier
def entry = bindObject.entrySet().first()
return resolve(ctx, entry?.value)
}
Expand Down Expand Up @@ -122,4 +133,23 @@ class FileInParam extends BaseInParam implements PathQualifier {
(FileInParam)super.setOptions(opts)
}

/**
* Defines the `stageAs:` option to define the input file stage name pattern
*
* @param value
* A string representing the target file name or a file name pattern
* ie. containing the star `*` or question mark wildcards
* @return
* The param instance itself
*/
FileInParam setStageAs(String value) {
this.filePattern = value
return this
}

FileInParam setName(String value) {
this.filePattern = value
return this
}

}
Expand Up @@ -781,53 +781,58 @@ class ParamsInTest extends Specification {
input:
path x
path f1 from x
path f2 name 'abc' from x
path f3:'*.fa' from x
path '*.fa' from x
path 'file.txt' from x
path f2, name: '*.fa'
path f3, stageAs: '*.txt'
return ''
}
"""

when:
def process = parseAndReturnProcess(text)
FileInParam in1 = process.config.getInputs().get(0)
FileInParam in2 = process.config.getInputs().get(1)
FileInParam in3 = process.config.getInputs().get(2)
FileInParam in4 = process.config.getInputs().get(3)
FileInParam in5 = process.config.getInputs().get(4)
FileInParam in0 = process.config.getInputs().get(0)
FileInParam in1 = process.config.getInputs().get(1)
FileInParam in2 = process.config.getInputs().get(2)
FileInParam in3 = process.config.getInputs().get(3)
FileInParam in4 = process.config.getInputs().get(4)
FileInParam in5 = process.config.getInputs().get(5)

then:
process.config.getInputs().size() == 5

in1.name == 'x'
in0.name == 'x'
in0.filePattern == '*'
in0.inChannel.val == FILE
in0.index == 0
in0.isPathQualifier()

in1.name == 'f1'
in1.filePattern == '*'
in1.inChannel.val == FILE
in1.index == 0
in1.index == 1
in1.isPathQualifier()

in2.name == 'f1'
in2.filePattern == '*'
in2.name == '*.fa'
in2.filePattern == '*.fa'
in2.inChannel.val == FILE
in2.index == 1
in2.index == 2
in2.isPathQualifier()

in3.name == 'f2'
in3.filePattern == 'abc'
in3.name == 'file.txt'
in3.filePattern == 'file.txt'
in3.inChannel.val == FILE
in3.index == 2
in3.index == 3
in3.isPathQualifier()

in4.name == 'f3'
in4.name == 'f2'
in4.filePattern == '*.fa'
in4.inChannel.val == FILE
in4.index == 3
in4.index == 4
in4.isPathQualifier()

in5.name == 'file.txt'
in5.filePattern == 'file.txt'
in5.inChannel.val == FILE
in5.index == 4
in5.name == 'f3'
in5.filePattern == '*.txt'
in5.index == 5
in5.isPathQualifier()
}

Expand Down Expand Up @@ -907,7 +912,7 @@ class ParamsInTest extends Specification {
input:
tuple( val(a), path(x) ) from 1
tuple( val(p), path('txt') ) from 2
tuple( val(v), path(xx:'yy') ) from 3
tuple( val(v), path(xx, stageAs: 'yy') ) from 3
return ''
}
Expand Down
Expand Up @@ -36,7 +36,8 @@ class TupleInParamTest extends Specification {
tuple val(p), val(q) from x
tuple val(v), path('file_name.fa') from 'str'
tuple val(p), path('file_name.txt'), '-' from { 'ciao' }
tuple val(p), path(z, stageAs: 'file*')
/foo/
}
'''
Expand All @@ -47,17 +48,16 @@ class TupleInParamTest extends Specification {
TupleInParam in2 = process.config.getInputs().get(1)
TupleInParam in3 = process.config.getInputs().get(2)
TupleInParam in4 = process.config.getInputs().get(3)
TupleInParam in5 = process.config.getInputs().get(4)

then:
process.config.getInputs().size() == 4

in1.inner.size() == 1
in1.inner.get(0) instanceof ValueInParam
in1.inner.get(0).index == 0
in1.inner.get(0).mapIndex == 0
in1.inner.get(0).name == 'p'
in1.inChannel.val == 'Hola mundo'

and:
in2.inner.size() == 2
in2.inner.get(0) instanceof ValueInParam
in2.inner.get(0).name == 'p'
Expand All @@ -68,7 +68,7 @@ class TupleInParamTest extends Specification {
in2.inner.get(1).index == 1
in2.inner.get(1).mapIndex == 1
in2.inChannel.val == 'Hola mundo'

and:
in3.inner.size() == 2
in3.inner.get(0) instanceof ValueInParam
in3.inner.get(0).name == 'v'
Expand All @@ -80,7 +80,7 @@ class TupleInParamTest extends Specification {
in3.inner.get(1).index == 2
in3.inner.get(1).mapIndex == 1
in3.inChannel.val == 'str'

and:
in4.inner.size() == 3
in4.inner.get(0) instanceof ValueInParam
in4.inner.get(0).name == 'p'
Expand All @@ -96,6 +96,16 @@ class TupleInParamTest extends Specification {
in4.inner.get(2).index == 3
in4.inner.get(2).mapIndex == 2
in4.inChannel.val == 'ciao'
and:
in5.inner.size() == 2
in5.inner.get(0) instanceof ValueInParam
in5.inner.get(0).index == 4
in5.inner.get(0).mapIndex == 0
in5.inner.get(1) instanceof FileInParam
in5.inner.get(1).name == 'z'
in5.inner.get(1).filePattern == 'file*'
in5.inner.get(1).index == 4
in5.inner.get(1).mapIndex == 1

}

Expand Down Expand Up @@ -144,6 +154,6 @@ class TupleInParamTest extends Specification {
(in3.inner[0] as FileInParam).name == '__$fileinparam<3:0>'
(in3.inner[0] as FileInParam).getFilePattern(ctx) == 'the_file_name.txt'
}


}

0 comments on commit 9b5f55f

Please sign in to comment.