00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 import ConfigParser, optparse
00031 import os
00032 import sys
00033 import gettext
00034 from Koo import Rpc
00035 from PyQt4.QtCore import QDir, QUrl
00036 
00037 
00038 
00039 
00040 class ConfigurationManager(object):
00041         
00042         
00043         
00044         def __init__(self, fileName=None):
00045                 self.options = {
00046                         'login.db': 'test',
00047                         'login.url': 'http://admin@localhost:8069',
00048                         'path.share': os.path.join(sys.prefix, 'share/Koo/'),
00049                         'path.pixmaps': os.path.join(sys.prefix, 'share/pixmaps/Koo/'),
00050                         'path.ui': os.path.join(sys.prefix, 'share/Koo/ui'), 
00051                         'tip.autostart': False,
00052                         'tip.position': 0,
00053                         'print_directly': False,
00054                         'logging.logger': '',
00055                         'logging.level': 'DEBUG',
00056                         'logging.output': 'stdout',
00057                         'logging.verbose': False,
00058                         'client.default_path': os.path.expanduser('~'),
00059                         'stylesheet' : '',
00060                         'tabs_position' : 'top',
00061                         'tabs_closable' : True,
00062                         'show_toolbar' : True,
00063                         'sort_mode' : 'all_items',
00064                         'pos_mode' : False,
00065                         'kde.enabled' : True,
00066                         'attachments_dialog' : False,
00067                 }
00068                 parser = optparse.OptionParser()
00069                 parser.add_option("-c", "--config", dest="config",help=_("specify alternate config file"))
00070                 parser.add_option("-v", "--verbose", action="store_true", default=False, dest="verbose", help=_("enable basic debugging"))
00071                 parser.add_option("-d", "--log", dest="log_logger", default='', help=_("specify channels to log"))
00072                 parser.add_option("-l", "--log-level", dest="log_level",default='ERROR', help=_("specify the log level: INFO, DEBUG, WARNING, ERROR, CRITICAL"))
00073                 parser.add_option("-u", "--url", dest="url", help=_("specify the server (ie. http://admin@localhost:8069)"))
00074                 parser.add_option("", "--stylesheet", dest="stylesheet", help=_("specify stylesheet to apply"))
00075                 parser.add_option("", "--pos-mode", action="store_true", default=False, dest="pos_mode", help=_("use POS (Point of Sales) mode"))
00076                 (opt, args) = parser.parse_args()
00077 
00078                 self.rcfile = fileName or opt.config or os.environ.get('TERPRC') or os.path.join(self.homeDirectory(), 'koo.rc')
00079                 self.load()
00080 
00081                 if opt.url:
00082                         self.options['login.url'] = opt.url
00083                 if 'login.url' in self.options:
00084                         url = QUrl( self.options['login.url'] )
00085                         if url.isValid():
00086                                 self.options['login.server'] = unicode( url.host() )
00087                                 self.options['login.port'] = unicode( url.port() )
00088                                 self.options['login.protocol'] = '%s://' % url.scheme() 
00089                                 self.options['login.login'] = unicode( url.userName() )
00090 
00091                 if opt.verbose:
00092                         self.options['logging.verbose']=True
00093                 self.options['logging.logger'] = opt.log_logger
00094                 self.options['logging.level'] = opt.log_level
00095                 self.options['stylesheet'] = opt.stylesheet
00096                 self.options['pos_mode'] = opt.pos_mode
00097 
00098         def homeDirectory(self):
00099                 return unicode(QDir.toNativeSeparators(QDir.homePath()))
00100 
00101         
00102         def save(self):
00103                 try:
00104                         p = ConfigParser.ConfigParser()
00105                         sections = {}
00106                         for o in self.options.keys():
00107                                 if not len(o.split('.'))==2:
00108                                         continue
00109                                 osection,oname = o.split('.')
00110                                 if not p.has_section(osection):
00111                                         p.add_section(osection)
00112                                 p.set(osection,oname,self.options[o])
00113                         p.write(file(self.rcfile,'wb'))
00114                 except:
00115                         import logging
00116                         log = logging.getLogger('common.options')
00117                         log.warn('Unable to write config file %s !'% (self.rcfile,))
00118                 return True
00119 
00120         
00121         def load(self):
00122                 try:
00123                         self.rcexist = False
00124                         if not os.path.isfile(self.rcfile):
00125                                 self.save()
00126                                 return False
00127                         self.rcexist = True
00128 
00129                         p = ConfigParser.ConfigParser()
00130                         p.read([self.rcfile])
00131                         for section in p.sections():
00132                                 for (name,value) in p.items(section):
00133                                         if value=='True' or value=='true':
00134                                                 value = True
00135                                         if value=='False' or value=='false':
00136                                                 value = False
00137                                         self.options[section+'.'+name] = value
00138                 except Exception, e:
00139                         import logging
00140                         log = logging.getLogger('common.options')
00141                         log.warn('Unable to read config file %s !'% (self.rcfile,))
00142                 return True
00143 
00144         def __setitem__(self, key, value):
00145                 self.options[key]=value
00146 
00147         def __getitem__(self, key):
00148                 return self.options[key]
00149 
00150         def get(self, key, defaultValue):
00151                 return self.options.get(key, defaultValue)
00152 
00153         
00154         
00155         def loadSettings(self):
00156                 try:
00157                         settings = Rpc.session.call( '/object', 'execute', 'nan.koo.settings', 'get_settings' )
00158                 except:
00159                         settings = {}
00160                 self.options.update( settings )
00161                 Rpc.ViewCache.exceptions = self.options.get('cache_exceptions', [])
00162 
00163 options = ConfigurationManager()
00164