refactoring: using xml params (not finished yet)

This commit is contained in:
Goffi 2009-11-06 19:48:57 +01:00
commit 7bb6bd10c6
3 changed files with 112 additions and 55 deletions

View file

@ -258,7 +258,7 @@ 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("getParam", self.memory.getParam)
self.bridge.register("getParams", self.memory.getParams)
self.bridge.register("getParamsCategories", self.memory.getParamsCategories)
self.bridge.register("getHistory", self.memory.getHistory)

View file

@ -123,18 +123,23 @@ class DbusObject(dbus.service.Object):
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
in_signature='sss', out_signature='')
def setParam(self, name, value, namespace="default"):
self.cb["setParam"](name, str(value), namespace)
def setParam(self, name, value, category):
self.cb["setParam"](name, str(value), category)
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
"""@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)
return self.cb["getParam"](name, namespace)"""
@dbus.service.method(const_INT_PREFIX+const_COMM_SUFFIX,
"""@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)
return self.cb["getParams"](namespace)"""
@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='', out_signature='as')

View file

@ -24,11 +24,98 @@ from __future__ import with_statement
import os.path
import time
import pickle
from xml.dom import minidom
from logging import debug, info, error
import pdb
const_SAVEFILE_PARAM=os.path.expanduser("~/.sat_param.save")
const_SAVEFILE_HISTORY=os.path.expanduser("~/.sat_history.save")
class Param():
"""This class manage parameter with xml"""
#TODO: mettre Watched dans un plugin
default_xml = """
<params>
<category name="Connection">
<param name="JabberID" value="goffi@jabber.goffi.int/TestScript" type="string" />
<param name="Password" value="toto" type="password" />
<param name="Server" value="jabber.goffi.int" type="string" />
</category>
<category name="File Transfert">
<param name="IP" value="192.168.0.10" type="string" />
<param name="Port" value="28915" type="string" />
</category>
<category name="Misc">
<param name="Watched" value="test@Jabber.goffi.int" type="string" />
</category>
</params>
"""
def load_default_params(self):
self.dom = minidom.parseString(Param.default_xml)
def __init__(self):
debug("Parameters init")
self.load_default_params()
def getParamV(self, name, category):
"""Helper method to get the value in the good type
getParamV stands for GetParamValue"""
node = self.__getParamNode(name, category)
if not node:
error("Requested param [%s] in category [%s] doesn't exist !" , name, category)
return none
return node.getAttribute("value")
def getParams(self):
"""Return the wold 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 __getParamNode(self, name, category):
for node in self.dom.documentElement.childNodes:
if node.nodeName == "category" and node.getAttribute("name") == category:
params = node.getElementsByTagName("param")
for param in params:
if param.getAttribute("name") == name:
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=[]
for cat in self.dom.getElementsByTagName("category"):
categories.append(cat.getAttribute("name"))
return categories
def setParam(self, name, value, category):
node = self.__getParamNode(name, category)
if not node:
return #TODO: throw an error
node.setAttribute(name, value)
"""def createParam (self, name, value, type, namespace):
### TODO: add desciption in params
if not self.params.has_key(namespace):
self.params[namespace]={}
self.params[namespace][name]=[value,type];"""
class Memory:
"""This class manage all persistent informations"""
@ -36,22 +123,12 @@ class Memory:
info ("Memory manager init")
self.contact={}
self.presenceStatus={}
self.params={}
self.params=Param()
self.history={}
self.disco={} #XXX: maybe best in a separate class
self.features={}
self.load()
def load_default_params(self):
"""Load default value, in case of no save file or error."""
self.createParam("JabberID", "goffi@jabber.goffi.int/TestScript", "string", "Connection")
self.createParam("Password", "toto", "password", "Connection")
self.createParam("Server", "jabber.goffi.int", "string", "Connection")
self.createParam("IP", "192.168.0.2", "string", "File Transfert")
self.createParam("Port", "28915", "string", "File Transfert")
self.createParam("Watched", "test@jabber.goffi.int", "string", "Misc") #TODO: a mettre dans un plugin
def load(self):
"""Load parameters and all memory things from file/db"""
@ -63,9 +140,9 @@ class Memory:
debug("params loaded")
except:
error ("Can't load params !")
self.load_default_params()
self.params.load_default_params()
else:
self.load_default_params()
self.params.load_default_params()
#history
if os.path.exists(const_SAVEFILE_HISTORY):
@ -141,39 +218,14 @@ class Memory:
debug ("Memory getPresenceStatus (%s)", status)
return status
def getParamV(self, name, namespace):
"""Helper method to get the value in the good type
getParamV stands for GetParamValue"""
if not self.params.has_key(namespace) or not self.params[namespace].has_key(name):
error("Requested param %s in namespace %s doesn't exist !" , name, namespace)
return None
return self.params[namespace][name][0]
def getParam(self, name, namespace):
if self.params.has_key(namespace) and self.params[namespace].has_key(name):
return self.params[namespace][name]
return ["",""]
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 getParamV(self, name, category):
return self.params.getParamV(name, category)
def getParams(self):
return self.params.getParams()
def getParamsCategories(self):
"""return the namespaces availables"""
return self.params.keys()
def setParam(self, name, value, namespace):
if not self.params.has_key(namespace) or not self.params[namespace].has_key(name):
return #TODO: throw an error
self.params[namespace][name][0]=value;
def createParam (self, name, value, type, namespace):
### TODO: add desciption in params
if not self.params.has_key(namespace):
self.params[namespace]={}
self.params[namespace][name]=[value,type];
return self.params.getParamsCategories()
def setParam(self, name, value, category):
return self.params.setParam(name, value, category)