Jelajahi Sumber

Revert "edit the publish_subscribe.py"

This reverts commit fee070271088ca2fd08fcb10ecf1dba8f86b51ff.
Sakis Kasampalis 11 tahun lalu
induk
melakukan
c10a94e5db
3 mengubah file dengan 57 tambahan dan 30 penghapusan
  1. 13 22
      composite.py
  2. 37 0
      iterator.py
  3. 7 8
      publish_subscribe.py

+ 13 - 22
composite.py

@@ -5,10 +5,11 @@
 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"
@@ -17,10 +18,8 @@ __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('-', '_')
@@ -39,7 +38,8 @@ 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,13 +127,11 @@ 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:
@@ -147,17 +145,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)
@@ -165,13 +163,11 @@ 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 = []
@@ -182,7 +178,6 @@ class CompositeDict(SpecialDict):
         return l
 
     def getChild(self, name):
-        
         """ Return the immediate child object with the given name """
 
         for child in self._children:
@@ -190,7 +185,6 @@ 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
@@ -202,7 +196,6 @@ 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
@@ -217,7 +210,6 @@ class CompositeDict(SpecialDict):
         return children
 
     def getPropertyDict(self):
-        
         """ Return the property dictionary """
 
         d = self.getChild('__properties')
@@ -227,7 +219,6 @@ class CompositeDict(SpecialDict):
             return {}
 
     def getParent(self):
-        
         """ Return the person who created me """
 
         return self._father

+ 37 - 0
iterator.py

@@ -0,0 +1,37 @@
+#!/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

+ 7 - 8
publish_subscribe.py

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