Module_state done: global datas management
newnemubot replaces old one
This commit is contained in:
parent
684cecd137
commit
25b2634ea3
12 changed files with 454 additions and 415 deletions
103
module_state.py
Normal file
103
module_state.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# coding=utf-8
|
||||
|
||||
import xml.sax
|
||||
from datetime import datetime
|
||||
from datetime import date
|
||||
import time
|
||||
|
||||
class ModuleState:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.attributes = dict()
|
||||
self.childs = list()
|
||||
self.index = dict()
|
||||
self.index_fieldname = None
|
||||
self.index_tagname = None
|
||||
|
||||
def getName(self):
|
||||
return self.name
|
||||
|
||||
def __getitem__(self, i):
|
||||
return self.getAttribute(i)
|
||||
|
||||
def __contains__(self, i):
|
||||
return i in self.index
|
||||
|
||||
def getAttribute(self, name):
|
||||
if name in self.attributes:
|
||||
return self.attributes[name]
|
||||
else:
|
||||
return None
|
||||
|
||||
def getDate(self, name):
|
||||
if name in self.attributes.keys():
|
||||
if isinstance(self.attributes[name], datetime):
|
||||
return self.attributes[name]
|
||||
else:
|
||||
return date.fromtimestamp(float(self.attributes[name]))
|
||||
else:
|
||||
return None
|
||||
|
||||
def getInt(self, name):
|
||||
if name in self.attributes.keys():
|
||||
return int(self.attributes[name])
|
||||
else:
|
||||
return None
|
||||
|
||||
def setIndex(self, fieldname = "name", tagname = None):
|
||||
self.index_fieldname = fieldname
|
||||
self.index_tagname = tagname
|
||||
for child in self.childs:
|
||||
if (tagname is None or tagname == child.name) and child.hasAttribute(fieldname):
|
||||
self.index[child[fieldname]] = child
|
||||
|
||||
def hasAttribute(self, name):
|
||||
return (name in self.attributes)
|
||||
|
||||
def setAttribute(self, name, value):
|
||||
self.attributes[name] = value
|
||||
|
||||
def getChilds(self):
|
||||
return self.childs
|
||||
|
||||
def getNode(self, tagname):
|
||||
ret = None
|
||||
for child in self.childs:
|
||||
if tagname is None or tagname == child.name:
|
||||
ret = child
|
||||
return ret
|
||||
|
||||
def getNodes(self, tagname):
|
||||
ret = list()
|
||||
for child in self.childs:
|
||||
if tagname is None or tagname == child.name:
|
||||
ret.append(child)
|
||||
return ret
|
||||
|
||||
def addChild(self, child):
|
||||
self.childs.append(child)
|
||||
if self.index_fieldname is not None:
|
||||
self.setIndex(self.index_fieldname, self.index_tagname)
|
||||
|
||||
def save_node(self, gen):
|
||||
attribs = {}
|
||||
for att in self.attributes.keys():
|
||||
if isinstance(self.attributes[att], datetime):
|
||||
attribs[att] = str(time.mktime(self.attributes[att].timetuple()))
|
||||
else:
|
||||
attribs[att] = str(self.attributes[att])
|
||||
attrs = xml.sax.xmlreader.AttributesImpl(attribs)
|
||||
|
||||
gen.startElement(self.name, attrs)
|
||||
|
||||
for child in self.childs:
|
||||
child.save_node(gen)
|
||||
|
||||
gen.endElement(self.name)
|
||||
|
||||
def save(self, filename):
|
||||
with open(filename,"w") as f:
|
||||
gen = xml.sax.saxutils.XMLGenerator(f, "utf-8")
|
||||
gen.startDocument()
|
||||
self.save_node(gen)
|
||||
gen.endDocument()
|
||||
Loading…
Add table
Add a link
Reference in a new issue