changes from alpha site
[plstackapi.git] / planetstack / observer / syncstep.py
index 0cdcf13..c41628a 100644 (file)
@@ -1,6 +1,10 @@
 import os
 import base64
+from datetime import datetime
 from planetstack.config import Config
+from util.logger import Logger, logging
+
+logger = Logger(level=logging.INFO)
 
 class FailedDependency(Exception):
     pass
@@ -37,25 +41,29 @@ class SyncStep:
         return
 
     def fetch_pending(self):
-        #return Sliver.objects.filter(ip=None)
         return []
+        #return Sliver.objects.filter(ip=None)
     
-    def check_dependencies(self, obj):
+    def check_dependencies(self, obj, failed):
         for dep in self.dependencies:
-            peer_object = getattr(obj, dep.name.lowercase())
-            if (peer_object.pk==dep.pk):
-                raise DependencyFailed
+            peer_name = dep[0].lower() + dep[1:]    # django names are camelCased with the first letter lower
+            peer_object = getattr(obj, peer_name)
+            if (peer_object.pk==failed.pk):
+                raise FailedDependency
 
     def call(self, failed=[]):
         pending = self.fetch_pending()
         for o in pending:
             try:
-                check_dependencies(o) # Raises exception if failed                    
+                for f in failed:
+                    self.check_dependencies(o,f) # Raises exception if failed
                 self.sync_record(o)
                 o.enacted = datetime.now() # Is this the same timezone? XXX
                 o.save(update_fields=['enacted'])
             except:
+                logger.log_exc("sync step %s failed!" % self.__name__)
                 failed.append(o)
+
         return failed
 
     def __call__(self, **args):