def _adaptDictValue(d, k, v): if admifaces.IAdminInterface.providedBy(k): raise ValueError("IAdminInterface is not supported for dictonary keys") a = adapt(v) if defer.isDeferred(a): return a.addCallback(_addDictValue, d, k) d[k] = a return d
def process(self): try: result = self._doProcessing() if defer.isDeferred(result): result.addCallbacks(defer.dropResult, self._targetFailed, callbackArgs=(self._targetDone,)) return result else: self._targetDone() return defer.succeed(self) except: f = Failure() self._targetFailed(f) return defer.fail(f)
def adapt(value): if value is None: return None if isinstance(value, (list, tuple)): d = defer.succeed(list()) for v in value: d.addCallback(_adaptListValue, v) return d if isinstance(value, dict): d = defer.succeed(dict()) for k, v in value.items(): d.addCallback(_adaptDictValue, k, v) return d if defer.isDeferred(value): return value.addCallback(adapt) if admifaces.IAdminInterface.providedBy(value): return mediums.IServerMedium(value) return value
def _adaptListValue(l, v): a = adapt(v) if defer.isDeferred(a): return a.addCallback(_appendListValue, l) l.append(a) return l