def testRunWithRpcs(self):
   record = []
   def foo(arg):
     record.append(arg)
   eventloop.queue_call(0.1, foo, 42)
   config = datastore_rpc.Configuration(on_completion=foo)
   rpc = self.conn.async_get(config, [])
   self.assertEqual(len(rpc.rpcs), 1)
   eventloop.queue_rpc(rpc)
   eventloop.run()
   self.assertEqual(record, [rpc.rpcs[0], 42])
   self.assertEqual(rpc.state, 2)  # TODO: Use apiproxy_rpc.RPC.FINISHING.
Esempio n. 2
0
    def testRunWithRpcs(self):
        record = []

        def foo(arg):
            record.append(arg)

        eventloop.queue_call(0.1, foo, 42)
        config = datastore_rpc.Configuration(on_completion=foo)
        rpc = self.conn.async_get(config, [])
        self.assertEqual(len(rpc.rpcs), 1)
        eventloop.queue_rpc(rpc)
        eventloop.run()
        self.assertEqual(record, [rpc.rpcs[0], 42])
        self.assertEqual(rpc.state, 2)  # TODO: Use apiproxy_rpc.RPC.FINISHING.
Esempio n. 3
0
 def testRunWithRpcs(self):
   apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap()
   stub = datastore_file_stub.DatastoreFileStub('_', None)
   apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub)
   record = []
   def foo(arg):
     record.append(arg)
   eventloop.queue_call(0.1, foo, 42)
   conn = datastore_rpc.Connection()
   config = datastore_rpc.Configuration(on_completion=foo)
   rpc = conn.async_get(config, [])
   self.assertEqual(len(rpc.rpcs), 1)
   eventloop.queue_rpc(rpc)
   eventloop.run()
   self.assertEqual(record, [rpc.rpcs[0], 42])
   self.assertEqual(rpc.state, 2)  # TODO: Use apiproxy_rpc.RPC.FINISHING.
Esempio n. 4
0
                      exc_info=(logging.getLogger().level <= logging.INFO))
      self.set_exception(err, tb)
      return

    else:
      logging.debug('%s yielded %r', info, value)
      if isinstance(value, datastore_rpc.MultiRpc):
        # TODO: Tail recursion if the RPC is already complete.
        if len(value.rpcs) == 1:
          value = value.rpcs[0]
          # Fall through to next isinstance test.
        else:
          assert False  # TODO: Support MultiRpc using MultiFuture.
      if isinstance(value, UserRPC):
        # TODO: Tail recursion if the RPC is already complete.
        eventloop.queue_rpc(value, self._on_rpc_completion, value, gen)
        return
      if isinstance(value, Future):
        # TODO: Tail recursion if the Future is already done.
        assert not self._next, self._next
        self._next = value
        self._geninfo = utils.gen_info(gen)
        logging.debug('%s is now blocked waiting for %s', self, value)
        value.add_callback(self._on_future_completion, value, gen)
        return
      if isinstance(value, (tuple, list)):
        # Arrange for yield to return a list of results (not Futures).
        info = 'multi-yield from ' + utils.gen_info(gen)
        mfut = MultiFuture(info)
        for subfuture in value:
          mfut.add_dependent(subfuture)