Rename capnp.lib.capnp.Promise to capnp.lib.capnp._Promise.

This is to prevent aliasing with capnp.includes.capnp_cpp.Promise. This
aliasing is problematic if capnp/lib/capnp.pxd uses the template definition
from capnp.includes.capnp_cpp.Promise.

Signed-off-by: Keith Rothman <537074+litghost@users.noreply.github.com>
This commit is contained in:
Keith Rothman
2020-02-28 16:47:41 -08:00
parent 970d443911
commit 20d6c4eef7
2 changed files with 27 additions and 26 deletions

View File

@@ -51,6 +51,7 @@ from .lib.capnp import (
_StructModule, _StructModule,
_write_message_to_fd, _write_message_to_fd,
_write_packed_message_to_fd, _write_packed_message_to_fd,
_Promise as Promise,
) )
add_import_hook() # enable import hook by default add_import_hook() # enable import hook by default

View File

@@ -73,8 +73,8 @@ cdef public VoidPromise * call_server_method(PyObject * _server, char * _method_
if ret is not None: if ret is not None:
if type(ret) is _VoidPromise: if type(ret) is _VoidPromise:
return new VoidPromise(moveVoidPromise(deref((<_VoidPromise>ret).thisptr))) return new VoidPromise(moveVoidPromise(deref((<_VoidPromise>ret).thisptr)))
elif type(ret) is Promise: elif type(ret) is _Promise:
return new VoidPromise(helpers.convert_to_voidpromise(deref((<Promise>ret).thisptr))) return new VoidPromise(helpers.convert_to_voidpromise(deref((<_Promise>ret).thisptr)))
else: else:
try: try:
warning_msg = 'Server function (%s) returned a value that was not a Promise: return = %s' % (method_name, str(ret)) warning_msg = 'Server function (%s) returned a value that was not a Promise: return = %s' % (method_name, str(ret))
@@ -83,10 +83,10 @@ cdef public VoidPromise * call_server_method(PyObject * _server, char * _method_
_warnings.warn_explicit(warning_msg, UserWarning, _inspect.getsourcefile(func), _inspect.getsourcelines(func)[1]) _warnings.warn_explicit(warning_msg, UserWarning, _inspect.getsourcefile(func), _inspect.getsourcelines(func)[1])
if ret is not None: if ret is not None:
if type(ret) is Promise: if type(ret) is _Promise:
return new VoidPromise(helpers.convert_to_voidpromise(deref((<Promise>ret).thisptr))) return new VoidPromise(helpers.convert_to_voidpromise(deref((<_Promise>ret).thisptr)))
elif type(ret) is Promise: elif type(ret) is _Promise:
return new VoidPromise(helpers.convert_to_voidpromise(deref((<Promise>ret).thisptr))) return new VoidPromise(helpers.convert_to_voidpromise(deref((<_Promise>ret).thisptr)))
else: else:
try: try:
warning_msg = 'Server function (%s) returned a value that was not a Promise: return = %s' % (method_name, str(ret)) warning_msg = 'Server function (%s) returned a value that was not a Promise: return = %s' % (method_name, str(ret))
@@ -103,8 +103,8 @@ cdef public VoidPromise * call_server_method(PyObject * _server, char * _method_
if ret is not None: if ret is not None:
if type(ret) is _VoidPromise: if type(ret) is _VoidPromise:
return new VoidPromise(moveVoidPromise(deref((<_VoidPromise>ret).thisptr))) return new VoidPromise(moveVoidPromise(deref((<_VoidPromise>ret).thisptr)))
elif type(ret) is Promise: elif type(ret) is _Promise:
return new VoidPromise(helpers.convert_to_voidpromise(deref((<Promise>ret).thisptr))) return new VoidPromise(helpers.convert_to_voidpromise(deref((<_Promise>ret).thisptr)))
if not isinstance(ret, tuple): if not isinstance(ret, tuple):
ret = (ret,) ret = (ret,)
names = _find_field_order(context.results.schema.node.struct) names = _find_field_order(context.results.schema.node.struct)
@@ -121,8 +121,8 @@ cdef public convert_array_pyobject(PyArray & arr) with gil:
return [<object>arr[i] for i in range(arr.size())] return [<object>arr[i] for i in range(arr.size())]
cdef public PyPromise * extract_promise(object obj) with gil: cdef public PyPromise * extract_promise(object obj) with gil:
if type(obj) is Promise: if type(obj) is _Promise:
promise = <Promise>obj promise = <_Promise>obj
ret = new PyPromise(promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>promise))) ret = new PyPromise(promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>promise)))
Py_DECREF(obj) Py_DECREF(obj)
@@ -271,7 +271,7 @@ ctypedef fused _DynamicSetterClasses:
DynamicStruct_Builder DynamicStruct_Builder
ctypedef fused PromiseTypes: ctypedef fused PromiseTypes:
Promise _Promise
_RemotePromise _RemotePromise
_VoidPromise _VoidPromise
PromiseFulfillerPair PromiseFulfillerPair
@@ -1766,7 +1766,7 @@ cdef class _CallContext:
promise.is_consumed = True promise.is_consumed = True
return promise return promise
cdef class Promise: cdef class _Promise:
cdef PyPromise * thisptr cdef PyPromise * thisptr
cdef public bint is_consumed cdef public bint is_consumed
cdef public object _parent, _obj cdef public object _parent, _obj
@@ -1818,14 +1818,14 @@ cdef class Promise:
if args_length - defaults_length != 1: if args_length - defaults_length != 1:
raise KjException('Function passed to `then` call must take exactly one argument') raise KjException('Function passed to `then` call must take exactly one argument')
cdef Promise new_promise = Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self) cdef _Promise new_promise = _Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self)
return Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise) return _Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise)
def attach(self, *args): def attach(self, *args):
if self.is_consumed: if self.is_consumed:
raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object') raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object')
ret = Promise()._init(self.thisptr.attach(capnp.makePyRefCounter(<PyObject *>args)), self) ret = _Promise()._init(self.thisptr.attach(capnp.makePyRefCounter(<PyObject *>args)), self)
self.is_consumed = True self.is_consumed = True
return ret return ret
@@ -1881,13 +1881,13 @@ cdef class _VoidPromise:
if args_length - defaults_length != 0: if args_length - defaults_length != 0:
raise KjException('Function passed to `then` call must take no arguments') raise KjException('Function passed to `then` call must take no arguments')
cdef Promise new_promise = Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self) cdef _Promise new_promise = _Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self)
return Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise) return _Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise)
cpdef as_pypromise(self) except +reraise_kj_exception: cpdef as_pypromise(self) except +reraise_kj_exception:
if self.is_consumed: if self.is_consumed:
raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object') raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object')
return Promise()._init(helpers.convert_to_pypromise(deref(self.thisptr)), self) return _Promise()._init(helpers.convert_to_pypromise(deref(self.thisptr)), self)
def attach(self, *args): def attach(self, *args):
if self.is_consumed: if self.is_consumed:
@@ -1950,7 +1950,7 @@ cdef class _RemotePromise:
cpdef as_pypromise(self) except +reraise_kj_exception: cpdef as_pypromise(self) except +reraise_kj_exception:
if self.is_consumed: if self.is_consumed:
raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object') raise KjException('Promise was already used in a consuming operation. You can no longer use this Promise object')
return Promise()._init(helpers.convert_to_pypromise(deref(self.thisptr)), self) return _Promise()._init(helpers.convert_to_pypromise(deref(self.thisptr)), self)
cpdef then(self, func, error_func=None) except +reraise_kj_exception: cpdef then(self, func, error_func=None) except +reraise_kj_exception:
if self.is_consumed: if self.is_consumed:
@@ -1967,8 +1967,8 @@ cdef class _RemotePromise:
if args_length - defaults_length != 1: if args_length - defaults_length != 1:
raise KjException('Function passed to `then` call must take exactly one argument') raise KjException('Function passed to `then` call must take exactly one argument')
cdef Promise new_promise = Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self) cdef _Promise new_promise = _Promise()._init(helpers.then(deref(self.thisptr), <PyObject *>func, <PyObject *>error_func), self)
return Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise) return _Promise()._init(new_promise.thisptr.attach(capnp.makePyRefCounter(<PyObject *>func), capnp.makePyRefCounter(<PyObject *>error_func)), new_promise)
cpdef _get(self, field) except +reraise_kj_exception: cpdef _get(self, field) except +reraise_kj_exception:
cdef int type = (<C_DynamicValue.Pipeline>self.thisptr.get(field)).getType() cdef int type = (<C_DynamicValue.Pipeline>self.thisptr.get(field)).getType()
@@ -2023,17 +2023,17 @@ cpdef join_promises(promises) except +reraise_kj_exception:
for promise in promises: for promise in promises:
promise_type = type(promise) promise_type = type(promise)
if promise_type is Promise: if promise_type is _Promise:
pyPromise = <Promise>promise pyPromise = <_Promise>promise
elif promise_type is _RemotePromise or promise_type is _VoidPromise: elif promise_type is _RemotePromise or promise_type is _VoidPromise:
pyPromise = <Promise>promise.as_pypromise() pyPromise = <_Promise>promise.as_pypromise()
new_promises_append(pyPromise) new_promises_append(pyPromise)
else: else:
raise KjException('One of the promises passed to `join_promises` had a non promise value of: ' + str(promise)) raise KjException('One of the promises passed to `join_promises` had a non promise value of: ' + str(promise))
heap.add(movePromise(deref(pyPromise.thisptr))) heap.add(movePromise(deref(pyPromise.thisptr)))
pyPromise.is_consumed = True pyPromise.is_consumed = True
return Promise()._init(helpers.then(capnp.joinPromises(heap.finish()))) return _Promise()._init(helpers.then(capnp.joinPromises(heap.finish())))
cdef class _Request(_DynamicStructBuilder): cdef class _Request(_DynamicStructBuilder):
cdef Request * thisptr_child cdef Request * thisptr_child
@@ -2390,7 +2390,7 @@ cdef class TwoPartyServer:
self._bootstrap = bootstrap self._bootstrap = bootstrap
Py_INCREF(self._bootstrap) Py_INCREF(self._bootstrap)
schema = bootstrap.schema schema = bootstrap.schema
self.port_promise = Promise()._init(helpers.connectServer(deref(self._task_set), helpers.server_to_client(schema.thisptr, <PyObject *>bootstrap), loop.thisptr, temp_string, opts)) self.port_promise = _Promise()._init(helpers.connectServer(deref(self._task_set), helpers.server_to_client(schema.thisptr, <PyObject *>bootstrap), loop.thisptr, temp_string, opts))
def _decref(self): def _decref(self):
Py_DECREF(self._bootstrap) Py_DECREF(self._bootstrap)