Skip to content

Commit

Permalink
Merge pull request #16971 from lidizheng/surface-exceptions
Browse files Browse the repository at this point in the history
Surface exceptions from Cython to Python as much as possible
Fixed #16643
  • Loading branch information
lidizheng committed Dec 4, 2018
2 parents f8696b5 + 3adca9f commit c339ba3
Show file tree
Hide file tree
Showing 12 changed files with 62 additions and 59 deletions.
12 changes: 6 additions & 6 deletions src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd.pxi
Expand Up @@ -15,7 +15,7 @@

cdef class CallCredentials:

cdef grpc_call_credentials *c(self)
cdef grpc_call_credentials *c(self) except *

# TODO(https://github.com/grpc/grpc/issues/12531): remove.
cdef grpc_call_credentials *c_credentials
Expand All @@ -36,7 +36,7 @@ cdef class MetadataPluginCallCredentials(CallCredentials):
cdef readonly object _metadata_plugin
cdef readonly bytes _name

cdef grpc_call_credentials *c(self)
cdef grpc_call_credentials *c(self) except *


cdef grpc_call_credentials *_composition(call_credentialses)
Expand All @@ -46,12 +46,12 @@ cdef class CompositeCallCredentials(CallCredentials):

cdef readonly tuple _call_credentialses

cdef grpc_call_credentials *c(self)
cdef grpc_call_credentials *c(self) except *


cdef class ChannelCredentials:

cdef grpc_channel_credentials *c(self)
cdef grpc_channel_credentials *c(self) except *

# TODO(https://github.com/grpc/grpc/issues/12531): remove.
cdef grpc_channel_credentials *c_credentials
Expand All @@ -68,15 +68,15 @@ cdef class SSLChannelCredentials(ChannelCredentials):
cdef readonly object _private_key
cdef readonly object _certificate_chain

cdef grpc_channel_credentials *c(self)
cdef grpc_channel_credentials *c(self) except *


cdef class CompositeChannelCredentials(ChannelCredentials):

cdef readonly tuple _call_credentialses
cdef readonly ChannelCredentials _channel_credentials

cdef grpc_channel_credentials *c(self)
cdef grpc_channel_credentials *c(self) except *


cdef class ServerCertificateConfig:
Expand Down
12 changes: 6 additions & 6 deletions src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi
Expand Up @@ -35,7 +35,7 @@ def _spawn_callback_async(callback, args):

cdef class CallCredentials:

cdef grpc_call_credentials *c(self):
cdef grpc_call_credentials *c(self) except *:
raise NotImplementedError()


Expand Down Expand Up @@ -69,7 +69,7 @@ cdef class MetadataPluginCallCredentials(CallCredentials):
self._metadata_plugin = metadata_plugin
self._name = name

cdef grpc_call_credentials *c(self):
cdef grpc_call_credentials *c(self) except *:
cdef grpc_metadata_credentials_plugin c_metadata_plugin
c_metadata_plugin.get_metadata = _get_metadata
c_metadata_plugin.destroy = _destroy
Expand Down Expand Up @@ -101,13 +101,13 @@ cdef class CompositeCallCredentials(CallCredentials):
def __cinit__(self, call_credentialses):
self._call_credentialses = call_credentialses

cdef grpc_call_credentials *c(self):
cdef grpc_call_credentials *c(self) except *:
return _composition(self._call_credentialses)


cdef class ChannelCredentials:

cdef grpc_channel_credentials *c(self):
cdef grpc_channel_credentials *c(self) except *:
raise NotImplementedError()


Expand Down Expand Up @@ -135,7 +135,7 @@ cdef class SSLChannelCredentials(ChannelCredentials):
self._private_key = private_key
self._certificate_chain = certificate_chain

cdef grpc_channel_credentials *c(self):
cdef grpc_channel_credentials *c(self) except *:
cdef const char *c_pem_root_certificates
cdef grpc_ssl_pem_key_cert_pair c_pem_key_certificate_pair
if self._pem_root_certificates is None:
Expand Down Expand Up @@ -164,7 +164,7 @@ cdef class CompositeChannelCredentials(ChannelCredentials):
self._call_credentialses = call_credentialses
self._channel_credentials = channel_credentials

