summaryrefslogtreecommitdiffstats
path: root/fevendata.py
diff options
context:
space:
mode:
Diffstat (limited to 'fevendata.py')
-rw-r--r--fevendata.py1166
1 files changed, 583 insertions, 583 deletions
diff --git a/fevendata.py b/fevendata.py
index 6cb7a05..c9869df 100644
--- a/fevendata.py
+++ b/fevendata.py
@@ -28,18 +28,18 @@
evenDoor or evenBoard.
THIS SCENARIO OF USE IS COVERED BY THE FPL Foundaion Public Licence.
COPYRIGHT 1992-2004 Fabian Padilla.
-
+
*@author Fabian Padilla
*/"""
__all__ = ["FevenData"]
try:
- import libxml2
+ import libxml2
except:
- print "libxml2 not available ... aborting !!"
- import sys
- sys.exit(1)
+ print "libxml2 not available ... aborting !!"
+ import sys
+ sys.exit(1)
from time import time
@@ -52,591 +52,591 @@ import evenjastrings as ES
import returncodes as RC
# TzurTcH - speed up ;))
-PREF = ES.XML_DESTINATION + ES.TREE_SEPARATOR_STR
+PREF = ES.XML_DESTINATION + ES.TREE_SEPARATOR_STR
PREF_DESTCOUNT = PREF + ES.XML_DESTCOUNT
PREF_CURRENTDEST = PREF + ES.XML_CURRENTDEST
PREF_DESTNUMBER = PREF + ES.XML_DESTNUMBER
-
+
class FevenData(Fconfig):
- def __init__(self):
- Fconfig.__init__(self) # force constructor
- self.source = Fposition() # Where the evenData as been created
- self.startToUse = 0 # Date and time when this evenData as been sent from the evenDoor
- self.destination = Flist() # Where the evenData want to go
- self.currentDestination = 0 # this is it
- self.activePort = None # The Active actual port where the data will be sent
- self.linkFieldsNames = Flist() # Name of the fields that link two evenData
- self.datas = None # Pointer of the start of datas
- self.splitBuffer = None # Used for string splitting actions
- self.xmlBuffer = None # Pointersof the xmlBuffer when methods
- # setDatasFromString and getDatasFromString are called
- self.evenDataB = None # When a merge is done in the evenBoards it contains the other evenData
- self.initDatas()
-
- def __str__(self):
- """you want a trace of all processed messages : print data in fstarter.execute"""
- level = 0
- buff = self.getDatasToString()
- ret = ""
- for I in range(len(buff)):
- ret += buff[I]
- if buff[I] == '>':
- if buff[I-1] == '?': # start
- pass
- elif buff[-1] == '/' or buff[I:I+3] == '></': # end of an empty attribute
- ret += '\n'+level*'\t'
- elif buff[I+1] != '<': # attribute
- ret += '\n'+(level+1)*'\t'
- else: # new level
- level += 1
- ret += '\n'+level*'\t'
- if buff[I] =='<':
- if buff[I-1] == '\n': # start
- pass
- if buff[I-1] != '>' and buff[I-1] != '\n': # end of an attribute
- ret = ret[:-1]
- ret += '\n'+level*'\t'+'<'
- if buff[I+1] == '/': # end of a level
- level -=1
- return "\t"+Fconfig.__str__(self)+ret
-
- def __del__(self):
- """/** I beleive this is for no use. */"""
- self.xmlBuffer = None # should be ok like this
- self.reset()
- self.endXml()
-
- def initDatas(self):
- """/** Init the Datas Structure. */"""
- self.startNewXml()
- self.addChildren(ES.XML_DATAS,None)
- self.gotoChildren()
- self.Find(ES.XML_DATAS,False)
- self.datas = self.current
- self.setString(ES.TXT_NOVALUES)
-
- def getSplitted(self,separator,string = ES.TXT_NULL):
- """/** Split string using separator, returns first part, keeps the rest in splitBuffer. */"""
- if string:
- self.splitBuffer = string.split(separator)
- if self.splitBuffer:
- if len(self.splitBuffer) >=2:
- ret, self.splitBuffer = self.splitBuffer[0], self.splitBuffer[1:]
- else:
- ret, self.splitBuffer = self.splitBuffer[0], None
- return ret
- return None
-
- def gotoTagName(self,name,create = True,onlyDatas = True):
- """/** Access the right TAG name in the Tree, or create it */"""
- str = self.getSplitted(ES.TREE_SEPARATOR, name)
- if onlyDatas:
- self.current = self.datas
- else:
- self.current = self.root
- while str:
- ret = self.gotoChildren()
- if ret == RC.RET_NOTEXIST and create: # no children, but can create
- self.addChildren(str,None)
- self.gotoChildren()
-
- elif ret == RC.RET_NOTEXIST and not create: # no children and can't create, sorry
- return RC.RET_NOTFOUND
-
- ret = self.Find(str,False) # search for str no deep search !!
- if ret == RC.RET_NOTFOUND and create: # not found, but can create
- self.gotoParent()
- self.addChildren(str,None)
- self.gotoChildren()
- self.Find(str,False) # go to this new node
-
- elif ret == RC.RET_NOTFOUND and not create: # not found and can't create, sorry
- return RC.RET_NOTFOUND
- str = self.getSplitted(ES.TREE_SEPARATOR) # next...
- return RC.RET_OK
-
- def setMetaEvenDatasToXml(self):
- """/** put META evenData => Source, Destination, startTime, etc... */"""
-
- def SETMETADATA(A,B):
- self.gotoTagName(A,True,False)
- self.setContent(str(B))
-
- SETMETADATA(ES.XML_SOURCE,self.source.getString()) # set source
- SETMETADATA(ES.XML_STARTTIME,self.startToUse) # set startToUse
- self.gotoTagName(ES.XML_DESTINATION,True,False)
- SETMETADATA(PREF_DESTCOUNT,self.destination.getCount()) # nbDest
- SETMETADATA(PREF_CURRENTDEST,self.currentDestination) # set currentDestination
-
- for I in range(self.destination.getCount()): # set destinations
- SETMETADATA(PREF_DESTNUMBER%I,self.destination.get(I).getString())
-
- S = ""
- for I in range(self.linkFieldsNames.getCount()): # set linkFieldsNames
- S += self.linkFieldsNames.get(I).getString() + ES.FIELD_SEPARATOR_STR
- if S:
- S = S[:-1]
- SETMETADATA(ES.XML_LINKFIELDS,S)
-
- def getMetaEvenDatasFromXml(self):
- """/** get META evenData => Source, Destination, startTime, etc... */"""
- nbDest = 0
-
- def GETMETADATA(A,B=None):
- ret = self.gotoTagName(A,False,False)
- if ret == RC.RET_OK:
- if B:
- B(self.getContent())
- else:
- return self.getContent()
- else: # TzurTcH - I hope never beeing there
- from sys import exit
- from sys import stderr
- stderr.write("ERRRROOORRRR\n")
- exit(1)
-
- GETMETADATA(ES.XML_SOURCE,self.setSource) # get source
- self.startToUse = float(GETMETADATA(ES.XML_STARTTIME)) # get startToUse
- nbDest = int(GETMETADATA(PREF_DESTCOUNT)) # get nbDest
- self.currentDestination = int(GETMETADATA(PREF_CURRENTDEST)) # get currentDestination
-
- for I in range(nbDest):
- GETMETADATA(PREF_DESTNUMBER%I,self.addDestination) # get destinations
- GETMETADATA(ES.XML_LINKFIELDS,self.setLinkFieldsNames) # get linkFieldsNames
-
- def setDatasFromXXX(self,newDoc):
- """/** end the sequence of importing datas to the tree */"""
- ret = RC.RET_OK
- if newDoc:
- self.endXml()
- self.doc = newDoc
- ret = self.startXml(self.doc.children)
- self.resetCurrent()
- self.gotoChildren()
- self.Find(ES.XML_DATAS,False)
- self.datas = self.current
- self.getMetaEvenDatasFromXml()
- self.updateHashValue()
- return ret
- return RC.RET_CONNATACCESS
-
- def updateHashValue(self,fieldName = None):
- """/** Update the hashValue. Take Data in the tree and update HashValue of the evenData
- fieldname : name of the field (in the data tree updated) */"""
- update = False
- count = self.linkFieldsNames.getCount()
- if fieldName:
- for I in range(count):
- if self.linkFieldsNames.get(I).getString()==fieldName:
- update = True
- break
- else:
- update = True
- if update:
- bkpCurrent = self.current
- nbExists = 0
- str =""
- for I in range(count):
- value = self.getData(self.linkFieldsNames.get(I).getString())
- if value != RC.RET_NOTFOUND:
- nbExists += 1
- str += value
- if nbExists == count:
- self.setString(str)
- else:
- self.setString(ES.TXT_NULL)
- self.current = bkpCurrent
-
- def setSource(self,source):
- """/** Set the source position => from where the evenData comes. */"""
- return self.source.setPosition(source)
-
- def getSource(self):
- """/** Get the source position => from where the evenData comes. */"""
- return self.source
-
- def addDestination(self,destinationA):
- """/** Set the destination position => to where the evenData goes. */"""
- ret = RC.RET_OK
- str = self.getSplitted(ES.DESTINATION_SEPARATOR, destinationA)
- while str:
- pos = Fposition()
- pos.setPosition(str)
- ret = self.destination.add(pos)
- str = self.getSplitted(ES.TREE_SEPARATOR)
- return ret
-
- def getCurrentDestination(self):
- """/** Get the destination position => to where the evenData goes. */"""
- return self.destination.get(self.currentDestination)
-
- def selectNextDestination(self):
- """/** Select next destination, ex.: after a evenBoard this can be a evenPrg */"""
- if self.currentDestination+1 < self.destination.getCount():
- self.currentDestination += 1
- self.activePort = 0
- return RC.RET_OK
- else:
- return RC.RET_NOTEXIST
-
- def resetDestination(self):
- """/** Remove all the destinations from the list */"""
- for I in range(self.destination.getCount()):
- self.destination.remove(0)
- self.currentDestination = 0
-
- def setLinkFieldsNames(self,linkFieldsNamesString):
- """/** Name of the fields that represent the link between two evenDatas. */"""
- str = self.getSplitted(ES.FIELD_SEPARATOR, linkFieldsNamesString)
- if self.linkFieldsNames.getCount():
- self.resetLinkFieldsNames()
- while str:
- s = FstringHash()
- s.setString(str)
- self.linkFieldsNames.add(s)
- str = self.getSplitted(ES.TREE_SEPARATOR)
- self.updateHashValue()
- if self.evenDataB:
- evenDataB = None
- return RC.RET_OK
-
- def resetLinkFieldsNames(self):
- """/** Remove all the destinations from the list */"""
- for I in range(self.linkFieldsNames.getCount()):
- self.linkFieldsNames.remove(0)
-
-
- def reset(self):
- """/** Reset the datas ( erase all informations) */"""
- self.source.setString(ES.TXT_NULL)
- self.startToUse = time()
- self.resetDestination()
- self.resetLinkFieldsNames()
- self.endXml()
- self.initDatas()
-
- def getStartToUse(self):
- """/** When the evenData as entered for the first time into a room. */"""
- return self.startToUse
-
- def setEvenDataB(self,evenData):
- """/** Set the other evenData merged with this */"""
- self.evenDataB = evenData
-
- def getEvenDataB(self):
- """/** Get the other evenData merged with this ( and remove the pointer) */"""
- tmp = self.evenDataB
- self.evenDataB = None
- return tmp
-
- def setData(self,nodeName,value):
- """/** Set a "Value" in the datastree. */"""
- ret = self.gotoTagName(nodeName)
- if ret == RC.RET_OK:
- ret = self.setContent(value)
- self.updateHashValue(nodeName)
- return ret
-
- def getData(self,nodeName):
- """/** Get the "Value" of the nodeName in the datastree. */"""
- ret = self.gotoTagName(nodeName, False)
- if ret == RC.RET_OK:
- return self.getContent()
- return ret
-
- def setDataInt(self,nodeName,value):
- """/** Set a int "Value" in the datastree. */"""
- ret = self.gotoTagName(nodeName)
- if ret == RC.RET_OK:
- ret = self.setContent(str(value))
- self.updateHashValue(nodeName)
- return ret
-
- def getDataInt(self,nodeName):
- """/** Get the int "Value" of the nodeName in the datastree. */"""
- ret = self.gotoTagName(nodeName, False)
- if ret == RC.RET_OK:
- return int(self.getContent())
- return ret
-
- def setDatasFromString(self,string):
- """/** Set ALL the datas of the datastree. All this new datas replace the old datas. */"""
- return self.setDatasFromXXX(libxml2.parseMemory(string, len(string)))
-
- def setDatasFromFile(self,fileName):
- """/** Set ALL the datas of the datastree. From a File or a stream. */"""
- return self.setDatasFromXXX(libxml2.parseFile(fileName))
-
- def getDatasToString(self,):
- """/** Get ALL the datas to a string (ex.: XML format). */"""
- if self.xmlBuffer:
- self.xmlFree(self.xmlBuffer)
- self.setMetaEvenDatasToXml()
- # no xmlDocDumpMemory !! # TzurTcH !!!!! Achtung !!!!!
- f=file(".__temp__XML","w")
- self.doc.dump(f)
- f.close()
- f=file(".__temp__XML","r")
- S = f.read()
- f.close()
- return S
-
- def getDatasToFile(self,fileName):
- """/** Get ALL the datas To a File or a stream. */"""
- self.setMetaEvenDatasToXml()
- if self.doc.saveFile(fileName):
- return RC.RET_OK
- return RC.RET_CANNOTSAVE
-
- def copyFrom(self,data):
- """/** Copy all information from another evenData. */"""
- return self.setDatasFromString(data.getDatasToString())
-
- def setActivePort(self,port):
- """/** Set the active port */"""
- self.activePort = port
-
- def getActivePort(self):
- """/** Get the active port */"""
- return self.activePort
-
- def definePortAction(self,action,portName = None):
- """/** Do an action */"""
- str=""
- if portName:
- str += portName
- str += ":" + action
- self.addDestination(str)
- if self.destination.getCount():
- self.currentDestination = self.destination.getCount()-1
- else:
- self.currentDestination = 0
- return RC.RET_OK
-
-
- def DUMP(self):
- return self.doc.saveFile("dump.xml")
+ def __init__(self):
+ Fconfig.__init__(self) # force constructor
+ self.source = Fposition() # Where the evenData as been created
+ self.startToUse = 0 # Date and time when this evenData as been sent from the evenDoor
+ self.destination = Flist() # Where the evenData want to go
+ self.currentDestination = 0 # this is it
+ self.activePort = None # The Active actual port where the data will be sent
+ self.linkFieldsNames = Flist() # Name of the fields that link two evenData
+ self.datas = None # Pointer of the start of datas
+ self.splitBuffer = None # Used for string splitting actions
+ self.xmlBuffer = None # Pointersof the xmlBuffer when methods
+ # setDatasFromString and getDatasFromString are called
+ self.evenDataB = None # When a merge is done in the evenBoards it contains the other evenData
+ self.initDatas()
+
+ def __str__(self):
+ """you want a trace of all processed messages : print data in fstarter.execute"""
+ level = 0
+ buff = self.getDatasToString()
+ ret = ""
+ for I in range(len(buff)):
+ ret += buff[I]
+ if buff[I] == '>':
+ if buff[I-1] == '?': # start
+ pass
+ elif buff[-1] == '/' or buff[I:I+3] == '></': # end of an empty attribute
+ ret += '\n'+level*'\t'
+ elif buff[I+1] != '<': # attribute
+ ret += '\n'+(level+1)*'\t'
+ else: # new level
+ level += 1
+ ret += '\n'+level*'\t'
+ if buff[I] =='<':
+ if buff[I-1] == '\n': # start
+ pass
+ if buff[I-1] != '>' and buff[I-1] != '\n': # end of an attribute
+ ret = ret[:-1]
+ ret += '\n'+level*'\t'+'<'
+ if buff[I+1] == '/': # end of a level
+ level -=1
+ return "\t"+Fconfig.__str__(self)+ret
+
+ def __del__(self):
+ """/** I beleive this is for no use. */"""
+ self.xmlBuffer = None # should be ok like this
+ self.reset()
+ self.endXml()
+
+ def initDatas(self):
+ """/** Init the Datas Structure. */"""
+ self.startNewXml()
+ self.addChildren(ES.XML_DATAS,None)
+ self.gotoChildren()
+ self.Find(ES.XML_DATAS,False)
+ self.datas = self.current
+ self.setString(ES.TXT_NOVALUES)
+
+ def getSplitted(self,separator,string = ES.TXT_NULL):
+ """/** Split string using separator, returns first part, keeps the rest in splitBuffer. */"""
+ if string:
+ self.splitBuffer = string.split(separator)
+ if self.splitBuffer:
+ if len(self.splitBuffer) >=2:
+ ret, self.splitBuffer = self.splitBuffer[0], self.splitBuffer[1:]
+ else:
+ ret, self.splitBuffer = self.splitBuffer[0], None
+ return ret
+ return None
+
+ def gotoTagName(self,name,create = True,onlyDatas = True):
+ """/** Access the right TAG name in the Tree, or create it */"""
+ str = self.getSplitted(ES.TREE_SEPARATOR, name)
+ if onlyDatas:
+ self.current = self.datas
+ else:
+ self.current = self.root
+ while str:
+ ret = self.gotoChildren()
+ if ret == RC.RET_NOTEXIST and create: # no children, but can create
+ self.addChildren(str,None)
+ self.gotoChildren()
+
+ elif ret == RC.RET_NOTEXIST and not create: # no children and can't create, sorry
+ return RC.RET_NOTFOUND
+
+ ret = self.Find(str,False) # search for str no deep search !!
+ if ret == RC.RET_NOTFOUND and create: # not found, but can create
+ self.gotoParent()
+ self.addChildren(str,None)
+ self.gotoChildren()
+ self.Find(str,False) # go to this new node
+
+ elif ret == RC.RET_NOTFOUND and not create: # not found and can't create, sorry
+ return RC.RET_NOTFOUND
+ str = self.getSplitted(ES.TREE_SEPARATOR) # next...
+ return RC.RET_OK
+
+ def setMetaEvenDatasToXml(self):
+ """/** put META evenData => Source, Destination, startTime, etc... */"""
+
+ def SETMETADATA(A,B):
+ self.gotoTagName(A,True,False)
+ self.setContent(str(B))
+
+ SETMETADATA(ES.XML_SOURCE,self.source.getString()) # set source
+ SETMETADATA(ES.XML_STARTTIME,self.startToUse) # set startToUse
+ self.gotoTagName(ES.XML_DESTINATION,True,False)
+ SETMETADATA(PREF_DESTCOUNT,self.destination.getCount()) # nbDest
+ SETMETADATA(PREF_CURRENTDEST,self.currentDestination) # set currentDestination
+
+ for I in range(self.destination.getCount()): # set destinations
+ SETMETADATA(PREF_DESTNUMBER%I,self.destination.get(I).getString())
+
+ S = ""
+ for I in range(self.linkFieldsNames.getCount()): # set linkFieldsNames
+ S += self.linkFieldsNames.get(I).getString() + ES.FIELD_SEPARATOR_STR
+ if S:
+ S = S[:-1]
+ SETMETADATA(ES.XML_LINKFIELDS,S)
+
+ def getMetaEvenDatasFromXml(self):
+ """/** get META evenData => Source, Destination, startTime, etc... */"""
+ nbDest = 0
+
+ def GETMETADATA(A,B=None):
+ ret = self.gotoTagName(A,False,False)
+ if ret == RC.RET_OK:
+ if B:
+ B(self.getContent())
+ else:
+ return self.getContent()
+ else: # TzurTcH - I hope never beeing there
+ from sys import exit
+ from sys import stderr
+ stderr.write("ERRRROOORRRR\n")
+ exit(1)
+
+ GETMETADATA(ES.XML_SOURCE,self.setSource) # get source
+ self.startToUse = float(GETMETADATA(ES.XML_STARTTIME)) # get startToUse
+ nbDest = int(GETMETADATA(PREF_DESTCOUNT)) # get nbDest
+ self.currentDestination = int(GETMETADATA(PREF_CURRENTDEST)) # get currentDestination
+
+ for I in range(nbDest):
+ GETMETADATA(PREF_DESTNUMBER%I,self.addDestination) # get destinations
+ GETMETADATA(ES.XML_LINKFIELDS,self.setLinkFieldsNames) # get linkFieldsNames
+
+ def setDatasFromXXX(self,newDoc):
+ """/** end the sequence of importing datas to the tree */"""
+ ret = RC.RET_OK
+ if newDoc:
+ self.endXml()
+ self.doc = newDoc
+ ret = self.startXml(self.doc.children)
+ self.resetCurrent()
+ self.gotoChildren()
+ self.Find(ES.XML_DATAS,False)
+ self.datas = self.current
+ self.getMetaEvenDatasFromXml()
+ self.updateHashValue()
+ return ret
+ return RC.RET_CONNATACCESS
+
+ def updateHashValue(self,fieldName = None):
+ """/** Update the hashValue. Take Data in the tree and update HashValue of the evenData
+ fieldname : name of the field (in the data tree updated) */"""
+ update = False
+ count = self.linkFieldsNames.getCount()
+ if fieldName:
+ for I in range(count):
+ if self.linkFieldsNames.get(I).getString()==fieldName:
+ update = True
+ break
+ else:
+ update = True
+ if update:
+ bkpCurrent = self.current
+ nbExists = 0
+ str =""
+ for I in range(count):
+ value = self.getData(self.linkFieldsNames.get(I).getString())
+ if value != RC.RET_NOTFOUND:
+ nbExists += 1
+ str += value
+ if nbExists == count:
+ self.setString(str)
+ else:
+ self.setString(ES.TXT_NULL)
+ self.current = bkpCurrent
+
+ def setSource(self,source):
+ """/** Set the source position => from where the evenData comes. */"""
+ return self.source.setPosition(source)
+
+ def getSource(self):
+ """/** Get the source position => from where the evenData comes. */"""
+ return self.source
+
+ def addDestination(self,destinationA):
+ """/** Set the destination position => to where the evenData goes. */"""
+ ret = RC.RET_OK
+ str = self.getSplitted(ES.DESTINATION_SEPARATOR, destinationA)
+ while str:
+ pos = Fposition()
+ pos.setPosition(str)
+ ret = self.destination.add(pos)
+ str = self.getSplitted(ES.TREE_SEPARATOR)
+ return ret
+
+ def getCurrentDestination(self):
+ """/** Get the destination position => to where the evenData goes. */"""
+ return self.destination.get(self.currentDestination)
+
+ def selectNextDestination(self):
+ """/** Select next destination, ex.: after a evenBoard this can be a evenPrg */"""
+ if self.currentDestination+1 < self.destination.getCount():
+ self.currentDestination += 1
+ self.activePort = 0
+ return RC.RET_OK
+ else:
+ return RC.RET_NOTEXIST
+
+ def resetDestination(self):
+ """/** Remove all the destinations from the list */"""
+ for I in range(self.destination.getCount()):
+ self.destination.remove(0)
+ self.currentDestination = 0
+
+ def setLinkFieldsNames(self,linkFieldsNamesString):
+ """/** Name of the fields that represent the link between two evenDatas. */"""
+ str = self.getSplitted(ES.FIELD_SEPARATOR, linkFieldsNamesString)
+ if self.linkFieldsNames.getCount():
+ self.resetLinkFieldsNames()
+ while str:
+ s = FstringHash()
+ s.setString(str)
+ self.linkFieldsNames.add(s)
+ str = self.getSplitted(ES.TREE_SEPARATOR)
+ self.updateHashValue()
+ if self.evenDataB:
+ evenDataB = None
+ return RC.RET_OK
+
+ def resetLinkFieldsNames(self):
+ """/** Remove all the destinations from the list */"""
+ for I in range(self.linkFieldsNames.getCount()):
+ self.linkFieldsNames.remove(0)
+
+
+ def reset(self):
+ """/** Reset the datas ( erase all informations) */"""
+ self.source.setString(ES.TXT_NULL)
+ self.startToUse = time()
+ self.resetDestination()
+ self.resetLinkFieldsNames()
+ self.endXml()
+ self.initDatas()
+
+ def getStartToUse(self):
+ """/** When the evenData as entered for the first time into a room. */"""
+ return self.startToUse
+
+ def setEvenDataB(self,evenData):
+ """/** Set the other evenData merged with this */"""
+ self.evenDataB = evenData
+
+ def getEvenDataB(self):
+ """/** Get the other evenData merged with this ( and remove the pointer) */"""
+ tmp = self.evenDataB
+ self.evenDataB = None
+ return tmp
+
+ def setData(self,nodeName,value):
+ """/** Set a "Value" in the datastree. */"""
+ ret = self.gotoTagName(nodeName)
+ if ret == RC.RET_OK:
+ ret = self.setContent(value)
+ self.updateHashValue(nodeName)
+ return ret
+
+ def getData(self,nodeName):
+ """/** Get the "Value" of the nodeName in the datastree. */"""
+ ret = self.gotoTagName(nodeName, False)
+ if ret == RC.RET_OK:
+ return self.getContent()
+ return ret
+
+ def setDataInt(self,nodeName,value):
+ """/** Set a int "Value" in the datastree. */"""
+ ret = self.gotoTagName(nodeName)
+ if ret == RC.RET_OK:
+ ret = self.setContent(str(value))
+ self.updateHashValue(nodeName)
+ return ret
+
+ def getDataInt(self,nodeName):
+ """/** Get the int "Value" of the nodeName in the datastree. */"""
+ ret = self.gotoTagName(nodeName, False)
+ if ret == RC.RET_OK:
+ return int(self.getContent())
+ return ret
+
+ def setDatasFromString(self,string):
+ """/** Set ALL the datas of the datastree. All this new datas replace the old datas. */"""
+ return self.setDatasFromXXX(libxml2.parseMemory(string, len(string)))
+
+ def setDatasFromFile(self,fileName):
+ """/** Set ALL the datas of the datastree. From a File or a stream. */"""
+ return self.setDatasFromXXX(libxml2.parseFile(fileName))
+
+ def getDatasToString(self,):
+ """/** Get ALL the datas to a string (ex.: XML format). */"""
+ if self.xmlBuffer:
+ self.xmlFree(self.xmlBuffer)
+ self.setMetaEvenDatasToXml()
+ # no xmlDocDumpMemory !! # TzurTcH !!!!! Achtung !!!!!
+ f=file(".__temp__XML","w")
+ self.doc.dump(f)
+ f.close()
+ f=file(".__temp__XML","r")
+ S = f.read()
+ f.close()
+ return S
+
+ def getDatasToFile(self,fileName):
+ """/** Get ALL the datas To a File or a stream. */"""
+ self.setMetaEvenDatasToXml()
+ if self.doc.saveFile(fileName):
+ return RC.RET_OK
+ return RC.RET_CANNOTSAVE
+
+ def copyFrom(self,data):
+ """/** Copy all information from another evenData. */"""
+ return self.setDatasFromString(data.getDatasToString())
+
+ def setActivePort(self,port):
+ """/** Set the active port */"""
+ self.activePort = port
+
+ def getActivePort(self):
+ """/** Get the active port */"""
+ return self.activePort
+
+ def definePortAction(self,action,portName = None):
+ """/** Do an action */"""
+ str=""
+ if portName:
+ str += portName
+ str += ":" + action
+ self.addDestination(str)
+ if self.destination.getCount():
+ self.currentDestination = self.destination.getCount()-1
+ else:
+ self.currentDestination = 0
+ return RC.RET_OK
+
+
+ def DUMP(self):
+ return self.doc.saveFile("dump.xml")
if __name__ == '__main__':
- import unittest
-
- def getLinkFieldsNames(self):
- return self.linkFieldsNames
-
- FILE = "testezlog_save.xml"
-
- class FevendataTestCase(unittest.TestCase):
-
-
- def test1Source(self):
- data1 = FevenData()
- data1.setSource( "MySQL")
- self.assertEquals("MySQL",data1.getSource().getString())
-
- def test2Destination(self):
- data1 = FevenData()
- data1.addDestination( "gateUI")
- self.assertEquals(data1.getCurrentDestination().getPort().getString(),"gateUI")
- self.assertEquals(data1.selectNextDestination(),RC.RET_NOTEXIST)
-
- data1.resetDestination()
-
- data1.addDestination( "boardUI1")
- data1.addDestination( "prgUI1")
- data1.addDestination( "boardUI2")
- data1.addDestination( "prgUI2")
-
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI1")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI1")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI2")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI2")
- self.assertEquals( data1.selectNextDestination(),RC.RET_NOTEXIST)
-
- data1.resetDestination()
-
- data1.addDestination( "boardUI1;prgUI1;boardUI2;prgUI2");
-
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI1")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI1")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI2")
- self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
- self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI2")
- self.assertEquals( data1.selectNextDestination(),RC.RET_NOTEXIST)
-
- def test3LnkFieldsname(self):
- data2 = FevenData()
- data2.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
- LINK2=data2.__dict__['linkFieldsNames']
-
- self.assertEquals( "Client/Address/Name",LINK2.get(0).getString())
- self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
-
- #// Check a change of the linkFieldsNames directly without creating a new evenData
- data2.setLinkFieldsNames( "Ref1/Ref2/Ref3,Val1/Val2,Data1")
-
- self.assertEquals( "Ref1/Ref2/Ref3",LINK2.get( 0).getString())
- self.assertEquals( "Val1/Val2",LINK2.get(1).getString())
- self.assertEquals( "Data1", LINK2.get(2).getString())
-
- def test4Timer(self):
- data1 = FevenData()
- T = time()
- data1.reset()
- T1 = data1.getStartToUse()
- self.assertEquals( abs(T - T1) < 2,True)
-
- def test5SetAndGetDatas(self):
- data1 = FevenData()
- data1.setData( "Name", "Dupont")
- self.assertEquals( data1.getData( "Name"),"Dupont")
- data1.setData( "Account/Number", "012345678901234567")
- data1.setData( "Account/Name", "BANK Dupond")
- data1.setData( "Account/Devises/Rate/CHF", "1,234")
- data1.setData( "Account/Devises/Rate/DM", "1,2")
- self.assertEquals( data1.getData( "Account/Number"),"012345678901234567")
- self.assertEquals( data1.getData( "Account/Name"),"BANK Dupond")
- self.assertEquals( data1.getData( "Account/Devises/Rate/CHF"),"1,234")
- self.assertEquals( data1.getData( "Account/Devises/Rate/DM"),"1,2")
-
- def test6SetAndGetDatasInt(self):
- data1 = FevenData()
- data1.setDataInt( "Name", 10)
- self.assertEquals( data1.getDataInt( "Name"),10)
- data1.setDataInt( "Account/Number", 123)
- data1.setDataInt( "Account/Name", 200)
- data1.setDataInt( "Account/Devises/Rate/CHF", -176)
- data1.setDataInt( "Account/Devises/Rate/DM", 182)
- self.assertEquals( data1.getDataInt( "Account/Number"),123)
- self.assertEquals( data1.getDataInt( "Account/Name") ,200)
- self.assertEquals( data1.getDataInt( "Account/Devises/Rate/CHF"), -176)
- self.assertEquals( data1.getDataInt( "Account/Devises/Rate/DM"), 182)
-
- def test7SaveDatasFile(self):
- data1 = FevenData()
- data1 = FevenData()
- data1.setSource( "MySQL")
-
- data1.addDestination( "boardUI1")
- data1.addDestination( "prgUI1")
- data1.addDestination( "boardUI2")
- data1.addDestination( "prgUI2")
- data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
-
- data1.setData( "Account/Number", "123")
- data1.setData( "Account/Name", "200")
- data1.setDataInt( "Account/Devises/Rate/CHF", 176)
- data1.setDataInt( "Account/Devises/Rate/DM", 182)
-
- data1.getDatasToFile(FILE)
-
- S = "<?xml version=\"1.0\"?>\n<XML><evendata_datas><Account><Number>123</Number><Name>200</Name><Devises><Rate><CHF>176</CHF><DM>182</DM></Rate></Devises></Account></evendata_datas><evendata_source>MySQL</evendata_source><evendata_starttime>0</evendata_starttime><evendata_destination><evendata_destcount>4</evendata_destcount><evendata_currentdest>0</evendata_currentdest><evendata_dest0>boardUI1</evendata_dest0><evendata_dest1>prgUI1</evendata_dest1><evendata_dest2>boardUI2</evendata_dest2><evendata_dest3>prgUI2</evendata_dest3></evendata_destination><evendata_linkfields>Client/Address/Name,Client/AccountNumber</evendata_linkfields></XML>\n"
- self.assertEquals(S,file(FILE, "r").read())
-
- def test8LoadDatasFile(self):
- data2 = FevenData()
- LINK2=data2.__dict__['linkFieldsNames']
- data2.setDatasFromFile(FILE)
- self.assertEquals( data2.getSource().getString(),"MySQL")
- self.assertEquals( data2.getCurrentDestination().getString(),"boardUI1")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"prgUI1")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"boardUI2")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"prgUI2")
- self.assertEquals(data2.selectNextDestination(), RC.RET_NOTEXIST)
-
- self.assertEquals( "Client/Address/Name", LINK2.get(0).getString())
- self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
-
- self.assertEquals( data2.getData( "Account/Number"),"123")
- self.assertEquals( data2.getData( "Account/Name"),"200")
- self.assertEquals( data2.getDataInt( "Account/Devises/Rate/CHF"), 176)
- self.assertEquals( data2.getDataInt( "Account/Devises/Rate/DM"), 182)
-
- def test9SaveDatasMemory(self):
- data1 = FevenData()
- data1.setSource( "MySQL")
- data1.addDestination( "boardUI1")
- data1.addDestination( "prgUI1")
- data1.addDestination( "boardUI2")
- data1.addDestination( "prgUI2")
- data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
-
-
- data1.setData( "Account/Number", "123")
- data1.setData( "Account/Name", "200")
- data1.setDataInt( "Account/Devises/Rate/CHF", 176)
- data1.setDataInt( "Account/Devises/Rate/DM", 182)
-
- global buff
- buff = data1.getDatasToString()
-
- S = "<?xml version=\"1.0\"?>\n<XML><evendata_datas><Account><Number>123</Number><Name>200</Name><Devises><Rate><CHF>176</CHF><DM>182</DM></Rate></Devises></Account></evendata_datas><evendata_source>MySQL</evendata_source><evendata_starttime>0</evendata_starttime><evendata_destination><evendata_destcount>4</evendata_destcount><evendata_currentdest>0</evendata_currentdest><evendata_dest0>boardUI1</evendata_dest0><evendata_dest1>prgUI1</evendata_dest1><evendata_dest2>boardUI2</evendata_dest2><evendata_dest3>prgUI2</evendata_dest3></evendata_destination><evendata_linkfields>Client/Address/Name,Client/AccountNumber</evendata_linkfields></XML>\n"
-
- self.assertEquals(S,buff)
-
- def test10LoadDatasMemory(self):
- data2 = FevenData()
- self.test9SaveDatasMemory()
- data2.setDatasFromString( buff)
- LINK2=data2.__dict__['linkFieldsNames']
-
- self.assertEquals(data2.getSource().getString(),"MySQL")
- self.assertEquals( data2.getCurrentDestination().getString(),"boardUI1")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"prgUI1")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"boardUI2")
- data2.selectNextDestination()
- self.assertEquals( data2.getCurrentDestination().getString(),"prgUI2")
- self.assertEquals( data2.selectNextDestination(), RC.RET_NOTEXIST)
-
- self.assertEquals( "Client/Address/Name", LINK2.get(0).getString())
- self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
-
- self.assertEquals( data2.getData( "Account/Number"), "123")
- self.assertEquals( data2.getData( "Account/Name"), "200")
- self.assertEquals( data2.getDataInt( "Account/Devises/Rate/CHF"), 176)
- self.assertEquals( data2.getDataInt( "Account/Devises/Rate/DM"), 182)
-
- def test11HashValue(self):
- return
- data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
- data1.setData( "Client/Address/Name", "Dupont")
- data1.setData( "Client/AccountNumber", "200")
-
- strH = FstringHash()
- strH.setString( "Dupont200")
- self.assertEquals(strH.equals( data1),True)
-
- strH.setString( "Dupont201")
- self.assertEquals(strH.equals( data1),False)
-
- def test12CopyFrom(self):
- return
- data1.setDatasFromFile("testezlog_save.xml")
- data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
- data1.setData( "Client/Address/Name", "Dupont")
- data1.setData( "Client/AccountNumber", "200")
-
- data2.copyFrom( data1)
-
- self.assertEquals(data1.equals( data2),True)
-
- buff1 = data1.getDatasToString()
- buff2 = data2.getDatasToString()
- self.asserEquals(len(buff1),len(buff2))
- self.asserEquals(buff1,buff2)
-
-
- unittest.main()
+ import unittest
+
+ def getLinkFieldsNames(self):
+ return self.linkFieldsNames
+
+ FILE = "testezlog_save.xml"
+
+ class FevendataTestCase(unittest.TestCase):
+
+
+ def test1Source(self):
+ data1 = FevenData()
+ data1.setSource( "MySQL")
+ self.assertEquals("MySQL",data1.getSource().getString())
+
+ def test2Destination(self):
+ data1 = FevenData()
+ data1.addDestination( "gateUI")
+ self.assertEquals(data1.getCurrentDestination().getPort().getString(),"gateUI")
+ self.assertEquals(data1.selectNextDestination(),RC.RET_NOTEXIST)
+
+ data1.resetDestination()
+
+ data1.addDestination( "boardUI1")
+ data1.addDestination( "prgUI1")
+ data1.addDestination( "boardUI2")
+ data1.addDestination( "prgUI2")
+
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI1")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI1")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI2")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI2")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_NOTEXIST)
+
+ data1.resetDestination()
+
+ data1.addDestination( "boardUI1;prgUI1;boardUI2;prgUI2");
+
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI1")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI1")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"boardUI2")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_OK)
+ self.assertEquals( data1.getCurrentDestination().getPort().getString(),"prgUI2")
+ self.assertEquals( data1.selectNextDestination(),RC.RET_NOTEXIST)
+
+ def test3LnkFieldsname(self):
+ data2 = FevenData()
+ data2.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
+ LINK2=data2.__dict__['linkFieldsNames']
+
+ self.assertEquals( "Client/Address/Name",LINK2.get(0).getString())
+ self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
+
+ #// Check a change of the linkFieldsNames directly without creating a new evenData
+ data2.setLinkFieldsNames( "Ref1/Ref2/Ref3,Val1/Val2,Data1")
+
+ self.assertEquals( "Ref1/Ref2/Ref3",LINK2.get( 0).getString())
+ self.assertEquals( "Val1/Val2",LINK2.get(1).getString())
+ self.assertEquals( "Data1", LINK2.get(2).getString())
+
+ def test4Timer(self):
+ data1 = FevenData()
+ T = time()
+ data1.reset()
+ T1 = data1.getStartToUse()
+ self.assertEquals( abs(T - T1) < 2,True)
+
+ def test5SetAndGetDatas(self):
+ data1 = FevenData()
+ data1.setData( "Name", "Dupont")
+ self.assertEquals( data1.getData( "Name"),"Dupont")
+ data1.setData( "Account/Number", "012345678901234567")
+ data1.setData( "Account/Name", "BANK Dupond")
+ data1.setData( "Account/Devises/Rate/CHF", "1,234")
+ data1.setData( "Account/Devises/Rate/DM", "1,2")
+ self.assertEquals( data1.getData( "Account/Number"),"012345678901234567")
+ self.assertEquals( data1.getData( "Account/Name"),"BANK Dupond")
+ self.assertEquals( data1.getData( "Account/Devises/Rate/CHF"),"1,234")
+ self.assertEquals( data1.getData( "Account/Devises/Rate/DM"),"1,2")
+
+ def test6SetAndGetDatasInt(self):
+ data1 = FevenData()
+ data1.setDataInt( "Name", 10)
+ self.assertEquals( data1.getDataInt( "Name"),10)
+ data1.setDataInt( "Account/Number", 123)
+ data1.setDataInt( "Account/Name", 200)
+ data1.setDataInt( "Account/Devises/Rate/CHF", -176)
+ data1.setDataInt( "Account/Devises/Rate/DM", 182)
+ self.assertEquals( data1.getDataInt( "Account/Number"),123)
+ self.assertEquals( data1.getDataInt( "Account/Name") ,200)
+ self.assertEquals( data1.getDataInt( "Account/Devises/Rate/CHF"), -176)
+ self.assertEquals( data1.getDataInt( "Account/Devises/Rate/DM"), 182)
+
+ def test7SaveDatasFile(self):
+ data1 = FevenData()
+ data1 = FevenData()
+ data1.setSource( "MySQL")
+
+ data1.addDestination( "boardUI1")
+ data1.addDestination( "prgUI1")
+ data1.addDestination( "boardUI2")
+ data1.addDestination( "prgUI2")
+ data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
+
+ data1.setData( "Account/Number", "123")
+ data1.setData( "Account/Name", "200")
+ data1.setDataInt( "Account/Devises/Rate/CHF", 176)
+ data1.setDataInt( "Account/Devises/Rate/DM", 182)
+
+ data1.getDatasToFile(FILE)
+
+ S = "<?xml version=\"1.0\"?>\n<XML><evendata_datas><Account><Number>123</Number><Name>200</Name><Devises><Rate><CHF>176</CHF><DM>182</DM></Rate></Devises></Account></evendata_datas><evendata_source>MySQL</evendata_source><evendata_starttime>0</evendata_starttime><evendata_destination><evendata_destcount>4</evendata_destcount><evendata_currentdest>0</evendata_currentdest><evendata_dest0>boardUI1</evendata_dest0><evendata_dest1>prgUI1</evendata_dest1><evendata_dest2>boardUI2</evendata_dest2><evendata_dest3>prgUI2</evendata_dest3></evendata_destination><evendata_linkfields>Client/Address/Name,Client/AccountNumber</evendata_linkfields></XML>\n"
+ self.assertEquals(S,file(FILE, "r").read())
+
+ def test8LoadDatasFile(self):
+ data2 = FevenData()
+ LINK2=data2.__dict__['linkFieldsNames']
+ data2.setDatasFromFile(FILE)
+ self.assertEquals( data2.getSource().getString(),"MySQL")
+ self.assertEquals( data2.getCurrentDestination().getString(),"boardUI1")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"prgUI1")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"boardUI2")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"prgUI2")
+ self.assertEquals(data2.selectNextDestination(), RC.RET_NOTEXIST)
+
+ self.assertEquals( "Client/Address/Name", LINK2.get(0).getString())
+ self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
+
+ self.assertEquals( data2.getData( "Account/Number"),"123")
+ self.assertEquals( data2.getData( "Account/Name"),"200")
+ self.assertEquals( data2.getDataInt( "Account/Devises/Rate/CHF"), 176)
+ self.assertEquals( data2.getDataInt( "Account/Devises/Rate/DM"), 182)
+
+ def test9SaveDatasMemory(self):
+ data1 = FevenData()
+ data1.setSource( "MySQL")
+ data1.addDestination( "boardUI1")
+ data1.addDestination( "prgUI1")
+ data1.addDestination( "boardUI2")
+ data1.addDestination( "prgUI2")
+ data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
+
+
+ data1.setData( "Account/Number", "123")
+ data1.setData( "Account/Name", "200")
+ data1.setDataInt( "Account/Devises/Rate/CHF", 176)
+ data1.setDataInt( "Account/Devises/Rate/DM", 182)
+
+ global buff
+ buff = data1.getDatasToString()
+
+ S = "<?xml version=\"1.0\"?>\n<XML><evendata_datas><Account><Number>123</Number><Name>200</Name><Devises><Rate><CHF>176</CHF><DM>182</DM></Rate></Devises></Account></evendata_datas><evendata_source>MySQL</evendata_source><evendata_starttime>0</evendata_starttime><evendata_destination><evendata_destcount>4</evendata_destcount><evendata_currentdest>0</evendata_currentdest><evendata_dest0>boardUI1</evendata_dest0><evendata_dest1>prgUI1</evendata_dest1><evendata_dest2>boardUI2</evendata_dest2><evendata_dest3>prgUI2</evendata_dest3></evendata_destination><evendata_linkfields>Client/Address/Name,Client/AccountNumber</evendata_linkfields></XML>\n"
+
+ self.assertEquals(S,buff)
+
+ def test10LoadDatasMemory(self):
+ data2 = FevenData()
+ self.test9SaveDatasMemory()
+ data2.setDatasFromString( buff)
+ LINK2=data2.__dict__['linkFieldsNames']
+
+ self.assertEquals(data2.getSource().getString(),"MySQL")
+ self.assertEquals( data2.getCurrentDestination().getString(),"boardUI1")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"prgUI1")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"boardUI2")
+ data2.selectNextDestination()
+ self.assertEquals( data2.getCurrentDestination().getString(),"prgUI2")
+ self.assertEquals( data2.selectNextDestination(), RC.RET_NOTEXIST)
+
+ self.assertEquals( "Client/Address/Name", LINK2.get(0).getString())
+ self.assertEquals( "Client/AccountNumber", LINK2.get(1).getString())
+
+ self.assertEquals( data2.getData( "Account/Number"), "123")
+ self.assertEquals( data2.getData( "Account/Name"), "200")
+ self.assertEquals( data2.getDataInt( "Account/Devises/Rate/CHF"), 176)
+ self.assertEquals( data2.getDataInt( "Account/Devises/Rate/DM"), 182)
+
+ def test11HashValue(self):
+ return
+ data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
+ data1.setData( "Client/Address/Name", "Dupont")
+ data1.setData( "Client/AccountNumber", "200")
+
+ strH = FstringHash()
+ strH.setString( "Dupont200")
+ self.assertEquals(strH.equals( data1),True)
+
+ strH.setString( "Dupont201")
+ self.assertEquals(strH.equals( data1),False)
+
+ def test12CopyFrom(self):
+ return
+ data1.setDatasFromFile("testezlog_save.xml")
+ data1.setLinkFieldsNames( "Client/Address/Name,Client/AccountNumber")
+ data1.setData( "Client/Address/Name", "Dupont")
+ data1.setData( "Client/AccountNumber", "200")
+
+ data2.copyFrom( data1)
+
+ self.assertEquals(data1.equals( data2),True)
+
+ buff1 = data1.getDatasToString()
+ buff2 = data2.getDatasToString()
+ self.asserEquals(len(buff1),len(buff2))
+ self.asserEquals(buff1,buff2)
+
+
+ unittest.main()