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
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):