Skip to content

Commit 4ca0f0d

Browse files
authored
Merge pull request #45640 from IzaakWN/fix_VarParsing_listdefault
VarParsing: prevent TypeError for default of int/float/bool list
2 parents c9ac3b7 + db50eed commit 4ca0f0d

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

FWCore/ParameterSet/python/VarParsing.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,9 @@ def register (self, name,
412412
self._lists[name] = []
413413
# if it's a list, we only want to use the default if it
414414
# does exist.
415-
if len (default):
416-
self._lists[name].append (default)
415+
if (mytype in [VarParsing.varType.bool, VarParsing.varType.int, VarParsing.varType.float] and \
416+
default not in ["",[]]) or len (default): # check type to prevent TypeError for bool/int/float defaults
417+
self._lists[name].append (default) # known bug: default can be list
417418
#######################################
418419
## Process any additional directives ##
419420
#######################################

FWCore/ParameterSet/test/BuildFile.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@
1515

1616
<test name="testFWCoreParameterSetEdmConfigDump" command="run_edmConfigDump.sh"/>
1717
<test name="testFWCoreParameterSetEdmConfigSplit" command="run_edmConfigSplit.sh"/>
18+
19+
<test name="TestFWCoreParameterSetVarParsingList" command="python3 ${LOCALTOP}/src/FWCore/ParameterSet/test/test_varparsing_list.py"/>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import sys
2+
from FWCore.ParameterSet.VarParsing import VarParsing
3+
4+
def parse(argv):
5+
sys.argv = ['test_varparsing_list.py','maxEvents=100']+argv # emulate user arguments
6+
opts = VarParsing('standard')
7+
opts.register('myInts0', '', VarParsing.multiplicity.list, VarParsing.varType.int)
8+
opts.register('myInts1', [], VarParsing.multiplicity.list, VarParsing.varType.int)
9+
opts.register('myInts2', 0, VarParsing.multiplicity.list, VarParsing.varType.int)
10+
opts.register('myInts3', [0], VarParsing.multiplicity.list, VarParsing.varType.int)
11+
opts.register('myFloats0', '', VarParsing.multiplicity.list, VarParsing.varType.float)
12+
opts.register('myFloats1', [], VarParsing.multiplicity.list, VarParsing.varType.float)
13+
opts.register('myFloats2', 0, VarParsing.multiplicity.list, VarParsing.varType.float)
14+
opts.register('myFloats3', [0], VarParsing.multiplicity.list, VarParsing.varType.float)
15+
opts.register('myBools0', '', VarParsing.multiplicity.list, VarParsing.varType.bool)
16+
opts.register('myBools1', [], VarParsing.multiplicity.list, VarParsing.varType.bool)
17+
opts.register('myBools2', True, VarParsing.multiplicity.list, VarParsing.varType.bool)
18+
opts.register('myBools3', [True], VarParsing.multiplicity.list, VarParsing.varType.bool)
19+
opts.register('myStrs0', '', VarParsing.multiplicity.list, VarParsing.varType.string)
20+
opts.register('myStrs1', [], VarParsing.multiplicity.list, VarParsing.varType.string)
21+
opts.register('myStrs2', 'foo', VarParsing.multiplicity.list, VarParsing.varType.string)
22+
opts.register('myStrs3', ['foo'], VarParsing.multiplicity.list, VarParsing.varType.string)
23+
opts.parseArguments()
24+
#print(f">>> Parsed: {sys.argv} -> lists={opts._lists}")
25+
26+
# parse without user arguments
27+
parse([ ])
28+
29+
# parse with user arguments
30+
parse(['myInts1=0,1,-1','myFloats1=3.14,0,0.0,-1.0','myBools1=True,False','myStrs1=foo,bar'])

0 commit comments

Comments
 (0)