core: configuration file
SàT's main options can now be put in a configuration file which can be in different locations Bridge: new getConfig option
This commit is contained in:
parent
3926cd25c7
commit
1da78d1301
6 changed files with 84 additions and 5 deletions
|
|
@ -81,6 +81,9 @@ class DBusBridgeFrontend(BridgeFrontend):
|
|||
def disconnect(self, profile_key="@DEFAULT@"):
|
||||
return self.db_comm_iface.disconnect(profile_key)
|
||||
|
||||
def getConfig(self, section, name, profile_key='@DEFAULT@'):
|
||||
return unicode(self.db_comm_iface.getConfig(section, name, profile_key))
|
||||
|
||||
def getContacts(self, profile_key="@DEFAULT@"):
|
||||
return self.db_comm_iface.getContacts(profile_key)
|
||||
|
||||
|
|
|
|||
|
|
@ -170,6 +170,12 @@ class DbusObject(dbus.service.Object):
|
|||
def disconnect(self, profile_key="@DEFAULT@"):
|
||||
return self.cb["disconnect"](unicode(profile_key))
|
||||
|
||||
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
|
||||
in_signature='sss', out_signature='s',
|
||||
async_callbacks=None)
|
||||
def getConfig(self, section, name, profile_key='@DEFAULT@'):
|
||||
return self.cb["getConfig"](unicode(section), unicode(name), unicode(profile_key))
|
||||
|
||||
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
|
||||
in_signature='s', out_signature='a(sa{ss}as)',
|
||||
async_callbacks=None)
|
||||
|
|
|
|||
|
|
@ -320,6 +320,17 @@ doc_param_0=sub_type: as for [subscribe]
|
|||
doc_param_1=entity: as for [subscribe]
|
||||
doc_param_2=%(doc_profile_key)s
|
||||
|
||||
[getConfig]
|
||||
type=method
|
||||
category=communication
|
||||
sig_in=sss
|
||||
sig_out=s
|
||||
param_2_default='@DEFAULT@'
|
||||
doc=get main configuration option
|
||||
doc_param_0=section: section of the configuration file (empty string for DEFAULT)
|
||||
doc_param_1=name: name of the option
|
||||
doc_param_2=%(doc_profile_key)s
|
||||
|
||||
[setParam]
|
||||
type=method
|
||||
category=communication
|
||||
|
|
|
|||
33
src/core/default_config.py
Normal file
33
src/core/default_config.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
SAT: a jabber client
|
||||
Copyright (C) 2009, 2010, 2011 Jérôme Poisson (goffi@goffi.org)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
CONST = {
|
||||
'client_name' : u'SàT (Salut à toi)',
|
||||
'client_version' : u'0.2.0D', #Please add 'D' at the end for dev versions
|
||||
'local_dir' : '~/.sat'
|
||||
}
|
||||
|
||||
### Defaut configuration values ###
|
||||
|
||||
default_config = {
|
||||
'local_dir': '~/.sat',
|
||||
'media_dir': '/usr/share/sat/media',
|
||||
}
|
||||
|
|
@ -97,20 +97,22 @@ class SAT(service.Service):
|
|||
def __init__(self):
|
||||
#TODO: standardize callback system
|
||||
|
||||
local_dir = os.path.expanduser(self.get_const('local_dir'))
|
||||
if not os.path.exists(local_dir):
|
||||
os.makedirs(local_dir)
|
||||
|
||||
self.__waiting_conf = {} #callback called when a confirmation is received
|
||||
self.__progress_cb_map = {} #callback called when a progress is requested (key = progress id)
|
||||
self.__general_cb_map = {} #callback called for general reasons (key = name)
|
||||
self.__private_data = {} #used for internal callbacks (key = id)
|
||||
self.trigger = TriggerManager() #trigger are used to change SàT behaviour
|
||||
self.profiles = {}
|
||||
self.plugins = {}
|
||||
self.menus = {} #used to know which new menus are wanted by plugins
|
||||
|
||||
self.memory=Memory(self)
|
||||
|
||||
local_dir = os.path.expanduser(self.get_const('local_dir'))
|
||||
if not os.path.exists(local_dir):
|
||||
os.makedirs(local_dir)
|
||||
|
||||
self.trigger = TriggerManager() #trigger are used to change SàT behaviour
|
||||
|
||||
|
||||
self.bridge=DBusBridge()
|
||||
self.bridge.register("getVersion", lambda: self.get_const('client_version'))
|
||||
|
|
@ -126,6 +128,7 @@ class SAT(service.Service):
|
|||
self.bridge.register("getPresenceStatus", self.memory.getPresenceStatus)
|
||||
self.bridge.register("getWaitingSub", self.memory.getWaitingSub)
|
||||
self.bridge.register("sendMessage", self.sendMessage)
|
||||
self.bridge.register("getConfig", self.memory.getConfig)
|
||||
self.bridge.register("setParam", self.setParam)
|
||||
self.bridge.register("getParamA", self.memory.getParamA)
|
||||
self.bridge.register("getParamsUI", self.memory.getParamsUI)
|
||||
|
|
|
|||
|
|
@ -24,12 +24,14 @@ from __future__ import with_statement
|
|||
import os.path
|
||||
import time
|
||||
import cPickle as pickle
|
||||
from ConfigParser import SafeConfigParser, NoOptionError, NoSectionError
|
||||
from xml.dom import minidom
|
||||
from logging import debug, info, warning, error
|
||||
import pdb
|
||||
from twisted.internet import defer
|
||||
from twisted.words.protocols.jabber import jid
|
||||
from sat.tools.xml_tools import paramsXml2xmlUI
|
||||
from sat.core.default_config import default_config
|
||||
|
||||
SAVEFILE_PARAM_XML="/param" #xml parameters template
|
||||
SAVEFILE_PARAM_DATA="/param" #individual & general parameters; _ind and _gen suffixes will be added
|
||||
|
|
@ -399,10 +401,31 @@ class Memory:
|
|||
self.private={} #used to store private value
|
||||
self.server_features={} #used to store discovery's informations
|
||||
self.server_identities={}
|
||||
self.config = self.parseMainConf()
|
||||
host.set_const('savefile_history', SAVEFILE_HISTORY)
|
||||
host.set_const('savefile_private', SAVEFILE_PRIVATE)
|
||||
self.load()
|
||||
|
||||
def parseMainConf(self):
|
||||
"""look for main .ini configuration file, and parse it"""
|
||||
_config = SafeConfigParser(defaults=default_config)
|
||||
_config.read(['/etc/sat.conf', os.path.expanduser('~/sat.conf'), 'sat.conf'])
|
||||
return _config
|
||||
|
||||
def getConfig(self, section, name, profile):
|
||||
"""Get the main configuration option
|
||||
@param section: section of the config file (None or '' for DEFAULT)
|
||||
@param name: name of the option
|
||||
@param profile: %(doc_profile_key)s"""
|
||||
if not section:
|
||||
section='DEFAULT'
|
||||
try:
|
||||
_value = self.config.get(section, name)
|
||||
except NoOptionError, NoSectionError:
|
||||
_value = ''
|
||||
|
||||
return os.path.expanduser(_value) if name.endswith('_path') or name.endswith('_dir') else _value
|
||||
|
||||
def load(self):
|
||||
"""Load parameters and all memory things from file/db"""
|
||||
param_file_xml = os.path.expanduser(self.host.get_const('local_dir')+
|
||||
|
|
|
|||
Loading…
Reference in a new issue