todolist formating and command format in todolist finalized

parent 1d7e6aa6
from SystemEntity import SystemEntity
from Node import Node
import logging
logger = logging.getLogger(__name__)
class Link(SystemEntity):
def __init__(self,link):
SystemEntity.__init__(self)
#link = (1,2)
self.upNode = link[0]
self.downNode = link[1]
self.link = link
'''
contains string command and its corresponding method to be executed
useful to execute task from todolist
'''
self.commands = {"sendMessage": self.sendMessage,
}
pass
def simulate(self,time):
logger.info("simulating .. ")
if __name__ == '__main__':
x = {(1,2):"1*2",
(2,1):"2*1",
(3,2):"3*2"}
print(x.get((2,1,3)))
1 2
2 3
3 4
4 1
from SystemEntity import SystemEntity from SystemEntity import SystemEntity
from Link import Link
import csv
from Node import Node
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class Network(SystemEntity): class Network(SystemEntity):
def __init__(self): def __init__(self):
#TODO need better datastructure store these SystemEntity.__init__(self)
self.nodes = [] self.nodes = {}#{1 : Node(1),2:Node(2)}
self.links = [] self.links = {} #{(1,2):Link(1-2),(2,1):Link(2,1),(3,2):Link(3*2)} linkID = tuple(1,2)
def setupNetwork(self): def setupNetwork(self):
# TODO add nodes '''
Assumption : nodes are unique
links are unique and bidirectional
no errorneous nodes present in the file
no erroneous link present in the file
self loops are not there
Adds links and nodes to the network .It is a one time activity.
:return:
'''
with open('Nodes.dat', 'r') as f:
reader = csv.reader(f)
for row in reader:
node = row[0] # tuple of a link
self.nodes.update({node:Node(node)})
# print(self.nodes.get('1')) #keys are strings
with open('Links.dat', 'r') as f:
reader = csv.reader(f)
for row in reader:
link = tuple(row[0].split()) # tuple of a link
self.links.update({link:Link(link)})
# adding adjacent nodes list to each node
self.nodes.get(link[0]).adjacentNodes.append(link[1])
self.nodes.get(link[1]).adjacentNodes.append(link[0])
# print(self.links.get(('1', '2'))) #keys are strings
# TODO add links
pass pass
def simulate(self,time): def simulate(self,time):
logger.info("simulating .. ") logger.info("simulating .. ")
# Note links should be simulated before nodes # Note links should be simulated before nodes
# in order to receive the messge which is supposed to be received in this tick # in order to receive the messge which is supposed to be received in this tick
for link in self.links: for link in self.links.values():
link.simulate(time) link.simulate(time)
for node in self.nodes: for node in self.nodes.values():
node.simulate(time) node.simulate(time)
pass pass
if __name__ == '__main__':
network = Network()
network.setupNetwork()
pass
import SystemEntity from SystemEntity import SystemEntity
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class Node(SystemEntity.SystemEntity): class Node(SystemEntity):
def __init__(self,id): def __init__(self,id):
SystemEntity.__init__(self)
self.id = id self.id = id
self.adjacentNodes = []
self.commands={"sendMessage":self.sendMessage,
}
def sendMessage(self,params):
logger.info(str(params))
pass
def simulate(self,time): def simulate(self,time):
logger.info("simulating .. ") logger.info("simulating .. ")
logger.info(" hello "+self.id)
pass try:
\ No newline at end of file tasks = self.todoList.pop(time)
for task in tasks:
command = self.commands.get(task[0])
command(task[1:])
except KeyError as ke:
# not task pending at this time
pass
pass
if __name__ == '__main__':
# node = Node('1')
# cmd = node.commands.get("sendMessage")
# cmd("1 ","2 "," : Hello world")
from collections import defaultdict
# when accessing a key, if it has no value - create a list by default
d = defaultdict(list)
d["key"].append("a value")
d["key"].append("another value")
print(d)
x = d.pop("key2")
print(x)
print(d.get("key2"))
from TimeSimulator import TimeSimulator from TimeSimulator import TimeSimulator
from Network import Network from Network import Network
from TestCases import populateTodolist
import logging import logging
...@@ -13,5 +14,7 @@ def simulateThis(time): ...@@ -13,5 +14,7 @@ def simulateThis(time):
if __name__ == '__main__': if __name__ == '__main__':
metronome = TimeSimulator() metronome = TimeSimulator()
network = Network() network = Network()
network.setupNetwork()
populateTodolist(network)
metronome.startTicking(network.simulate) metronome.startTicking(network.simulate)
pass pass
\ No newline at end of file
from collections import defaultdict
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class SystemEntity(object): class SystemEntity(object):
def __init__(self): def __init__(self):
self.todoList = [] self.todoList = defaultdict(list)
#{'key': [('sendMessage','1','2','hello2'), ('sendMessage','1','3','hello3')],'key2':["hello"]}
# key is timestamp at which to perfrom action
def simulate(self,time): def simulate(self,time):
'''
If there is a messge in queue process it
if there is a task with key of current_time_stamp perform it
:param time: current tick in system time
:return:
'''
pass pass
class x(SystemEntity):
def __init__(self,id):
self.id = id
SystemEntity.__init__(self)
if __name__ == '__main__':
y = SystemEntity()
print(y.todoList)
m = x(1)
m.todoList["key"].append("a value")
m.todoList["key"].append("another value")
print(m.todoList)
from Network import Network
import csv
import logging
logger = logging.getLogger(__name__)
def populateTodolist(net):
if not net:
network = Network()
network.setupNetwork()
else:
network = net
with open('todolist.dat', 'r') as f:
reader = csv.reader(f)
for row in reader:
instruction = row[0].split() # tuple of a link
node = network.nodes.get(instruction[0])
node.todoList[instruction[1]].append(tuple(instruction[2:]))
for id,node in network.nodes.items():
logger.info(id +" : "+str(node.todoList))
def simulateNetwork(net):
if not net:
network = Network()
network.setupNetwork()
else:
network = net
populateTodolist(network)
for time in range(15):
logger.info("TIme : "+str(time))
network.simulate(str(time))
if __name__ == '__main__':
logging.basicConfig(filename='TestCases.log', level=logging.INFO)
# populateTodolist()
simulateNetwork(None)
pass
...@@ -15,7 +15,7 @@ class TimeSimulator(object): ...@@ -15,7 +15,7 @@ class TimeSimulator(object):
for i in range(10): for i in range(10):
self._systemTime = self._systemTime + 1 self._systemTime = self._systemTime + 1
logger.info(self) logger.info(self)
callback(self._systemTime) callback(str(self._systemTime))
instance = None instance = None
def __new__(cls): # __new__ always a classmethod def __new__(cls): # __new__ always a classmethod
......
1 10 sendMessage 1 2 hello2
1 9 sendMessage 1 4 hello2
1 10 sendMessage 1 2 hello2
1 8 sendMessage 1 2 hello2
2 11 sendMessage 1 2 hello2
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment