- add functions add_node_network() and set_primary_node_network(). Node
authorMark Huang <mlhuang@cs.princeton.edu>
Tue, 19 Sep 2006 19:28:39 +0000 (19:28 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Tue, 19 Sep 2006 19:28:39 +0000 (19:28 +0000)
  networks cannot be associated with multiple nodes, so there is no need
  for remove_node_network() at this time.

PLC/Nodes.py

index 05bb73a..2fbda71 100644 (file)
@@ -4,7 +4,7 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2006 The Trustees of Princeton University
 #
-# $Id: Nodes.py,v 1.1 2006/09/06 15:36:07 mlhuang Exp $
+# $Id: Nodes.py,v 1.2 2006/09/08 19:44:51 mlhuang Exp $
 #
 
 from types import StringTypes
@@ -101,6 +101,54 @@ class Node(Row):
 
         return boot_state
 
+    def add_node_network(self, nodenetwork, commit = True):
+        """
+        Add node network to this node.
+        """
+
+        assert 'node_id' in self
+        assert isinstance(nodenetwork, NodeNetwork)
+        assert 'nodenetwork_id' in nodenetwork
+
+        nodenetwork_id = nodenetwork['nodenetwork_id']
+        nodenetwork['node_id'] = self['node_id']
+
+        self.api.db.do("INSERT INTO node_nodenetworks (node_id, nodenetwork_id, is_primary)" \
+                       " VALUES(%(node_id)d, %(nodenetwork_id)d, False)",
+                       nodenetwork)
+
+        if commit:
+            self.api.db.commit()
+
+        if 'nodenetwork_ids' in self and nodenetwork_id not in self['nodenetwork_ids']:
+            self['nodenetwork_ids'].append(nodenetwork_id)
+
+    def set_primary_node_network(self, nodenetwork, commit = True):
+        """
+        Remove node network from this node.
+        """
+
+        assert 'node_id' in self
+        assert isinstance(nodenetwork, NodeNetwork)
+        assert 'nodenetwork_id' in nodenetwork
+
+        node_id = self['node_id']
+        nodenetwork_id = nodenetwork['nodenetwork_id']
+
+        self.api.db.do("UPDATE node_nodenetworks SET is_primary = False" \
+                       " WHERE node_id = %(node_id)d",
+                       locals())
+
+        self.api.db.do("UPDATE node_nodenetworks SET is_primary = True" \
+                       " WHERE node_id = %(node_id)d" \
+                       " AND nodenetwork_id = %(nodenetwork_id)d",
+                       locals())
+
+        if commit:
+            self.api.db.commit()
+
+        nodenetwork['is_primary'] = True
+
     def flush(self, commit = True):
         """
         Flush changes back to the database.