# HG changeset patch # User Radek Brich # Date 1365855086 -7200 # Node ID fdaa7dc9035eb986bc223ec4ac26c55298a0bb30 # Parent cc27136cdead30e2b4f9e2eb91ce6dc0ab43fb5b Refactor. diff -r cc27136cdead -r fdaa7dc9035e README --- a/README Sat Apr 06 00:07:17 2013 +0200 +++ b/README Sat Apr 13 14:11:26 2013 +0200 @@ -5,6 +5,7 @@ * ansicolor - change color of text in terminal using ANSI escape sequences * coloredformatter - logging.Formatter which adds ANSI colors to output + * configparser - simple config file parser utilizing Python's exec() builtin * makeurl - adjust string for using in URL by replacing symbols and combined unicode chars * prettysize - print file sizes in human readable form * soap - minimal SOAP client diff -r cc27136cdead -r fdaa7dc9035e pycolib/configparser.py --- a/pycolib/configparser.py Sat Apr 06 00:07:17 2013 +0200 +++ b/pycolib/configparser.py Sat Apr 13 14:11:26 2013 +0200 @@ -1,4 +1,4 @@ -# simple config file reader using Python's syntax and parser +# simple config file parser utilizing Python's exec() builtin class ConfigParserError(Exception): @@ -7,46 +7,45 @@ class ConfigParser: def __init__(self): - self.args = {} # config file arguments - self.registered_args = {} + self.options = {} + self.values = {} - def add_argument(self, name, type_=str, default=None): - """Register argument name, type and default value.""" - self.registered_args[name] = {'type':type_, 'default':default} - self.args[name] = default + def add_option(self, name, type_=str, default=None): + """Register option name, type and default value.""" + self.options[name] = {'type':type_, 'default':default} + self.values[name] = default def load(self, fname): - """Load config file and check loaded values.""" - self.parse(fname) + """Read config file and check loaded values.""" + self.read(fname) self.check() - def parse(self, fname): - """Parse config file. Does not check values.""" + def read(self, fname): + """Read config file. Does not check values.""" with open(fname) as f: - exec(f.read(), self.args) + exec(f.read(), self.values) def check(self): - """Check loaded argument values against registered types.""" - for key in self.args.keys(): + """Check option values against registered types.""" + for key in self.values.keys(): if key == '__builtins__': continue - if key in self.registered_args: - # arg registered, check type - type_ = self.registered_args[key]['type'] - if not isinstance(self.args[key], type_) and not self.args[key] is None: + if key in self.options: + type_ = self.options[key]['type'] + if not isinstance(self.values[key], type_) and not self.values[key] is None: raise ConfigParserError("Bad value of config parameter '%s': type is %s but should be %s" - % (key, type(self.args[key]), type_)) + % (key, type(self.values[key]), type_)) else: raise ConfigParserError("Unknown config parameter '%s'." % key) def __getattr__(self, name): """Attribute access for config parameters. - cfg.my_param <===> cfg.args['myparam'] + cfg.my_param <===> cfg.values['myparam'] """ - if name in self.args: - return self.args[name] + if name in self.values: + return self.values[name] else: raise AttributeError() diff -r cc27136cdead -r fdaa7dc9035e tests/test_configparser.py --- a/tests/test_configparser.py Sat Apr 06 00:07:17 2013 +0200 +++ b/tests/test_configparser.py Sat Apr 13 14:11:26 2013 +0200 @@ -10,17 +10,17 @@ def setUp(self): self.config = ConfigParser() - self.config.add_argument('arg_str') - self.config.add_argument('arg_int', int, 1) + self.config.add_option('arg_str') + self.config.add_option('arg_int', int, 1) script_path = os.path.dirname(os.path.realpath(__file__)) self.data_path = os.path.join(script_path, 'data') - def test_add_argument(self): + def test_add_option(self): name = 'argname' - self.config.add_argument(name, int, 1) - self.assertEqual(self.config.registered_args[name]['type'], int) - self.assertEqual(self.config.registered_args[name]['default'], 1) - self.assertEqual(self.config.args[name], 1) + self.config.add_option(name, int, 1) + self.assertEqual(self.config.options[name]['type'], int) + self.assertEqual(self.config.options[name]['default'], 1) + self.assertEqual(self.config.values[name], 1) def test_load_badname(self): self.assertRaises(IOError, self.config.load, 'bad/file_name')