From c66a630a502a5e118d8773b32820aca861ce32cd Mon Sep 17 00:00:00 2001 From: mkaay Date: Wed, 22 Dec 2010 23:44:33 +0100 Subject: new download backend integrated so far, downloading works, but still big todo list --- module/network/helper.py | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) (limited to 'module/network/helper.py') diff --git a/module/network/helper.py b/module/network/helper.py index 8cc61d3ff..ed9a88798 100644 --- a/module/network/helper.py +++ b/module/network/helper.py @@ -24,6 +24,7 @@ class Deferred(): def __init__(self): self.call = [] self.err = [] + self.prgr = {} self.result = () self.errresult = () @@ -35,6 +36,13 @@ class Deferred(): kwargs.update(ckwargs) callInThread(f, *args, **kwargs) + #test not in use + def addProgress(self, chain, f): + if self.prgr.has_key(chain): + self.prgr[chain].append(f) + else: + self.prgr[chain] = [f] + def addErrback(self, f, *cargs, **ckwargs): self.err.append((f, cargs, ckwargs)) if self.errresult: @@ -58,6 +66,13 @@ class Deferred(): args+=tuple(cargs) kwargs.update(ckwargs) callInThread(f, *args, **kwargs) + + #test not in use + def progress(self, chain, *args, **kwargs): + if not self.prgr.has_key(chain): + return + for f in self.prgr[chain]: + callInThread(f, *args, **kwargs) #decorator def threaded(f): @@ -71,12 +86,17 @@ def waitFor(d): args = () err = None + def __init__(self, d): + self.d = d + def wait(self): - d.addCallback(self.callb) - d.addErrback(self.errb) + self.d.addCallback(self.callb) + self.d.addErrback(self.errb) while self.waiting: sleep(0.5) if self.err: + if issubclass(self.err[0][0], Exception): + raise self.err[0][0]() raise Exception(self.err) return self.args @@ -87,7 +107,7 @@ def waitFor(d): def errb(self, *args, **kwargs): self.waiting = False self.err = (args, kwargs) - w = Waiter() + w = Waiter(d) return w.wait() class DeferredGroup(Deferred): @@ -110,16 +130,25 @@ class DeferredGroup(Deferred): if len(self.group) == self.done: self.callback() -class WrappedDeferred(): +class WrappedDeferred(object): def __init__(self, download, d): - self.download = download - self.d = d + self.__dict__["download"] = download + self.__dict__["d"] = d def addCallback(self, *args, **kwargs): - self.d.addCallback(*args, **kwargs) + self.__dict__["d"].addCallback(*args, **kwargs) def addErrback(self, *args, **kwargs): - self.d.addErrback(*args, **kwargs) + self.__dict__["d"].addErrback(*args, **kwargs) + + def callback(self, *args, **kwargs): + self.__dict__["d"].callback(*args, **kwargs) + + def error(self, *args, **kwargs): + self.__dict__["d"].error(*args, **kwargs) def __getattr__(self, attr): return getattr(self.download, attr) + + def __setattr__(self, attr, val): + return setattr(self.download, attr, val) -- cgit v1.2.3