refactoring: using xml params part II

This commit is contained in:
Goffi 2009-11-06 23:31:00 +01:00
commit a18f064aa2
7 changed files with 68 additions and 64 deletions

View file

@ -42,8 +42,8 @@ class QuickApp():
self.bridge.register("askConfirmation", self.askConfirmation, "request")
###now we get the essential params###
self.whoami=JID(self.bridge.getParam("JabberID","Connection")[0])
self.watched=self.bridge.getParam("Watched", "Misc")[0].split() #TODO: put this in a plugin
self.whoami=JID(self.bridge.getParamV("JabberID","Connection"))
self.watched=self.bridge.getParamV("Watched", "Misc").split() #TODO: put this in a plugin
## misc ##
self.onlineContact = set() #FIXME: temporary

View file

@ -61,14 +61,17 @@ class DBusBridgeFrontend(BridgeFrontend):
def setPresence(self, to="", type="", show="", status="", priority=0):
return self.db_comm_iface.setPresence(to, type, show, status, priority)
def setParam(self, name, value, namespace="default"):
return self.db_comm_iface.setParam(name, value, namespace)
def setParam(self, name, value, category):
return self.db_comm_iface.setParam(name, value, category)
def getParam(self, name, namespace="default"):
return self.db_comm_iface.getParam(name, namespace)
def getParamV(self, name, category):
return self.db_comm_iface.getParamV(name, category)
def getParams(self, namespace="default"):
return self.db_comm_iface.getParams(namespace)
def getParams(self):
return self.db_comm_iface.getParams()
def getParamsForCategory(self, category):
return self.db_comm_iface.getParamsForCategory(category)
def getParamsCategories(self):
return self.db_comm_iface.getParamsCategories()

View file

@ -340,7 +340,7 @@ class MainWindow(wx.Frame, QuickApp):
def onParam(self, e):
debug("Param request")
param=Param(self.bridge.setParam, self.bridge.getParam, self.bridge.getParams, self.bridge.getParamsCategories)
param=Param(self.bridge)
def onExit(self, e):
self.Close()

View file

@ -23,17 +23,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import wx
import pdb
from xml.dom import minidom
from logging import debug, info, error
class Param(wx.Frame):
def __init__(self, setParam, getParam, getParams, getParamsCategories, title="Configuration"):
def __init__(self, bridge, title="Configuration"):
super(Param, self).__init__(None, title=title)
self.setParam=setParam
self.getParam=getParam
self.getParams=getParams
self.getParamsCategories=getParamsCategories
self.bridge = bridge
self.modified={} # dict of modified data (i.e. what we have to save)
@ -48,7 +46,7 @@ class Param(wx.Frame):
self.MakeModal()
for category in self.getParamsCategories():
for category in self.bridge.getParamsCategories():
self.addCategory(category)
self.Show()
@ -57,17 +55,22 @@ class Param(wx.Frame):
panel=wx.Panel(self.notebook)
panel.sizer = wx.BoxSizer(wx.VERTICAL)
for param in self.getParams(category):
cat_dom = minidom.parseString(self.bridge.getParamsForCategory(category))
for param in cat_dom.documentElement.getElementsByTagName("param"):
name = param.getAttribute("name")
type = param.getAttribute("type")
value = param.getAttribute("value")
sizer = wx.BoxSizer(wx.HORIZONTAL)
label=wx.StaticText(panel, -1, param[0]+" ")
if param[2]=="string":
ctrl = wx.TextCtrl(panel, -1, param[1])
elif param[2]=="password":
ctrl = wx.TextCtrl(panel, -1, param[1], style=wx.TE_PASSWORD)
label=wx.StaticText(panel, -1, name+" ")
if type=="string":
ctrl = wx.TextCtrl(panel, -1, value)
elif type=="password":
ctrl = wx.TextCtrl(panel, -1, value, style=wx.TE_PASSWORD)
else:
error("FIXME FIXME FIXME") #FIXME !
raise NotImplementedError
ctrl.param_id=(param[0], category)
ctrl.param_id=(name, category)
sizer.Add(label)
sizer.Add(ctrl, 1, flag=wx.EXPAND)
panel.sizer.Add(sizer, flag=wx.EXPAND)
@ -76,6 +79,7 @@ class Param(wx.Frame):
panel.SetSizer(panel.sizer)
panel.SetAutoLayout(True)
self.notebook.AddPage(panel, category)
cat_dom.unlink()
def onTextChanged(self, event):
"""Called when a paramated is modified"""
@ -88,7 +92,7 @@ class Param(wx.Frame):
debug("close")
#now we save the modifier params
for param in self.modified:
self.setParam(param[0], self.modified[param], param[1])
self.bridge.setParam(param[0], self.modified[param], param[1])
self.MakeModal(False)
event.Skip()

12
sat.tac
View file

