From 099133ba43547600768b401699cb5b2f4c1f229b Mon Sep 17 00:00:00 2001 From: Six Date: Thu, 20 May 2010 20:37:56 -0400 Subject: changed examples for next release --- .hgignore | 1 + dodai/config/__init__.py | 41 +++++++++++++++++++++++++---------------- dodai/config/databases/sa.py | 3 +-- examples/config/config.cfg | 4 ++++ examples/example_01.py | 36 +++++++++++++++--------------------- examples/example_02.py | 15 +++++++++------ examples/example_03.py | 13 +++++++++---- test/test_config/test_init.py | 3 --- 8 files changed, 64 insertions(+), 52 deletions(-) diff --git a/.hgignore b/.hgignore index 3c866fc..b3dab9e 100644 --- a/.hgignore +++ b/.hgignore @@ -6,3 +6,4 @@ bin include lib .coverage +examples/config/example.log diff --git a/dodai/config/__init__.py b/dodai/config/__init__.py index 6c3011c..e849f8e 100644 --- a/dodai/config/__init__.py +++ b/dodai/config/__init__.py @@ -25,25 +25,36 @@ class Config(object): setattr(obj, key, val) return obj - def __getattr__(self, key): - - if 'files' == key: + @property + def files(self): + if not hasattr(self, '_files'): from dodai.config.files import ConfigFiles from dodai.tools.odict import OrderedDict from dodai.tools import Section from dodai.tools.himo import String2Himo + from ConfigParser import ConfigParser s2h = String2Himo() - self.files = ConfigFiles(OrderedDict, Section, s2h) - return self.files - elif 'options' == key: + self._files = ConfigFiles(OrderedDict, Section, s2h) + self._files.register_parser_object(ConfigParser) + return self._files + + @property + def options(self): + if not hasattr(self, '_options'): from dodai.config.option import ConfigOption - self.options = ConfigOption() - return self.options - elif 'logs' == key: + self._options = ConfigOption() + return self._options + + @property + def logs(self): + if not hasattr(self, '_logs'): from dodai.config.log import ConfigLog - self.logs = ConfigLog() - return self.logs - elif 'databases' == key: + self._logs = ConfigLog() + return self._logs + + @property + def databases(self): + if not hasattr(self, '_databases'): # Wire up the sqlalchemy objects to use in the sa object # which will be used as the default database handler from dodai.config.databases import ConfigDatabases @@ -52,10 +63,8 @@ class Config(object): from sqlalchemy import create_engine from dodai.db import Db sa = Sa(create_engine, sessionmaker, Db) - self.databases = ConfigDatabases(sa, 'sa') - return self.databases - else: - raise KeyError(key) + self._databases = ConfigDatabases(sa, 'sa') + return self._databases def set(self, key, val): if not hasattr(self, 'vars'): diff --git a/dodai/config/databases/sa.py b/dodai/config/databases/sa.py index 21999c2..eaf35ea 100644 --- a/dodai/config/databases/sa.py +++ b/dodai/config/databases/sa.py @@ -15,7 +15,6 @@ # You should have received a copy of the GNU General Public License # along with Dodai. If not, see . - class Sa(object): """Callable object that will wire up sqlalchemy engine and session objects @@ -74,7 +73,7 @@ class Sa(object): out.append('+{section[protocol_extra]}') out.append('://') if section.has_key('filename') and section['filename']: - out.append('{section[filename]}') + out.append('/{section[filename]}') else: out.append('{section[username]}:{section[password]}@') out.append('{section[hostname]}') diff --git a/examples/config/config.cfg b/examples/config/config.cfg index 36b0414..a99c4bd 100644 --- a/examples/config/config.cfg +++ b/examples/config/config.cfg @@ -27,3 +27,7 @@ username=test password=test port=12345 database=testing + +[test_file_db] +protocol=sqlite +filename=test_file_db.sqlite diff --git a/examples/example_01.py b/examples/example_01.py index 7915e5f..d77c163 100644 --- a/examples/example_01.py +++ b/examples/example_01.py @@ -35,35 +35,29 @@ def main(config): print config.__dict__ - if __name__ == "__main__": config = Config() - config.options().add_quiet() - config.options().add_log_level() - config.options().parser.add_option('-c', '--crazy', dest='crazy', + config.options.add_quiet() + config.options.add_log_level() + config.options.parser.add_option('-c', '--crazy', dest='crazy', default=False, help="Crazy mode") - config.set('crazy', config.options().get_options().crazy) - config.set('verbose', config.options().get_options().verbose) + config.set('crazy', config.options.get_options().crazy) + config.set('verbose', config.options.get_options().verbose) - path = p.join(p.dirname(p.abspath(__file__)), 'logs') - config.logs().set_directory(path) - config.logs().set_log_level(config.options().get_options().log_level) - log = config.logs().load(__file__) - config.logs().attach_file_handler(log, 'example.log') - config.logs().attach_screen_handler(log, 'critical') + log_directory = p.join(p.dirname(p.abspath(__file__)), 'config') + config.logs.set_directory(log_directory) + config.logs.set_log_level(config.options.get_options().log_level) + log = config.logs.load('test_log') + config.logs.attach_file_handler(log, 'example.log') + config.logs.attach_screen_handler(log, 'critical') config.set('log', log) path = p.join(p.dirname(p.abspath(__file__)), 'config') - config.files().set_directory(path) - config.files().load('config.cfg') - foo = config.files().parser().get('title', 'foo') - config.set('foo', foo) - - - - - + filename = p.join(path, 'config.cfg') + config.files.add(filename) + sections = config.files.load() + config.set('foo', sections['title']['foo']) main(config()) diff --git a/examples/example_02.py b/examples/example_02.py index 2844121..28ee179 100644 --- a/examples/example_02.py +++ b/examples/example_02.py @@ -43,15 +43,18 @@ from dodai.config import Config def main(config): print config.db.__dict__ + print config.file_db.__dict__ if __name__ == "__main__": - config = Config() + # path to config file path = p.join(p.dirname(p.abspath(__file__)), 'config') - config.files().set_directory(path) - config.files().load('config.cfg') - config.dbs().add_config(config_parser=config.files().parser()) - db = config.dbs().load('test_db') - config.set('db', db) + filename = p.join(path, 'config.cfg') + + config = Config() + config.files.add(filename) + config.databases.add(config.files.load()) + config.set('db', config.databases.load('test_db')) + config.set('file_db', config.databases.load('test_file_db')) main(config()) diff --git a/examples/example_03.py b/examples/example_03.py index b94c39e..da84eb8 100644 --- a/examples/example_03.py +++ b/examples/example_03.py @@ -38,7 +38,7 @@ On ubuntu you can do: """ from dodai import Configure - +from dodai.tools import home_directory def main(config): print config.db.engine @@ -47,8 +47,13 @@ def main(config): if __name__ == "__main__": - config = Configure('test') - db = config.dbs().load('test_db') + + # path to config file + path = p.join(p.dirname(p.abspath(__file__)), 'config') + filename = p.join(path, 'config.cfg') + + config = Configure('test', filename) + db = config.databases.load('test_db') config.set('db', db) - config.set('home_directory', config.home_directory) + config.set('home_directory', home_directory()) main(config()) diff --git a/test/test_config/test_init.py b/test/test_config/test_init.py index 3246af2..7e7e873 100644 --- a/test/test_config/test_init.py +++ b/test/test_config/test_init.py @@ -44,9 +44,6 @@ class TestConfig(unittest.TestCase): def test_databases(self): self.assertTrue(isinstance(self.config.databases, ConfigDatabases)) - def test_getattr_error(self): - self.failUnlessRaises(KeyError, self.config.__getattr__, 'foo') - def test_set_one(self): self.config.set('foo', 'bar') self.assertTrue('foo' in self.config.vars.keys()) -- cgit v1.2.3