diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2012-04-13 21:07:42 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2012-04-13 21:07:42 +0200 |
commit | a62cb4e37d008d47480cdd6c25d928044b8afe31 (patch) | |
tree | f16e0109caf00d8989d56e2e5392851117db8814 /fposition.py | |
download | pyevenja-a62cb4e37d008d47480cdd6c25d928044b8afe31.zip pyevenja-a62cb4e37d008d47480cdd6c25d928044b8afe31.tar.gz |
initial commit, old code from ~2007
Diffstat (limited to 'fposition.py')
-rw-r--r-- | fposition.py | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/fposition.py b/fposition.py new file mode 100644 index 0000000..09cc62e --- /dev/null +++ b/fposition.py @@ -0,0 +1,251 @@ +#/*************************************************************************** +# fposition.h +# ----------- +# begin : sam nov 2 2002 +# copyright : (C) 1992-2004 by Fabian Padilla +# email : fp@bridgethink.com +# ***************************************************************************/ + +# /*************************************************************************** +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the Foundation Public License as published by * +# * bridgethink sarl; either version 2 of the License, or * +# * (at your option) any later version. * +# * * +# ***************************************************************************/ + +# +# from C++ to python by Jeremy Zurcher <jeremy@asynk.ch> +# + + +"""/** Define the position ( source OR destination) of the evenData. + function : maintain the stringHashs for the computer, rooms, port, action. + Format example : www.revena.com/room1/room2/port:normal + + description : method "setPosition" set all position informations this mean + - compute + - room tree + - port + - action. + Then these informations are retrieved with getComputer, getRoom, getPort, + getAction methods. + + *@author Fabian Padilla + */""" + +__all__ =["Fposition"] + +from flist import Flist +from fstringhash import FstringHash + +from returncodes import RET_OK +from evenjastrings import ACT_WAIT_NOTHING +from evenjastrings import ACT_NORMAL +from evenjastrings import TXT_NULL + +class Fposition(FstringHash): + """This class keeps informations on the computer / a list of rooms / a port /an action / and time""" + + def __init__(self): + FstringHash.__init__(self) # force constructor + self.computer = FstringHash() # /** computer destination or source. */ + self.rooms = Flist() # /** room destination or source. */ + self.nbLevel = 0 + self.port = FstringHash() # /** port destination or source. */ + self.action = FstringHash() # /** action to do at the position (source or destination). */ + self.waitTime = 0 # /** wait time in the action */ + #/** waitTime unit (ex.: y(year), n(month), d(day), h(hour), m(minute), s(seconde) or x(milliseconde))*/ + self.unitWaitTime = ACT_WAIT_NOTHING + self.positionActived = False + + def __del__(self): + """I belive this is for no use""" + self.resetPosition() + + def __str__(self): + return "\t"+FstringHash.__str__(self)+\ + "Fposition - computer : "+str(self.computer)+\ + " - rooms : "+str(self.rooms)+\ + " - nbLevel : "+str(self.nbLevel)+\ + " - port : "+str(self.port)+\ + " - action : "+str(self.action)+\ + " - waitTime : "+str(self.waitTime)+\ + " - unitWaitTime : "+str(self.unitWaitTime)+\ + " - positionAtived : "+str(self.positionActived)+"\n" + + def resetPosition(self): + """/** reset position (erase datas) */""" + if self.positionActived: + self.computer.setString(TXT_NULL) + # delete rooms + for I in range(self.nbLevel): + self.rooms.remove(0) # TzurTcH - no self.getRoom() + self.nbLevel = 0 + self.port.setString(TXT_NULL) + self.action.setString(TXT_NULL) + self.waitTime = 0 + self.unitWaitTime = ACT_WAIT_NOTHING + self.positionActived = False + + def setPosition(self, position): + """/** Set the source or the destination of an evenData. */""" + self.resetPosition() + self.nbLevel = 0 + self.setString(position) + + # search for - computer/rooms<F2> + buffer = position.split("/") + if len(buffer) > 1: + # computer name ? + ret = None + try: + ret = buffer[0].index(".") + except: + None + if ret: + self.computer.setString(buffer[0]) + buffer = buffer[1:] + # import rooms + bufferRooms="" + for I in buffer[:-1]: + self.rooms.add( FstringHash()) + if self.nbLevel: + bufferRooms += "/" + bufferRooms += I + self.rooms.get(self.nbLevel).setString(bufferRooms) + self.nbLevel += 1 + # search for - port:action + buffer = buffer[-1].split(":") + self.port.setString(buffer[0]) + if len(buffer) > 1: + # search for - action,time + buffer = buffer[1].split(",") + self.action.setString(buffer[0]) + if len(buffer) > 1: + self.waitTime = int(buffer[1][:-1]) + self.unitWaitTime = buffer[1][-1] + else: + self.waitTime = 0 + self.unitWaitTime = ACT_WAIT_NOTHING + else: + self.action.setString(ACT_NORMAL) + self.waitTime = 0 + self.unitWaitTime = ACT_WAIT_NOTHING + self.positionActived = True + return RET_OK + + def getComputer(self): + """/** Get the computer name. If the evenData needs to go to another computer. */""" + return self.computer + + def getRoom(self, level = 0): + """/** Get the room for destination or source. */""" + if level < self.nbLevel: + return self.rooms.get(level) + else: + return None + + def getNbLevel(self): + """/** Number of levels in the rooms routing tree. */""" + return self.nbLevel + + def getPort(self): + """/** Get the port of the position (source or destination). This means an evenDoor or a evenBoard. */""" + return self.port + + def getAction(self): + """/** Get the action of the position (source or destination). */""" + return self.action + + def getWaitTime(self): + """/** Get the amount of waiting time (unity is another get function) */""" + return self.waitTime + + def getUnitWaitTime(self): + """/** Get the unity time y,n,d,h,m,s or x */""" + return self.unitWaitTime + + def copyFrom(self, pos): + """/** Copy a position From another Fposition class */""" + self.resetPosition() + self.computer.copyFrom(pos.getComputer()) + + for I in range(pos.getNbLevel()): + new = FstringHash() + new.copyFrom(pos.getRoom(I)) + self.rooms.add(new) + self.nbLevel = pos.getNbLevel() + self.port.copyFrom(pos.getPort()) + self.action.copyFrom(pos.getAction()) + self.waitTime = pos.getWaitTime() + self.unitWaitTime = pos.getUnitWaitTime() + self.positionActived = True + + + +if __name__ == '__main__': + + import unittest + from evenjastrings import * + + pos1 = Fposition() + pos2 = Fposition() + + class FpositionTestCase(unittest.TestCase): + + def test1Splitting(self): + pos1.setPosition( "WWW.TEST.ORG/room1/room2/port") + self.assertEquals(pos1.getNbLevel(),2) + self.assertEquals("WWW.TEST.ORG",pos1.getComputer().getString()) + self.assertEquals("room1",pos1.getRoom(0).getString()) + self.assertEquals("room1/room2",pos1.getRoom(1).getString()) + self.assertEquals("port",pos1.getPort().getString()) + self.assertEquals(ACT_NORMAL,pos1.getAction().getString()) + + pos1.setPosition("room1/room2/port:destination1Data") + self.assertEquals(pos1.getNbLevel(),2) + self.assertEquals(TXT_NULL,pos1.getComputer().getString()) + self.assertEquals("room1",pos1.getRoom(0).getString()) + self.assertEquals("room1/room2",pos1.getRoom(1).getString()) + self.assertEquals("port",pos1.getPort().getString()) + self.assertEquals(ACT_DESTINATION1DATA,pos1.getAction().getString()) + + pos1.setPosition( "port:wait,5s") + self.assertEquals(pos1.getNbLevel(),0) + self.assertEquals(TXT_NULL,pos1.getComputer().getString()) + self.assertEquals(pos1.getRoom(0),None) + self.assertEquals("port",pos1.getPort().getString()) + self.assertEquals(ACT_WAIT,pos1.getAction().getString()) + self.assertEquals(pos1.getWaitTime(),5) + self.assertEquals( pos1.getUnitWaitTime(),ACT_WAIT_SECOND) + + pos1.setPosition( ":wait,5d") + self.assertEquals(pos1.getNbLevel(),0) + self.assertEquals(TXT_NULL,pos1.getComputer().getString()) + self.assertEquals(pos1.getRoom(0),None) + self.assertEquals(TXT_NULL,pos1.getPort().getString()) + self.assertEquals(ACT_WAIT,pos1.getAction().getString()) + self.assertEquals(pos1.getWaitTime(),5) + self.assertEquals(pos1.getUnitWaitTime(),ACT_WAIT_DAY) + + pos1.setPosition( ":end") + self.assertEquals(pos1.getNbLevel(),0) + self.assertEquals(TXT_NULL,pos1.getComputer().getString()) + self.assertEquals(pos1.getRoom(0),None) + self.assertEquals(TXT_NULL,pos1.getPort().getString()) + self.assertEquals(ACT_END,pos1.getAction().getString()) + + def test2Copy(self): + pos1.setPosition( "WWW.TEST.ORG/room1/room2/port:wait,1d") + pos2.copyFrom( pos1) + self.assertEquals(pos1.getComputer().equals( pos2.getComputer()),True) + self.assertEquals(pos1.getRoom(0).equals(pos2.getRoom(0)),True) + self.assertEquals(pos1.getRoom( 1).equals( pos2.getRoom( 1)),True) + self.assertEquals(pos1.getPort().equals( pos2.getPort()),True) + self.assertEquals(pos1.getAction().equals( pos2.getAction()),True) + self.assertEquals(pos1.getWaitTime(),pos2.getWaitTime()) + self.assertEquals(pos1.getUnitWaitTime(),pos2.getUnitWaitTime()) + + unittest.main() |