pvl.irk: implement optional --irker-part for targets
authorTero Marttila <terom@paivola.fi>
Sun, 13 Jan 2013 03:30:49 +0200
changeset 128 42d4bd708373
parent 127 f143171884f9
child 129 c66c8020babe
pvl.irk: implement optional --irker-part for targets
pvl/irk.py
--- a/pvl/irk.py	Sun Jan 13 03:30:11 2013 +0200
+++ b/pvl/irk.py	Sun Jan 13 03:30:49 2013 +0200
@@ -24,6 +24,9 @@
     irker.add_option('--irker-notice',          action='store_true',
             help="Use irker NOTICE")
 
+    irker.add_option('--irker-part',            action='store_true',
+            help="Use irker PART")
+
     return irker
 
 def apply (options) :
@@ -32,7 +35,7 @@
     """
     
     # None -> stdout
-    return Irker(options.irker, options.irker_notice)
+    return Irker(options.irker, options) # options.irker_*
 
 class Irk (object) :
     """
@@ -113,11 +116,12 @@
         A channel on an Irk connection.
     """
 
-    def __init__ (self, irker, target, notice=False) :
+    def __init__ (self, irker, target, notice=None, part=None) :
         self.irker = irker
         self.target = target
 
         self._notice = notice
+        self._part = part
         
     def join (self) :
         log.info("%s", self)
@@ -133,6 +137,14 @@
             log.info("%s: %s", self, arg)
             self.irker(to=str(self), notice=arg)
 
+    def part (self, msg='') :
+        log.info("%s: %s", self, msg)
+
+        if self._part :
+            self.irker(to=str(self), part=msg)
+        else :
+            log.warn("%s: no --irker-part")
+
     def __call__ (self, *args) :
         # default msg policy
         if self._notice :
@@ -148,10 +160,15 @@
         Reconnecting Irk.
     """
 
-    def __init__ (self, url=None, notice=False) :
+    def __init__ (self, url=None, options=None) :
+        """
+            url         - irker to connect to
+            options     - irker_* configs
+        """
+
         self.url = url
         self.targets = {}
-        self.notice = notice
+        self.options = options
         
         self.connect()
     
@@ -181,7 +198,21 @@
         """
 
         if target not in self.targets :
-            self.targets[target] = IrkerTarget(self, target, notice=self.notice)
+            self.targets[target] = IrkerTarget(self, target, 
+                    notice  = self.options and self.options.irker_notice,
+                    part    = self.options and self.options.irker_part,
+            )
             self.targets[target].join()
             
         return self.targets[target]
+
+    def __delitem__ (self, target) :
+        """
+            Unbind given target URL.
+        """
+
+        target = self.targets.pop(target)
+        target.part()
+
+    def __iter__ (self) :
+        return iter(self.targets)