cdef grpc_channel_credentials *c(self):
cdef grpc_channel_credentials *c(self) except *:
cdef grpc_channel_credentials *c_channel_credentials
c_channel_credentials = self._channel_credentials.c()
cdef grpc_call_credentials *c_call_credentials_composition = _composition(
Expand Down
2 changes: 1 addition & 1 deletion src/python/grpcio/grpc/_cython/_cygrpc/grpc_gevent.pyx.pxi
Expand Up @@ -266,7 +266,7 @@ cdef grpc_error* socket_listen(grpc_custom_socket* socket) with gil:
(<SocketWrapper>socket.impl).socket.listen(50)
return grpc_error_none()

cdef void accept_callback_cython(SocketWrapper s):
cdef void accept_callback_cython(SocketWrapper s) except *:
try:
conn, address = s.socket.accept()
sw = SocketWrapper()
Expand Down
4 changes: 2 additions & 2 deletions src/python/grpcio/grpc/_cython/_cygrpc/metadata.pxd.pxi
Expand Up @@ -14,10 +14,10 @@


cdef void _store_c_metadata(
metadata, grpc_metadata **c_metadata, size_t *c_count)
metadata, grpc_metadata **c_metadata, size_t *c_count) except *


cdef void _release_c_metadata(grpc_metadata *c_metadata, int count)
cdef void _release_c_metadata(grpc_metadata *c_metadata, int count) except *


cdef tuple _metadatum(grpc_slice key_slice, grpc_slice value_slice)
Expand Down
4 changes: 2 additions & 2 deletions src/python/grpcio/grpc/_cython/_cygrpc/metadata.pyx.pxi
Expand Up @@ -25,7 +25,7 @@ _Metadatum = collections.namedtuple('_Metadatum', ('key', 'value',))


