]> sipb.mit.edu Git - snippets/.git/blobdiff - barn-growl/abstfilter.py
Code for barn-growl utility for OS X.
[snippets/.git] / barn-growl / abstfilter.py
diff --git a/barn-growl/abstfilter.py b/barn-growl/abstfilter.py
new file mode 100755 (executable)
index 0000000..c8a6e11
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+##  $Id: abstfilter.py,v 1.1.1.1 2003/07/01 23:28:27 euske Exp $
+##
+##  abstfilter.py - A framework for cascade filters.
+##
+
+
+##  AbstractFeeder
+##
+class AbstractFeeder(object):
+
+  def __init__(self, next_filter):
+    self.next_filter = next_filter
+    return
+
+  def feed_next(self, s):
+    self.next_filter.feed(s)
+    return
+
+  def close(self):
+    self.next_filter.close()
+    return
+
+
+##  AbstractFilter
+##
+class AbstractFilter(object):
+
+  def __init__(self, next_filter):
+    self.next_filter = next_filter
+    return
+
+  def process(self, s):
+    raise NotImplementedError
+  
+  def feed(self, s):
+    self.feed_next(self.process(s))
+    return
+
+  def feed_next(self, s):
+    self.next_filter.feed(s)
+    return
+
+  def close(self):
+    self.next_filter.close()
+    return
+
+
+##  AbstractConsumer
+##
+class AbstractConsumer(object):
+
+  def __init__(self):
+    return
+
+  def feed(self, s):
+    raise NotImplementedError
+  
+  def close(self):
+    return
+
+
+##  FileGenerator
+##
+class FileGenerator(AbstractFeeder):
+  def __init__(self, next_type):
+    next_filter = next_type(self)
+    AbstractFeeder.__init__(self, next_filter)
+    self.results = []
+    return
+  
+  def feed(self, s):
+    self.results.append(s)
+    return
+
+  def close(self):
+    return
+  
+  def pullopen(self, f):
+    while 1:
+      s = f.readline()
+      if not s: break
+      self.feed_next(s)
+      if self.results:
+        for s in self.results:
+          yield s
+        self.results = []
+    for s in self.results:
+      yield s
+    self.results = []
+    return
+