Explorar el Código

edit the publish_subscribe.py

luoxing hace 11 años
padre
commit
fee0702710
Se han modificado 3 ficheros con 30 adiciones y 57 borrados
  1. 22 13
      composite.py
  2. 0 37
      iterator.py
  3. 8 7
      publish_subscribe.py

+ 22 - 13
composite.py

@@ -5,11 +5,10 @@
 A class which defines a composite object which can store
 hieararchical dictionaries with names.
 
-This class is same as a hiearchical dictionary, but it
-provides methods to add/access/modify children by name,
-like a Composite.
+This class is same as a hiearchical dictionary, but it provides methods
+to add/access/modify children by name, like a Composite.
 
-Created Anand B Pillai     <abpillai@gmail.com>
+Created Anand B Pillai <abpillai@gmail.com>
 
 """
 __author__ = "Anand B Pillai"
@@ -18,8 +17,10 @@ __version__ = "0.2"
 
 
 def normalize(val):
-    """ Normalize a string so that it can be used as an attribute
-    to a Python object """
+    """Normalize a string so that it can be used as an attribute to a Python
+
+    object
+    """
 
     if val.find('-') != -1:
         val = val.replace('-', '_')
@@ -38,8 +39,7 @@ def denormalize(val):
 
 class SpecialDict(dict):
 
-    """ A dictionary type which allows direct attribute
-    access to its keys """
+    """A dictionary type which allows direct attribute access to its keys """
 
     def __getattr__(self, name):
 
@@ -127,11 +127,13 @@ class CompositeDict(SpecialDict):
         return not self._children
 
     def getName(self):
+        
         """ Return the name of this ConfigInfo object """
 
         return self._name
 
     def getIndex(self, child):
+        
         """ Return the index of the child ConfigInfo object 'child' """
 
         if child in self._children:
@@ -145,17 +147,17 @@ class CompositeDict(SpecialDict):
         return self[self._name]
 
     def getProperty(self, child, key):
-        """ Return the value for the property for child
-        'child' with key 'key' """
+        
+        """Return the value for the property for child 'child' with key 'key' """
 
         # First get the child's dictionary
         childDict = self.getInfoDict(child)
         if childDict:
             return childDict.get(key, None)
 
-    def setProperty(self, child, key, value):
-        """ Set the value for the property 'key' for
-        the child 'child' to 'value' """
+        def setProperty(self, child, key, value):
+            
+            """Set the value for the property 'key' for the child 'child' to 'value' """
 
         # First get the child's dictionary
         childDict = self.getInfoDict(child)
@@ -163,11 +165,13 @@ class CompositeDict(SpecialDict):
             childDict[key] = value
 
     def getChildren(self):
+        
         """ Return the list of immediate children of this object """
 
         return self._children
 
     def getAllChildren(self):
+        
         """ Return the list of all children of this object """
 
         l = []
@@ -178,6 +182,7 @@ class CompositeDict(SpecialDict):
         return l
 
     def getChild(self, name):
+        
         """ Return the immediate child object with the given name """
 
         for child in self._children:
@@ -185,6 +190,7 @@ class CompositeDict(SpecialDict):
                 return child
 
     def findChild(self, name):
+        
         """ Return the child with the given name from the tree """
 
         # Note - this returns the first child of the given name
@@ -196,6 +202,7 @@ class CompositeDict(SpecialDict):
                 return child
 
     def findChildren(self, name):
+        
         """ Return a list of children with the given name from the tree """
 
         # Note: this returns a list of all the children of a given
@@ -210,6 +217,7 @@ class CompositeDict(SpecialDict):
         return children
 
     def getPropertyDict(self):
+        
         """ Return the property dictionary """
 
         d = self.getChild('__properties')
@@ -219,6 +227,7 @@ class CompositeDict(SpecialDict):
             return {}
 
     def getParent(self):
+        
         """ Return the person who created me """
 
         return self._father

+ 0 - 37
iterator.py

@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-"""http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
-
-Implementation of the iterator pattern with a generator"""
-
-
-def count_to(count):
-    """Counts by word numbers, up to a maximum of five"""
-    numbers = ["one", "two", "three", "four", "five"]
-    # enumerate() returns a tuple containing a count (from start which
-    # defaults to 0) and the values obtained from iterating over sequence
-    for pos, number in zip(range(count), numbers):
-        yield number
-
-# Test the generator
-count_to_two = lambda: count_to(2)
-count_to_five = lambda: count_to(5)
-
-print('Counting to two...')
-for number in count_to_two():
-    print(number, end=' ')
-
-print()
-
-print('Counting to five...')
-for number in count_to_five():
-    print(number, end=' ')
-
-print()
-
-### OUTPUT ###
-# Counting to two...
-# one two
-# Counting to five...
-# one two three four five

+ 8 - 7
publish_subscribe.py

@@ -10,9 +10,8 @@ Author: https://github.com/HanWenfang
 class Provider:
 
     def __init__(self):
-        self.msg_queue = []
-        self.subscribers = {}
-
+        self.subscribe_queue = {}
+        self.msg_queue=[]
     def notify(self, msg):
         self.msg_queue.append(msg)
 
@@ -25,12 +24,14 @@ class Provider:
 
     def unsubscribe(self, msg, subscriber):
         self.subscribers[msg].remove(subscriber)
+        if !self.subscribe[msg]:
+            del self.subscribe[msg]
 
     def update(self):
         for msg in self.msg_queue:
-            if msg in self.subscribers:
-                for sub in self.subscribers[msg]:
-                    sub.run(msg)
+            if msg in self.subscribers.keys():
+                for suber in self.subscribers[msg]:
+                    suber.get(msg)
         self.msg_queue = []
 
 
@@ -52,7 +53,7 @@ class Subscriber:
     def subscribe(self, msg):
         self.provider.subscribe(msg, self)
 
-    def run(self, msg):
+    def get(self, msg):
         print("{} got {}".format(self.name, msg))