File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1600,7 +1600,12 @@ def __call__(
16001600
16011601 # ... and set the value, if appropriate
16021602 if value is not NOTSET :
1603+ # Note that because we are *creating* a new Config object,
1604+ # we do not want set_value() to change the current (default)
1605+ # userSet flag for this object/container (see #3721).
1606+ tmp = ans ._userSet
16031607 ans .set_value (value )
1608+ ans ._userSet = tmp
16041609 return ans
16051610
16061611 def name (self , fully_qualified = False ):
Original file line number Diff line number Diff line change @@ -1599,6 +1599,24 @@ def test_UserValues_declare_subBlock(self):
15991599 test = '\n ' .join (x .name (True ) for x in self .config .user_values ())
16001600 self .assertEqual (test , "" )
16011601
1602+ def test_userValues_call_nonempty (self ):
1603+ # See bug report in Pyomo/pyomo#3721
1604+ default = ConfigDict ()
1605+ default .declare ("filename" , ConfigValue (default = None , domain = str ))
1606+ cfg = default (value = {"filename" : "example.txt" })
1607+ names = [x .name (True ) for x in cfg .user_values ()]
1608+ self .assertEqual (names , ["filename" ])
1609+ self .assertTrue (all (x is not cfg for x in cfg .user_values ()))
1610+
1611+ def test_userValues_call_empty_then_set (self ):
1612+ # See bug report in Pyomo/pyomo#3721
1613+ default = ConfigDict ()
1614+ default .declare ("filename" , ConfigValue (default = None , domain = str ))
1615+ cfg = default ({})
1616+ cfg ["filename" ] = "example.txt"
1617+ names = [x .name (True ) for x in cfg .user_values ()]
1618+ self .assertEqual (names , ["filename" ])
1619+
16021620 @unittest .skipIf (not yaml_available , "Test requires PyYAML" )
16031621 def test_parseDisplayAndValue_default (self ):
16041622 test = _display (self .config )
You can’t perform that action at this time.
0 commit comments