Esempio n. 1
0
    def unwindGenerator(*args, **kwargs):
        try:
            gen = f(*args, **kwargs)
        except defer._DefGen_Return as e:
            return Chainable(defer.succeed(e.value))

        if not isinstance(gen, types.GeneratorType):
            return Chainable(defer.succeed(gen))

        d = defer._inlineCallbacks(None, gen, defer.Deferred())
        return Chainable(d)
Esempio n. 2
0
 def unwindGenerator(*args, **kwargs):
     try:
         gen = f(*args, **kwargs)
     except _DefGen_Return:
         raise TypeError(
             "webMethod requires %r to produce a generator; instead"
             "caught returnValue being used in a non-generator" % (f, ))
     if not isinstance(gen, types.GeneratorType):
         raise TypeError("webMethod requires %r to produce a generator; "
                         "instead got %r" % (f, gen))
     return _inlineCallbacks(None, Generator(gen), Deferred())
     f._without_request = True
Esempio n. 3
0
 def unwindGenerator(*args, **kwargs):
     try:
         gen = f(*args, **kwargs)
     except _DefGen_Return:
         raise TypeError(
             "webMethod requires %r to produce a generator; instead"
             "caught returnValue being used in a non-generator" % (f,))
     if not isinstance(gen, types.GeneratorType):
         raise TypeError(
             "webMethod requires %r to produce a generator; "
             "instead got %r" % (f, gen))
     return _inlineCallbacks(None, Generator(gen), Deferred())
     f._without_request = True
Esempio n. 4
0
 def _(*args, **kwargs):
     res = callable(*args, **kwargs)
     if isinstance(res, types.GeneratorType):
         res = _inlineCallbacks(None, res, Deferred())
     if isinstance(res, Deferred):
         future = Future()
         res.addCallbacks(
             future.set_result,
             lambda failure: future.set_exception(failure.value))
         future._deferred = res
         return future
     else:
         raise TypeError(
             "Callable %r should return a generator or a twisted Deferred"
             % callable)
Esempio n. 5
0
 def _(*args, **kwargs):
     res = callable(*args, **kwargs)
     if isinstance(res, types.GeneratorType):
         res = _inlineCallbacks(None, res, Deferred())
     if isinstance(res, Deferred):
         future = Future()
         res.addCallbacks(
             future.set_result,
             lambda failure: future.set_exception(failure.value))
         future._deferred = res
         return future
     else:
         raise TypeError(
             "Callable %r should return a generator or a twisted Deferred" %
             callable)
Esempio n. 6
0
    def execute(self, request, signed_claims):
        if not signed_claims:
            return_value(
                APIResult(error='Remote procedure was called without claims'))

        from mdstudio.component.impl.common import CommonSession

        claims = yield super(CommonSession, self.instance).call(
            u'mdstudio.auth.endpoint.verify', signed_claims)

        claim_errors = self.validate_claims(claims, request)
        if claim_errors:
            return_value(claim_errors)

        request_errors = self.validate_request(request)
        if request_errors:
            return_value(request_errors)

        result = self.call_wrapped(request, claims['claims'])
        if isinstance(result, GeneratorType):
            result = _inlineCallbacks(None, result, Deferred())
        result = yield result

        result = result if isinstance(result, APIResult) else APIResult(result)
        convert_obj_to_json(result)

        if 'error' in result:
            return_value(result)

        result_errors = self.validate_result(result.data)
        if result_errors:
            return_value(result_errors)

        if 'error' in result:
            return_value(result)

        result_errors = self.validate_result(result.data)
        if result_errors:
            return_value(result_errors)

        return_value(result)
Esempio n. 7
0
File: util.py Progetto: njoyce/rtmpy
def inlineCallbacks(f):
    from twisted.internet import defer
    from twisted.python.util import mergeFunctionMetadata


    def unwindGenerator(*args, **kwargs):
        deferred = defer.Deferred()

        try:
            result = f(*args, **kwargs)
        except Exception, e:
            deferred.errback(e)

            return deferred

        if isinstance(result, types.GeneratorType):
            return defer._inlineCallbacks(None, result, deferred)

        deferred.callback(result)

        return deferred
Esempio n. 8
0
 def unwindGenerator(*args, **kwargs):
     gen = f(*args, **kwargs)
     rt, rettype = gen.send(None)
     defr = _inlineCallbacks(None, pc_wrapper(rt, gen), Deferred())
     defr.addCallback(lambda v: reconcile(rettype, v))
     return ncopy(rettype)