Advertisement
Woobinda

Nodes with Controller

Sep 23rd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.72 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, id, alive=True, leader=None, controller=None):
  3.         self.id = id
  4.         self.alive = alive
  5.         self.leader = leader
  6.         self.controller = controller
  7.  
  8.     def setLeader(self, leader_node):
  9.         self.leader = leader_node
  10.  
  11.     def getLeader(self):
  12.         return self.leader
  13.  
  14.     def isAlive(self):
  15.         return self.alive
  16.  
  17.     def __repr__(self):
  18.         return 'Node instance, id=%s' %self.id
  19.  
  20.  
  21. class Controller:
  22.     def __init__(self, nodes=[], name='Controller', leader_node=None):
  23.         self.nodes = nodes
  24.         self.name = name
  25.         self.leader_node = leader_node
  26.  
  27.     def addNode(self, node):
  28.         if type(node) == Node:
  29.             node.controller = self
  30.             if self.leader_node:
  31.                 node.leader = self.leader_node
  32.             self.nodes.append(node)
  33.         else:
  34.             raise TypeError ('setting node muse be a type of Node')
  35.  
  36.     def getNode(self, node_id):
  37.         return [node for node in self.nodes if node.id == id]
  38.  
  39.     def setLeader(self):
  40.         arr = []
  41.         arr.append([node.id for node in self.nodes if node.isAlive() == True])
  42.         leader = [node for node in self.nodes if node.id == min(arr[0])]
  43.         self.leader_node = leader[0]
  44.         for node in self.nodes:
  45.             if node.isAlive() == True:
  46.                 node.setLeader(self.leader_node)
  47.  
  48.     def delNode(self, node_id):
  49.         try:
  50.             node_for_del = self.getNode(node_id)
  51.             return 'Node with id=%s was removed' %node_id
  52.         except IndexError:
  53.             return 'Node with id=%s is not avaliable' %node_id
  54.         self.nodes.remove(node_for_del)
  55.  
  56.     def __repr__(self):
  57.         return '%s' %self.name
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement