implement default dict here so we can get sfa to build for python 2.4 (needed for...
authorTony Mack <tmack@cs.princeton.edu>
Wed, 9 Jun 2010 20:19:25 +0000 (20:19 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Wed, 9 Jun 2010 20:19:25 +0000 (20:19 +0000)
sfa/plc/api.py

index 0f5cb01..f9a3902 100644 (file)
@@ -21,7 +21,47 @@ from sfa.util.namespace import *
 from sfa.util.api import *
 from sfa.util.nodemanager import NodeManager
 from sfa.util.sfalogging import *
-from collections import defaultdict
+try:
+    from collections import defaultdict
+except:
+    class defaultdict(dict):
+        def __init__(self, default_factory=None, *a, **kw):
+            if (default_factory is not None and
+                not hasattr(default_factory, '__call__')):
+                raise TypeError('first argument must be callable')
+            dict.__init__(self, *a, **kw)
+            self.default_factory = default_factory
+        def __getitem__(self, key):
+            try:
+                return dict.__getitem__(self, key)
+            except KeyError:
+                return self.__missing__(key)
+        def __missing__(self, key):
+            if self.default_factory is None:
+                raise KeyError(key)
+            self[key] = value = self.default_factory()
+            return value
+        def __reduce__(self):
+            if self.default_factory is None:
+                args = tuple()
+            else:
+                args = self.default_factory,
+            return type(self), args, None, None, self.items()
+        def copy(self):
+            return self.__copy__()
+        def __copy__(self):
+            return type(self)(self.default_factory, self)
+        def __deepcopy__(self, memo):
+            import copy
+            return type(self)(self.default_factory,
+                              copy.deepcopy(self.items()))
+        def __repr__(self):
+            return 'defaultdict(%s, %s)' % (self.default_factory,
+                                            dict.__repr__(self))
+
+
+## end of http://code.activestate.com/recipes/523034/ }}}
+
 
 def list_to_dict(recs, key):
     """