diff options
author | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2009-12-21 00:24:03 -0200 |
---|---|---|
committer | Rafael G. Martins <rafael@rafaelmartins.eng.br> | 2009-12-21 00:24:03 -0200 |
commit | f7702480517b06f8962fe98ff93895208c1a91f9 (patch) | |
tree | 78e7af40559c71cb694d5c50ef0458ca47d2e39f /g_octave/config.py | |
parent | renaming lib/ to g-octave/ (diff) | |
download | g-octave-f7702480517b06f8962fe98ff93895208c1a91f9.tar.gz g-octave-f7702480517b06f8962fe98ff93895208c1a91f9.tar.bz2 g-octave-f7702480517b06f8962fe98ff93895208c1a91f9.zip |
renamed g-octave/ to g_octave/ #fail :(
Diffstat (limited to 'g_octave/config.py')
-rw-r--r-- | g_octave/config.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/g_octave/config.py b/g_octave/config.py new file mode 100644 index 0000000..f802918 --- /dev/null +++ b/g_octave/config.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +__all__ = [ + 'Config', + 'ConfigException', +] + +import ConfigParser +import simplejson +import os + +class ConfigException(Exception): + pass + + +class Config(object): + + __defaults = { + 'db': '/var/cache/octave-forge', + 'overlay': '/usr/local/g-octave', + 'categories': 'main,extra,language', + 'db_mirror': 'http://files.rafaelmartins.eng.br/octave-forge', + 'pm': '/usr/bin/emerge', + 'pm_options': '--ask --verbose', + } + + __section_name = 'main' + + + def __init__(self, fetch_phase=False): + + # Config Parser + self.__config = ConfigParser.ConfigParser(self.__defaults) + + if os.path.exists('/etc/g-octave.cfg'): + self.__config_file = '/etc/g-octave.cfg' + else: + self.__config_file = '../etc/g-octave.cfg.devel' + + self.__config.read(self.__config_file) + + if not fetch_phase: + + # Cache (JSON) + cache_file = os.path.join(self.__getattr__('db'), 'cache.json') + fp = open(cache_file) + self.__cache = simplejson.load(fp) + fp.close() + + # JSON + json_file = os.path.join(self.__getattr__('db'), self.__cache['files']['info.json']) + fp = open(json_file) + self.__info = simplejson.load(fp) + fp.close() + + self.__check_dirs() + + + def __getattr__(self, attr): + + if self.__defaults.has_key(attr): + return self.__config.get(self.__section_name, attr) + elif self.__info.has_key(attr): + return self.__info[attr] + elif attr == 'cache': + return self.__cache['files'] + else: + raise ConfigException('Invalid option: %s' % attr) + + + def __check_dirs(self): + + dirs = [ + self.__config.get(self.__section_name, 'db'), + self.__config.get(self.__section_name, 'overlay') + ] + + for dir in dirs: + if not os.path.isdir(dir): + os.makedirs(dir, 0755) + + +if __name__ == '__main__': + conf = Config() + print conf.pm_options |