11from argparse import ArgumentDefaultsHelpFormatter , SUPPRESS , OPTIONAL , ZERO_OR_MORE
2+ from argparse import Action
23
34class DisplayDefaultsNotNone (ArgumentDefaultsHelpFormatter ):
45 def _get_help_string (self , action ):
@@ -7,4 +8,18 @@ def _get_help_string(self, action):
78 defaulting_nargs = [OPTIONAL , ZERO_OR_MORE ]
89 if (action .option_strings or action .nargs in defaulting_nargs ) and action .default : # Only add default info if it's not None
910 help_string += " (default: %(default)s)" # NORUFF
10- return help_string
11+ return help_string
12+
13+
14+ class DefaultTrackingAction (Action ):
15+ def __init__ (self , option_strings , dest , default = None , required = False , ** kwargs ):
16+ # Store the default value to check later
17+ self .default_value = default
18+ super ().__init__ (
19+ option_strings , dest , default = default , required = required , ** kwargs
20+ )
21+
22+ def __call__ (self , parser , namespace , values , option_string = None ):
23+ # Set an attribute to track whether the value was explicitly set
24+ setattr (namespace , self .dest , values )
25+ setattr (namespace , f"{ self .dest } _explicitly_set" , True )
0 commit comments