Browse Source

[213] Documentation in component.py

Michal 'vorner' Vaner 13 years ago
parent
commit
c82f6195ac
1 changed files with 41 additions and 0 deletions
  1. 41 0
      src/lib/python/isc/bind10/component.py

+ 41 - 0
src/lib/python/isc/bind10/component.py

@@ -58,6 +58,12 @@ class Component:
           * 'dispensable' means the component should be running, but if it
           * 'dispensable' means the component should be running, but if it
             doesn't start or crashes for some reason, the system simply tries
             doesn't start or crashes for some reason, the system simply tries
             to restart it and keeps running.
             to restart it and keeps running.
+        - `address` is the address on message bus. It is used to ask it to
+            shut down at the end. If you specialize the class for a component
+            that is shut down differently, it might be None.
+        - `params` is a list of parameters to pass to the process when it
+           starts. It is currently unused and this support is left out for
+           now.
         """
         """
         if kind not in ['core', 'needed', 'dispensable']:
         if kind not in ['core', 'needed', 'dispensable']:
             raise ValueError('Component kind can not be ' + kind)
             raise ValueError('Component kind can not be ' + kind)
@@ -96,6 +102,11 @@ class Component:
         This method does the actual starting of a process. If you need to
         This method does the actual starting of a process. If you need to
         change the way the component is started, replace this method.
         change the way the component is started, replace this method.
         """
         """
+        # This one is not tested. For one, it starts a real process
+        # which is out of scope of unit tests, for another, it just
+        # delegates the starting to other function in boss (if a derived
+        # class does not provide an override function), which is tested
+        # by use.
         if self._start_func is not None:
         if self._start_func is not None:
             procinfo = self._start_func()
             procinfo = self._start_func()
         else:
         else:
@@ -113,6 +124,8 @@ class Component:
         If you try to stop a component that is not running, it raises
         If you try to stop a component that is not running, it raises
         ValueError.
         ValueError.
         """
         """
+        # This is not tested. It talks with the outher world, which is out
+        # of scope of unittests.
         if not self.running():
         if not self.running():
             raise ValueError("Can't stop a component which is not running")
             raise ValueError("Can't stop a component which is not running")
         self.__running = False
         self.__running = False
@@ -167,12 +180,31 @@ class Component:
         return self.__running
         return self.__running
 
 
     def name(self):
     def name(self):
+        """
+        Returns human-readable name of the component. This is usually the
+        name of the executable, but it might be something different in a
+        derived class.
+        """
         return self._process
         return self._process
 
 
     def pid(self):
     def pid(self):
+        """
+        Provides a PID of a process, if the component is real running process.
+        This implementation expects it to be a real process, but derived class
+        may return None in case the component is something else.
+        """
         return self._procinfo.pid
         return self._procinfo.pid
 
 
+# These are specialized components. Some of them are components which need
+# special care (like the message queue or socket creator) or they need
+# some parameters constructed from Boss's command line. They are not tested
+# currently, because it is not clear what to test on them anyway and they just
+# delegate the work for the boss
 class SockCreator(Component):
 class SockCreator(Component):
+    """
+    The socket creator component. Will start and stop the socket creator
+    accordingly.
+    """
     def start_internal(self):
     def start_internal(self):
         self._boss.curproc = 'b10-sockcreator'
         self._boss.curproc = 'b10-sockcreator'
         self.__creator = isc.bind10.sockcreator.Creator(LIBEXECDIR + ':' +
         self.__creator = isc.bind10.sockcreator.Creator(LIBEXECDIR + ':' +
@@ -186,9 +218,18 @@ class SockCreator(Component):
         self.__creator = None
         self.__creator = None
 
 
     def pid(self):
     def pid(self):
+        """
+        Pid of the socket creator. It is provided differently from a usual
+        component.
+        """
         return self.__creator.pid()
         return self.__creator.pid()
 
 
 class Msgq(Component):
 class Msgq(Component):
+<<<<<<< HEAD
+    """
+    The message queue. Starting is passed to boss, stopping is not supported
+    and we leave the boss kill it by signal.
+    """
     def __init__(self, process, boss, kind, address, params):
     def __init__(self, process, boss, kind, address, params):
         Component.__init__(self, process, boss, kind)
         Component.__init__(self, process, boss, kind)
         self._start_func = boss.start_msgq
         self._start_func = boss.start_msgq