aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael G. Martins <rafael@rafaelmartins.eng.br>2009-12-21 00:24:03 -0200
committerRafael G. Martins <rafael@rafaelmartins.eng.br>2009-12-21 00:24:03 -0200
commitf7702480517b06f8962fe98ff93895208c1a91f9 (patch)
tree78e7af40559c71cb694d5c50ef0458ca47d2e39f /g_octave/config.py
parentrenaming lib/ to g-octave/ (diff)
downloadg-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.py86
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