cdef void _store_c_metadata(
metadata, grpc_metadata **c_metadata, size_t *c_count):
metadata, grpc_metadata **c_metadata, size_t *c_count) except *:
if metadata is None:
c_count[0] = 0
c_metadata[0] = NULL
Expand All @@ -45,7 +45,7 @@ cdef void _store_c_metadata(
c_metadata[0][index].value = _slice_from_bytes(encoded_value)


cdef void _release_c_metadata(grpc_metadata *c_metadata, int count):
cdef void _release_c_metadata(grpc_metadata *c_metadata, int count) except *:
if 0 < count:
for index in range(count):
grpc_slice_unref(c_metadata[index].key)
Expand Down
36 changes: 18 additions & 18 deletions src/python/grpcio/grpc/_cython/_cygrpc/operation.pxd.pxi
Expand Up @@ -15,8 +15,8 @@

cdef class Operation:

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *

# TODO(https://github.com/grpc/grpc/issues/7950): Eliminate this!
cdef grpc_op c_op
Expand All @@ -29,8 +29,8 @@ cdef class SendInitialMetadataOperation(Operation):
cdef grpc_metadata *_c_initial_metadata
cdef size_t _c_initial_metadata_count

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class SendMessageOperation(Operation):
Expand All @@ -39,16 +39,16 @@ cdef class SendMessageOperation(Operation):
cdef readonly int _flags
cdef grpc_byte_buffer *_c_message_byte_buffer

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class SendCloseFromClientOperation(Operation):

cdef readonly int _flags

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class SendStatusFromServerOperation(Operation):
Expand All @@ -61,8 +61,8 @@ cdef class SendStatusFromServerOperation(Operation):
cdef size_t _c_trailing_metadata_count
cdef grpc_slice _c_details

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class ReceiveInitialMetadataOperation(Operation):
Expand All @@ -71,8 +71,8 @@ cdef class ReceiveInitialMetadataOperation(Operation):
cdef tuple _initial_metadata
cdef grpc_metadata_array _c_initial_metadata

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class ReceiveMessageOperation(Operation):
Expand All @@ -81,8 +81,8 @@ cdef class ReceiveMessageOperation(Operation):
cdef grpc_byte_buffer *_c_message_byte_buffer
cdef bytes _message

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class ReceiveStatusOnClientOperation(Operation):
Expand All @@ -97,8 +97,8 @@ cdef class ReceiveStatusOnClientOperation(Operation):
cdef str _details
cdef str _error_string

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *


cdef class ReceiveCloseOnServerOperation(Operation):
Expand All @@ -107,5 +107,5 @@ cdef class ReceiveCloseOnServerOperation(Operation):
cdef object _cancelled
cdef int _c_cancelled

cdef void c(self)
cdef void un_c(self)
cdef void c(self) except *
cdef void un_c(self) except *
36 changes: 18 additions & 18 deletions src/python/grpcio/grpc/_cython/_cygrpc/operation.pyx.pxi
Expand Up @@ -15,10 +15,10 @@

cdef class Operation:

cdef void c(self):
cdef void c(self) except *:
raise NotImplementedError()

cdef void un_c(self):
cdef void un_c(self) except *:
raise NotImplementedError()


Expand All @@ -31,7 +31,7 @@ cdef class SendInitialMetadataOperation(Operation):
def type(self):
return GRPC_OP_SEND_INITIAL_METADATA

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_SEND_INITIAL_METADATA
self.c_op.flags = self._flags
_store_c_metadata(
Expand All @@ -41,7 +41,7 @@ cdef class SendInitialMetadataOperation(Operation):
self.c_op.data.send_initial_metadata.count = self._c_initial_metadata_count
self.c_op.data.send_initial_metadata.maybe_compression_level.is_set = 0

cdef void un_c(self):
cdef void un_c(self) except *:
_release_c_metadata(
self._c_initial_metadata, self._c_initial_metadata_count)

Expand All @@ -55,7 +55,7 @@ cdef class SendMessageOperation(Operation):
def type(self):
return GRPC_OP_SEND_MESSAGE

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_SEND_MESSAGE
self.c_op.flags = self._flags
cdef grpc_slice message_slice = grpc_slice_from_copied_buffer(
Expand All @@ -65,7 +65,7 @@ cdef class SendMessageOperation(Operation):
grpc_slice_unref(message_slice)
self.c_op.data.send_message.send_message = self._c_message_byte_buffer

cdef void un_c(self):
cdef void un_c(self) except *:
grpc_byte_buffer_destroy(self._c_message_byte_buffer)


Expand All @@ -77,11 +77,11 @@ cdef class SendCloseFromClientOperation(Operation):
def type(self):
return GRPC_OP_SEND_CLOSE_FROM_CLIENT

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_SEND_CLOSE_FROM_CLIENT
self.c_op.flags = self._flags

cdef void un_c(self):
cdef void un_c(self) except *:
pass


Expand All @@ -96,7 +96,7 @@ cdef class SendStatusFromServerOperation(Operation):
def type(self):
return GRPC_OP_SEND_STATUS_FROM_SERVER

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_SEND_STATUS_FROM_SERVER
self.c_op.flags = self._flags
_store_c_metadata(
Expand All @@ -110,7 +110,7 @@ cdef class SendStatusFromServerOperation(Operation):
self._c_details = _slice_from_bytes(_encode(self._details))
self.c_op.data.send_status_from_server.status_details = &self._c_details

cdef void un_c(self):
cdef void un_c(self) except *:
grpc_slice_unref(self._c_details)
_release_c_metadata(
self._c_trailing_metadata, self._c_trailing_metadata_count)
Expand All @@ -124,14 +124,14 @@ cdef class ReceiveInitialMetadataOperation(Operation):
def type(self):
return GRPC_OP_RECV_INITIAL_METADATA

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_RECV_INITIAL_METADATA
self.c_op.flags = self._flags
grpc_metadata_array_init(&self._c_initial_metadata)
self.c_op.data.receive_initial_metadata.receive_initial_metadata = (
&self._c_initial_metadata)

cdef void un_c(self):
cdef void un_c(self) except *:
self._initial_metadata = _metadata(&self._c_initial_metadata)
grpc_metadata_array_destroy(&self._c_initial_metadata)

Expand All @@ -147,13 +147,13 @@ cdef class ReceiveMessageOperation(Operation):
def type(self):
return GRPC_OP_RECV_MESSAGE

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_RECV_MESSAGE
self.c_op.flags = self._flags
self.c_op.data.receive_message.receive_message = (
&self._c_message_byte_buffer)

cdef void un_c(self):
cdef void un_c(self) except *:
cdef grpc_byte_buffer_reader message_reader
cdef bint message_reader_status
cdef grpc_slice message_slice
Expand Down Expand Up @@ -189,7 +189,7 @@ cdef class ReceiveStatusOnClientOperation(Operation):
def type(self):
return GRPC_OP_RECV_STATUS_ON_CLIENT

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_RECV_STATUS_ON_CLIENT
self.c_op.flags = self._flags
grpc_metadata_array_init(&self._c_trailing_metadata)
Expand All @@ -202,7 +202,7 @@ cdef class ReceiveStatusOnClientOperation(Operation):
self.c_op.data.receive_status_on_client.error_string = (
&self._c_error_string)

cdef void un_c(self):
cdef void un_c(self) except *:
self._trailing_metadata = _metadata(&self._c_trailing_metadata)
grpc_metadata_array_destroy(&self._c_trailing_metadata)
self._code = self._c_code
Expand Down Expand Up @@ -235,12 +235,12 @@ cdef class ReceiveCloseOnServerOperation(Operation):
def type(self):
return GRPC_OP_RECV_CLOSE_ON_SERVER

cdef void c(self):
cdef void c(self) except *:
self.c_op.type = GRPC_OP_RECV_CLOSE_ON_SERVER
self.c_op.flags = self._flags
self.c_op.data.receive_close_on_server.cancelled = &self._c_cancelled

cdef void un_c(self):
cdef void un_c(self) except *:
self._cancelled = bool(self._c_cancelled)

def cancelled(self):
Expand Down

0 comments on commit c339ba3

Please sign in to comment.