From: Sapan Bhatia Date: Wed, 2 Oct 2013 05:10:02 +0000 (-0400) Subject: Fixed issues in object dependencies X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ca2e21fd16bdad6fff95c44bfac87f31263056fd;p=plstackapi.git Fixed issues in object dependencies --- diff --git a/planetstack/observer/event_loop.py b/planetstack/observer/event_loop.py index 55f9a98..6dc34da 100644 --- a/planetstack/observer/event_loop.py +++ b/planetstack/observer/event_loop.py @@ -218,7 +218,14 @@ class PlanetStackObserver: sync_step = step(driver=self.driver) sync_step.__name__ = step.__name__ - #sync_step.dependencies = self.dependencies[sync_step.name] + sync_step.dependencies = [] + try: + mlist = sync_step.provides + + for m in mlist: + sync_step.dependencies.extend(self.model_dependency_graph[m.__name__]) + except KeyError: + pass sync_step.debug_mode = debug_mode should_run = False @@ -239,6 +246,8 @@ class PlanetStackObserver: duration=time.time() - start_time # ********* This is the actual sync step + import pdb + pdb.set_trace() failed_objects = sync_step(failed=failed_step_objects) diff --git a/planetstack/observer/syncstep.py b/planetstack/observer/syncstep.py index 0772b4c..4116d65 100644 --- a/planetstack/observer/syncstep.py +++ b/planetstack/observer/syncstep.py @@ -38,25 +38,27 @@ 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.lower()) - if (peer_object.pk==dep.pk): + if (peer_object.pk==failed.pk): raise DependencyFailed def call(self, failed=[]): pending = self.fetch_pending() for o in pending: try: - self.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: failed.append(o) + return failed def __call__(self, **args):