From 7bb6bd10c61b34f9e6e590dac4a75dbd3244815a Mon Sep 17 00:00:00 2001 From: Goffi Date: Fri, 6 Nov 2009 19:48:57 +0100 Subject: [PATCH] refactoring: using xml params (not finished yet) --- sat.tac | 2 +- sat_bridge/DBus.py | 17 ++++-- tools/memory.py | 148 ++++++++++++++++++++++++++++++--------------- 3 files changed, 112 insertions(+), 55 deletions(-) diff --git a/sat.tac b/sat.tac index ede5c2cd..40be3a4a 100644 --- a/sat.tac +++ b/sat.tac @@ -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) diff --git a/sat_bridge/DBus.py b/sat_bridge/DBus.py index adf18847..db4b90e8 100755 --- a/sat_bridge/DBus.py +++ b/sat_bridge/DBus.py @@ -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') diff --git a/tools/memory.py b/tools/memory.py index 7c9379fc..4708f2a4 100644 --- a/tools/memory.py +++ b/tools/memory.py @@ -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 = """ + + + + + + + + + + + + + + + """ + + 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)