From 3edc83044e1abc4f3ebd18527ef170d16d745b82 Mon Sep 17 00:00:00 2001 From: bigeagle Date: Mon, 20 Oct 2014 22:51:38 +0800 Subject: [PATCH] status hook fixed --- tunasync.py | 43 +++++++++++++++++++++++++++++++++++-------- tunasync/jobs.py | 5 ++--- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/tunasync.py b/tunasync.py index f0620f7..ceb22d0 100644 --- a/tunasync.py +++ b/tunasync.py @@ -15,27 +15,54 @@ class IndexPageHook(JobHook): self.parent = parent self.dbfile = dbfile - self.mirrors = {} + @property + def mirrors(self): + mirrors = {} try: with open(self.dbfile) as f: _mirrors = json.load(f) for m in _mirrors: - self.mirrors[m["name"]] = m + mirrors[m["name"]] = m except: for name, _ in self.parent.mirrors.iteritems(): - self.mirrors[name] = { + mirrors[name] = { 'name': name, 'last_update': '-', 'status': 'unknown', } + return mirrors - def before_job(self, *args, **kwargs): - pass + def before_job(self, name=None, *args, **kwargs): + if name is None: + return + mirrors = self.mirrors + _m = mirrors.get(name, { + 'name': name, + 'last_update': '-', + 'status': '-', + }) + + mirrors[name] = { + 'name': name, + 'last_update': _m['last_update'], + 'status': 'syncing' + } + with open(self.dbfile, 'wb') as f: + _mirrors = sorted( + [m for _, m in mirrors.items()], + key=lambda x: x['name'] + ) + + json.dump(_mirrors, f) + + def after_job(self, name=None, status="unknown", *args, **kwargs): + if name is None: + return - def after_job(self, name='unknown', status="unknown", *args, **kwargs): print("Updating tunasync.json") now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - self.mirrors[name] = { + mirrors = self.mirrors + mirrors[name] = { 'name': name, 'last_update': now, 'status': status @@ -43,7 +70,7 @@ class IndexPageHook(JobHook): with open(self.dbfile, 'wb') as f: _mirrors = sorted( - [m for _, m in self.mirrors.items()], + [m for _, m in mirrors.items()], key=lambda x: x['name'] ) diff --git a/tunasync/jobs.py b/tunasync/jobs.py index 159818b..74bc283 100644 --- a/tunasync/jobs.py +++ b/tunasync/jobs.py @@ -27,16 +27,15 @@ def run_job(sema, child_q, manager_q, provider): print("start syncing {}".format(provider.name)) for hook in provider.hooks: - hook.before_job() + hook.before_job(name=provider.name) provider.run() + status = "success" try: provider.wait() except sh.ErrorReturnCode: status = "fail" - else: - status = "success" for hook in provider.hooks[::-1]: try: