Hi Fred, A couple of other things about the ConfigParser module that I find a bit strange and I'm not sure that is intended behaivior. 1. Option gets converted to lower case and therefore is not case sensitive, but section is case sensitive. I would have thought that both would be or neither would be case sensitive. (My preference would be that neither would be case sensitive.) example if I have a config.txt file with: [File 1] databaseADF adsfa:octago DASFDAS user:Me password:blank then this gets written out it is (were databaseADF is now databaseadf): [File 1] databaseadf adsfa = octago DASFDAS password = blank user = Me Using "file 1' instead of "File 1": >>> Config.config <ConfigParser.SafeConfigParser instance at 0x010EEE40> >>> Config.config.options('file 1') Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 240, in options raise NoSectionError(section) NoSectionError: No section: 'file 1' But using 'dataBASEadf adsfa' instead of 'databaseADF adsfa' or 'databaseadf adsfa ' is OK and returns the correct value: >>> Config.config.get('File 1', 'dataBASEadf adsfa') 'octago DASFDAS' The differences in handling the option and section are annoying and should at least be described in the docs if they cant be changed. 2. SafeConfigParser is the recommended ConfigParser in the docs. I'm not sure what is meant be safe. When values are read in from a file they are first converted to strings. This is not true for values set within the code. If I set an option with anything other than a string then this occurs: >>> Config.config.set('File 1', 'test', 2) >>> Config.config.get('File 1', 'test') Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 518, in get return self._interpolate(section, option, value, d) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 576, in _interpolate self._interpolate_some(option, L, rawval, section, vars, 1) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 585, in _interpolate_some p = rest.find("%") AttributeError: 'int' object has no attribute 'find' Likely the value assigned to the object should be first converted to a string before it is stored. The same thing happens if a dict or float is passed in as a default: >>> c= Config.SafeConfigParser({'test':{'1':"One",'2':"Two"}, 'foo':2.3}) This looks OK: >>> c.write(sys.stdout) [DEFAULT] test = {'1': 'One', '2': 'Two'} foo = 2.3 Problem with get: >>> c.get('DEFAULT', 'test') Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 518, in get return self._interpolate(section, option, value, d) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 576, in _interpolate self._interpolate_some(option, L, rawval, section, vars, 1) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 585, in _interpolate_some p = rest.find("%") AttributeError: 'dict' object has no attribute 'find' >>> c.get('DEFAULT', 'foo') Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 518, in get return self._interpolate(section, option, value, d) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 576, in _interpolate self._interpolate_some(option, L, rawval, section, vars, 1) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 585, in _interpolate_some p = rest.find("%") AttributeError: 'float' object has no attribute 'find' >>> If we set raw= True, then we get back an object (<type 'float'>) and not a string: >>> c.get('DEFAULT', 'foo', raw= True) 2.2999999999999998 If we use vars= {} an exception is also thrown: >>> c.get('DEFAULT', 'junk', vars= {'junk': 99}) Traceback (most recent call last): File "<interactive input>", line 1, in ? File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 518, in get return self._interpolate(section, option, value, d) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 576, in _interpolate self._interpolate_some(option, L, rawval, section, vars, 1) File "E:\PROGRA~1\PYTHON23\lib\ConfigParser.py", line 585, in _interpolate_some p = rest.find("%") AttributeError: 'int' object has no attribute 'find' One last comment is that 'interpolation' is a bit confusing in the docs. Maybe 'substitution' would be a better word. Thanks, Gordon Williams
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4