refactoring: using xml params (not finished yet)
This commit is contained in:
parent
70d836225c
commit
7bb6bd10c6
3 changed files with 112 additions and 55 deletions
2
sat.tac
2
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)
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
148
tools/memory.py
148
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 = """
|
||||
<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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue