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 Link import Link
import csv
from Node import Node
import logging
logger = logging.getLogger(__name__)
class Network(SystemEntity):
def __init__(self):
#TODO need better datastructure store these
self.nodes = []
self.links = []
SystemEntity.__init__(self)
self.nodes = {}#{1 : Node(1),2:Node(2)}
self.links = {} #{(1,2):Link(1-2),(2,1):Link(2,1),(3,2):Link(3*2)} linkID = tuple(1,2)
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
def simulate(self,time):
logger.info("simulating .. ")
# Note links should be simulated before nodes
# 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)
for node in self.nodes:
for node in self.nodes.values():
node.simulate(time)
pass
if __name__ == '__main__':
network = Network()
network.setupNetwork()
pass
import SystemEntity
from SystemEntity import SystemEntity
import logging
logger = logging.getLogger(__name__)
class Node(SystemEntity.SystemEntity):
class Node(SystemEntity):
def __init__(self,id):
SystemEntity.__init__(self)
self.id = id
self.adjacentNodes = []
self.commands={"sendMessage":self.sendMessage,
}
def sendMessage(self,params):
logger.info(str(params))
pass
def simulate(self,time):
logger.info("simulating .. ")
logger.info(" hello "+self.id)
try:
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 Network import Network
from TestCases import populateTodolist
import logging
......@@ -13,5 +14,7 @@ def simulateThis(time):
if __name__ == '__main__':
metronome = TimeSimulator()
network = Network()
network.setupNetwork()
populateTodolist(network)
metronome.startTicking(network.simulate)
pass
\ No newline at end of file
from collections import defaultdict
import logging
logger = logging.getLogger(__name__)
class SystemEntity(object):
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):
'''
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
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):
for i in range(10):
self._systemTime = self._systemTime + 1
logger.info(self)
callback(self._systemTime)
callback(str(self._systemTime))
instance = None
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