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