diff options
author | Craig Tiller <ctiller@google.com> | 2017-09-29 11:18:26 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2017-09-29 11:18:26 -0700 |
commit | 1e868f0f9539925e51aa52269c848082d23b7c4e (patch) | |
tree | 49fd965a5f58e2605864df54a1d70621367eee36 /src/python | |
parent | 710334577ce1b2de94f656ec0762eeba6effd29b (diff) | |
parent | 903f06fe3f8b1b971f1b633dff45488ca68c6708 (diff) |
Merge github.com:grpc/grpc into flowctl+millis
Diffstat (limited to 'src/python')
7 files changed, 54 insertions, 40 deletions
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd.pxi index a0e69dd613..41975cbe9e 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pxd.pxi @@ -41,7 +41,8 @@ cdef class CredentialsMetadataPlugin: cdef object plugin_callback cdef bytes plugin_name - cdef grpc_metadata_credentials_plugin make_c_plugin(self) + +cdef grpc_metadata_credentials_plugin _c_plugin(CredentialsMetadataPlugin plugin) cdef class AuthMetadataContext: @@ -49,8 +50,11 @@ cdef class AuthMetadataContext: cdef grpc_auth_metadata_context context -cdef void plugin_get_metadata( +cdef int plugin_get_metadata( void *state, grpc_auth_metadata_context context, - grpc_credentials_plugin_metadata_cb cb, void *user_data) with gil + grpc_credentials_plugin_metadata_cb cb, void *user_data, + grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], + size_t *num_creds_md, grpc_status_code *status, + const char **error_details) with gil cdef void plugin_destroy_c_plugin_state(void *state) with gil diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi index 57816f1cab..0fabda19ce 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi @@ -14,6 +14,7 @@ cimport cpython +import threading import traceback @@ -89,20 +90,20 @@ cdef class CredentialsMetadataPlugin: self.plugin_callback = plugin_callback self.plugin_name = name - @staticmethod - cdef grpc_metadata_credentials_plugin make_c_plugin(self): - cdef grpc_metadata_credentials_plugin result - result.get_metadata = plugin_get_metadata - result.destroy = plugin_destroy_c_plugin_state - result.state = <void *>self - result.type = self.plugin_name - cpython.Py_INCREF(self) - return result - def __dealloc__(self): grpc_shutdown() +cdef grpc_metadata_credentials_plugin _c_plugin(CredentialsMetadataPlugin plugin): + cdef grpc_metadata_credentials_plugin c_plugin + c_plugin.get_metadata = plugin_get_metadata + c_plugin.destroy = plugin_destroy_c_plugin_state + c_plugin.state = <void *>plugin + c_plugin.type = plugin.plugin_name + cpython.Py_INCREF(plugin) + return c_plugin + + cdef class AuthMetadataContext: def __cinit__(self): @@ -122,9 +123,12 @@ cdef class AuthMetadataContext: grpc_shutdown() -cdef void plugin_get_metadata( +cdef int plugin_get_metadata( void *state, grpc_auth_metadata_context context, - grpc_credentials_plugin_metadata_cb cb, void *user_data) with gil: + grpc_credentials_plugin_metadata_cb cb, void *user_data, + grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], + size_t *num_creds_md, grpc_status_code *status, + const char **error_details) with gil: called_flag = [False] def python_callback( Metadata metadata, grpc_status_code status, @@ -134,12 +138,15 @@ cdef void plugin_get_metadata( cdef CredentialsMetadataPlugin self = <CredentialsMetadataPlugin>state cdef AuthMetadataContext cy_context = AuthMetadataContext() cy_context.context = context - try: - self.plugin_callback(cy_context, python_callback) - except Exception as error: - if not called_flag[0]: - cb(user_data, NULL, 0, StatusCode.unknown, - traceback.format_exc().encode()) + def async_callback(): + try: + self.plugin_callback(cy_context, python_callback) + except Exception as error: + if not called_flag[0]: + cb(user_data, NULL, 0, StatusCode.unknown, + traceback.format_exc().encode()) + threading.Thread(group=None, target=async_callback).start() + return 0 # Asynchronous return cdef void plugin_destroy_c_plugin_state(void *state) with gil: cpython.Py_DECREF(<CredentialsMetadataPlugin>state) @@ -239,7 +246,7 @@ def call_credentials_google_iam(authorization_token, authority_selector): def call_credentials_metadata_plugin(CredentialsMetadataPlugin plugin): cdef CallCredentials credentials = CallCredentials() - cdef grpc_metadata_credentials_plugin c_plugin = plugin.make_c_plugin() + cdef grpc_metadata_credentials_plugin c_plugin = _c_plugin(plugin) with nogil: credentials.c_credentials = ( grpc_metadata_credentials_create_from_plugin(c_plugin, NULL)) diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi index 840af5c43a..f115106e60 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxi @@ -375,6 +375,10 @@ cdef extern from "grpc/grpc.h": cdef extern from "grpc/grpc_security.h": + # Declare this as an enum, this is the only way to make it a const in + # cython + enum: GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX + ctypedef enum grpc_ssl_roots_override_result: GRPC_SSL_ROOTS_OVERRIDE_OK GRPC_SSL_ROOTS_OVERRIDE_FAILED_PERMANENTLY @@ -462,9 +466,12 @@ cdef extern from "grpc/grpc_security.h": grpc_status_code status, const char *error_details) ctypedef struct grpc_metadata_credentials_plugin: - void (*get_metadata)( + int (*get_metadata)( void *state, grpc_auth_metadata_context context, - grpc_credentials_plugin_metadata_cb cb, void *user_data) + grpc_credentials_plugin_metadata_cb cb, void *user_data, + grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX], + size_t *num_creds_md, grpc_status_code *status, + const char **error_details) void (*destroy)(void *state) void *state const char *type diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi index d860173b5d..4f87261e17 100644 --- a/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi +++ b/src/python/grpcio/grpc/_cython/_cygrpc/records.pyx.pxi @@ -171,14 +171,6 @@ cdef class Timespec: gpr_convert_clock_type(self.c_time, GPR_CLOCK_REALTIME)) return <double>real_time.seconds + <double>real_time.nanoseconds / 1e9 - @staticmethod - def infinite_future(): - return Timespec(float("+inf")) - - @staticmethod - def infinite_past(): - return Timespec(float("-inf")) - def __richcmp__(Timespec self not None, Timespec other not None, int op): cdef gpr_timespec self_c_time = self.c_time cdef gpr_timespec other_c_time = other.c_time @@ -454,7 +446,7 @@ cdef class _MetadataIterator: self.i = self.i + 1 return result else: - raise StopIteration + raise StopIteration() # TODO(https://github.com/grpc/grpc/issues/7950): Eliminate this; just use an @@ -518,7 +510,7 @@ cdef class MetadataArray: def __getitem__(self, size_t i): if i >= self.c_metadata_array.count: - raise IndexError + raise IndexError() key = _slice_bytes(self.c_metadata_array.metadata[i].key) value = _slice_bytes(self.c_metadata_array.metadata[i].value) return Metadatum(key=key, value=value) @@ -720,7 +712,7 @@ cdef class _OperationsIterator: self.i = self.i + 1 return result else: - raise StopIteration + raise StopIteration() cdef class Operations: diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 859584a413..8795e59409 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -72,6 +72,8 @@ CORE_SOURCE_FILES = [ 'src/core/lib/compression/compression.c', 'src/core/lib/compression/message_compress.c', 'src/core/lib/compression/stream_compression.c', + 'src/core/lib/compression/stream_compression_gzip.c', + 'src/core/lib/compression/stream_compression_identity.c', 'src/core/lib/debug/stats.c', 'src/core/lib/debug/stats_data.c', 'src/core/lib/http/format_request.c', diff --git a/src/python/grpcio/support.py b/src/python/grpcio/support.py index 510bf422a0..f2395eb26c 100644 --- a/src/python/grpcio/support.py +++ b/src/python/grpcio/support.py @@ -94,7 +94,7 @@ def diagnose_attribute_error(build_ext, error): _ERROR_DIAGNOSES = { errors.CompileError: diagnose_compile_error, - AttributeError: diagnose_attribute_error + AttributeError: diagnose_attribute_error, } @@ -102,8 +102,10 @@ def diagnose_build_ext_error(build_ext, error, formatted): diagnostic = _ERROR_DIAGNOSES.get(type(error)) if diagnostic is None: raise commands.CommandError( - "\n\nWe could not diagnose your build failure. Please file an issue at " - "http://www.github.com/grpc/grpc with `[Python install]` in the title." - "\n\n{}".format(formatted)) + "\n\nWe could not diagnose your build failure. If you are unable to " + "proceed, please file an issue at http://www.github.com/grpc/grpc " + "with `[Python install]` in the title; please attach the whole log " + "(including everything that may have appeared above the Python " + "backtrace).\n\n{}".format(formatted)) else: diagnostic(build_ext, error) diff --git a/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py b/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py index 9f72b1fcb5..6faab94be6 100644 --- a/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py +++ b/src/python/grpcio_tests/tests/unit/_metadata_code_details_test.py @@ -29,7 +29,7 @@ _SERIALIZED_RESPONSE = b'\x49\x50\x51' _REQUEST_SERIALIZER = lambda unused_request: _SERIALIZED_REQUEST _REQUEST_DESERIALIZER = lambda unused_serialized_request: object() _RESPONSE_SERIALIZER = lambda unused_response: _SERIALIZED_RESPONSE -_RESPONSE_DESERIALIZER = lambda unused_serialized_resopnse: object() +_RESPONSE_DESERIALIZER = lambda unused_serialized_response: object() _SERVICE = 'test.TestService' _UNARY_UNARY = 'UnaryUnary' |