class GConnection(Async): def __init__(self, *args, **kwargs): """ This class is a 'GEvent'-optimized subclass of libcouchbase which utilizes the underlying IOPS structures and the gevent event primitives to efficiently utilize couroutine switching. """ super(GConnection, self).__init__(IOPS(), *args, **kwargs) def _do_ctor_connect(self): if self.connected: return self._connect() self._evconn = AsyncResult() self._conncb = self._on_connected self._evconn.get() self._evconn = None def _on_connected(self, err): if err: self._evconn.set_exception(err) else: self._evconn.set(None) def _waitwrap(self, cbasync): cur_thread = getcurrent() cbasync.callback = cur_thread.switch cbasync.errback = lambda r, x, y, z: cur_thread.throw(x, y, z) return get_hub().switch() def _meth_factory(meth, name): def ret(self, *args, **kwargs): return self._waitwrap(meth(self, *args, **kwargs)) return ret def _http_request(self, **kwargs): res = super(GConnection, self)._http_request(**kwargs) if kwargs.get('chunked', False): return res #views e = Event() res._callback = lambda x, y: e.set() e.wait() res._maybe_raise() return res def query(self, *args, **kwargs): kwargs['itercls'] = GView ret = super(GConnection, self).query(*args, **kwargs) ret.start() return ret locals().update(Async._gen_memd_wrappers(_meth_factory))