Przeglądaj źródła

job exception handling

bigeagle 11 lat temu
rodzic
commit
54e6d5b34a
1 zmienionych plików z 25 dodań i 18 usunięć
  1. 25 18
      tunasync/jobs.py

+ 25 - 18
tunasync/jobs.py

@@ -28,28 +28,35 @@ def run_job(sema, child_q, manager_q, provider, **settings):
             break
         aquired = True
 
-        for hook in provider.hooks:
-            hook.before_job(name=provider.name)
-
-        for retry in range(max_retry):
-            print("start syncing {}, retry: {}".format(provider.name, retry))
-            provider.run()
+        status = "unkown"
+        try:
+            for hook in provider.hooks:
+                hook.before_job(name=provider.name)
+        except Exception:
+            import traceback
+            traceback.print_exc()
+            status = "fail"
+        else:
+            for retry in range(max_retry):
+                print("start syncing {}, retry: {}".format(provider.name, retry))
+                provider.run()
 
-            status = "success"
-            try:
-                provider.wait()
-            except sh.ErrorReturnCode:
-                status = "fail"
+                status = "success"
+                try:
+                    provider.wait()
+                except sh.ErrorReturnCode:
+                    status = "fail"
 
-            if status == "success":
-                break
+                if status == "success":
+                    break
 
-        for hook in provider.hooks[::-1]:
-            try:
+        try:
+            for hook in provider.hooks[::-1]:
                 hook.after_job(name=provider.name, status=status)
-            except Exception:
-                import traceback
-                traceback.print_exc()
+        except Exception:
+            import traceback
+            traceback.print_exc()
+            status = "fail"
 
         sema.release()
         aquired = False