Re: [Rest2web-develop] None and Defaults
Brought to you by:
mjfoord
From: Michael F. <mi...@pc...> - 2005-08-16 15:28:10
|
Nicola Larosa wrote: >>I have a question about your changes to validate regarding None : >> >>Specifically this code : >> if missing: >> try: >> value = fun_kwargs['default'] >> except KeyError: >> raise ValidateMissingValue >> # None is an admissible value for all types >> if isinstance(value, StringTypes) and (value.lower() == 'none'): >> return None >> >>This means that the string 'none' in a value will *always* be converted >>to ``None``. I think this should only happen if 'none' is the default >>value and the value itself is missing. > > > Maybe somebody would like to explicitly put a None value in the config > value, instead of just omitting it and having to say "default = None" in > the configspec. Maybe the default is something else, and there's a need to > unset a value in the config. > > I'm cool with the "None" string, by itself, always meaning the None value, > like True or False, but not restricted to one check type. Maybe we should > take out that "lower" method, though. > I'm not - ConfigObj shouldn't change the type without the programmer specifying it. Don't forget the value is set by the *user* - not the programmer. ConfigObj should only convert type if the programmer says. None shouldn't be an acceptable value for every check - maybe it *isn't* an acceptable value (what if the programmer really does want an integer there - he expects validate to tell him). > > >>Also - in case validate is called later ``None`` ought to always go >>through (e.g. to verify user changes to the config file made via a GUI). > > > That's right, I didn't think about that, good catch. > > > >>These two changes make the code (I think) : >> >> if missing: >> try: >> value = fun_kwargs['default'] >> except KeyError: >> raise ValidateMissingValue >> # None is an admissible value for all types >> if isinstance(value, StringTypes) and (value.lower() == 'none'): >> value = None >> if value is None: >> return None > > > Then it would become something like: > > if missing: > try: > value = fun_kwargs['default'] > except KeyError: > raise ValidateMissingValue > # None is an admissible value for all types > if (value is None) or (value == 'None'): > return None > This means that someone's program will break because a user enters 'None' as a string value. It ought to be possible to have 'None' as a string value in a config file without our program converting it to another type. I thought the point was to catch defaults ? My proposed (and currently committed) solution allows the programmer to specify that None is ok (by using default='None'), which makes the value explicitly (user sets value as 'None') and implicitly (user omits value altogether) optional. I'm fine with removing the 'lower'. All the best, Fuzzy |