@ -86,6 +86,7 @@ class SatXMPPClient(client.XMPPClient):
return self.__connected
def connectionLost(self, connector, unused_reason):
self.__connected=False
print "********** DISCONNECTED **********"
try:
self.keep_alife.stop()
@ -258,8 +259,9 @@ class SAT(service.Service):
self.bridge.register("getPresenceStatus", self.memory.getPresenceStatus)
self.bridge.register("sendMessage", self.sendMessage)
self.bridge.register("setParam", self.setParam)
#self.bridge.register("getParam", self.memory.getParam)
self.bridge.register("getParamV", self.memory.getParamV)
self.bridge.register("getParams", self.memory.getParams)
self.bridge.register("getParamsForCategory", self.memory.getParamsForCategory)
self.bridge.register("getParamsCategories", self.memory.getParamsCategories)
self.bridge.register("getHistory", self.memory.getHistory)
self.bridge.register("setPresence", self.setPresence)
@ -376,11 +378,11 @@ class SAT(service.Service):
## Client management ##
def setParam(self, name, value, namespace):
def setParam(self, name, value, category):
"""set wanted paramater and notice observers"""
info ("setting param: %s=%s in namespace %s", name, value, namespace)
self.memory.setParam(name, value, namespace)
self.bridge.paramUpdate(name, value, namespace)
info ("setting param: %s=%s in category %s", name, value, category)
self.memory.setParam(name, value, category)
self.bridge.paramUpdate(name, value, category)
def failed(self,xmlstream):
debug("failed: %s", xmlstream.getErrorMessage())

View file

@ -60,8 +60,8 @@ class DbusObject(dbus.service.Object):
@dbus.service.signal(const_INT_PREFIX+const_COMM_SUFFIX,
signature='sss')
def paramUpdate(self, name, value, namespace):
debug("param update signal: %s=%s in namespace %s", name, value, namespace)
def paramUpdate(self, name, value, category):
debug("param update signal: %s=%s in category %s", name, value, category)
@dbus.service.signal(const_INT_PREFIX+const_COMM_SUFFIX,
signature='s')
@ -126,21 +126,21 @@ class DbusObject(dbus.service.Object):
def setParam(self, name, value, category):
self.cb["setParam"](name, str(value), category)
"""@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='ss', out_signature='(ss)')
def getParam(self, name, namespace="default"):
return self.cb["getParam"](name, namespace)"""
"""@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='s', out_signature='a(sss)')
def getParams(self, namespace):
return self.cb["getParams"](namespace)"""
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='ss', out_signature='s')
def getParamV(self, name, category="default"):
return self.cb["getParamV"](name, category)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='', out_signature='s')
def getParams(self):
return self.cb["getParams"]()
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='s', out_signature='s')
def getParamsForCategory(self, category):
return self.cb["getParamsForCategory"](category)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='', out_signature='as')
def getParamsCategories(self):
@ -236,9 +236,9 @@ class DBusBridge(Bridge):
debug("updating presence for %s",jid)
self.dbus_bridge.presenceUpdate(jid, type, show, status, priority)
def paramUpdate(self, name, value, namespace):
debug("updating param [%s] %s ", namespace, name)
self.dbus_bridge.paramUpdate(name, value, namespace)
def paramUpdate(self, name, value, category):
debug("updating param [%s] %s ", category, name)
self.dbus_bridge.paramUpdate(name, value, category)
def contactDeleted(self, jid):
debug("sending contact deleted signal %s ", jid)

View file

@ -38,9 +38,9 @@ class Param():
default_xml = """
<params>
<category name="Connection">
<param name="JabberID" value="goffi@jabber.goffi.int/TestScript" type="string" />
<param name="JabberID" value="goffi@necton2.int/TestScript" type="string" />
<param name="Password" value="toto" type="password" />
<param name="Server" value="jabber.goffi.int" type="string" />
<param name="Server" value="necton2.int" type="string" />
</category>
<category name="File Transfert">
<param name="IP" value="192.168.0.10" type="string" />
@ -70,14 +70,15 @@ class Param():
return node.getAttribute("value")
def getParams(self):
"""Return the wold params XML"""
"""Return the whole params XML"""
return self.dom.toxml()
"""def getParam(self, name, category):
if self.params.has_key(namespace) and self.params[namespace].has_key(name):
return self.params[namespace][name]
return ["",""]"""
def getParamsForCategory(self, category):
"""Return node's xml for selected category"""
for node in self.dom.documentElement.childNodes:
if node.nodeName == "category" and node.getAttribute("name") == category:
return node.toxml()
return "<category />"
def __getParamNode(self, name, category):
for node in self.dom.documentElement.childNodes:
@ -88,15 +89,6 @@ class Param():
return param
return None
"""def getParams(self, namespace):
if self.params.has_key(namespace):
ret=[]
for name in self.params[namespace]:
ret.append([name] + self.params[namespace][name])
return ret
return [[]]"""
def getParamsCategories(self):
"""return the categories availables"""
categories=[]
@ -108,13 +100,13 @@ class Param():
node = self.__getParamNode(name, category)
if not node:
return #TODO: throw an error
node.setAttribute(name, value)
node.setAttribute("value", value)
"""def createParam (self, name, value, type, namespace):
"""def createParam (self, name, value, type, category):
### TODO: add desciption in params
if not self.params.has_key(namespace):
self.params[namespace]={}
self.params[namespace][name]=[value,type];"""
if not self.params.has_key(category):
self.params[category]={}
self.params[category][name]=[value,type];"""
class Memory:
"""This class manage all persistent informations"""
@ -224,6 +216,9 @@ class Memory:
def getParams(self):
return self.params.getParams()
def getParamsForCategory(self, category):
return self.params.getParamsForCategory(category)
def getParamsCategories(self):
return self.params.getParamsCategories()