Imported Upstream version 1.21.0
[platform/upstream/grpc.git] / src / python / grpcio / grpc / _cython / _cygrpc / records.pyx.pxi
1 # Copyright 2015 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15
16 cdef bytes _slice_bytes(grpc_slice slice):
17   cdef void *start = grpc_slice_start_ptr(slice)
18   cdef size_t length = grpc_slice_length(slice)
19   return (<const char *>start)[:length]
20
21 cdef grpc_slice _copy_slice(grpc_slice slice) nogil:
22   cdef void *start = grpc_slice_start_ptr(slice)
23   cdef size_t length = grpc_slice_length(slice)
24   return grpc_slice_from_copied_buffer(<const char *>start, length)
25
26 cdef grpc_slice _slice_from_bytes(bytes value) nogil:
27   cdef const char *value_ptr
28   cdef size_t length
29   with gil:
30     value_ptr = <const char *>value
31     length = len(value)
32   return grpc_slice_from_copied_buffer(value_ptr, length)
33
34
35 class ConnectivityState:
36   idle = GRPC_CHANNEL_IDLE
37   connecting = GRPC_CHANNEL_CONNECTING
38   ready = GRPC_CHANNEL_READY
39   transient_failure = GRPC_CHANNEL_TRANSIENT_FAILURE
40   shutdown = GRPC_CHANNEL_SHUTDOWN
41
42
43 class ChannelArgKey:
44   enable_census = GRPC_ARG_ENABLE_CENSUS
45   max_concurrent_streams = GRPC_ARG_MAX_CONCURRENT_STREAMS
46   max_receive_message_length = GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH
47   max_send_message_length = GRPC_ARG_MAX_SEND_MESSAGE_LENGTH
48   http2_initial_sequence_number = GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER
49   default_authority = GRPC_ARG_DEFAULT_AUTHORITY
50   primary_user_agent_string = GRPC_ARG_PRIMARY_USER_AGENT_STRING
51   secondary_user_agent_string = GRPC_ARG_SECONDARY_USER_AGENT_STRING
52   ssl_session_cache = GRPC_SSL_SESSION_CACHE_ARG
53   ssl_target_name_override = GRPC_SSL_TARGET_NAME_OVERRIDE_ARG
54
55
56 class WriteFlag:
57   buffer_hint = GRPC_WRITE_BUFFER_HINT
58   no_compress = GRPC_WRITE_NO_COMPRESS
59
60
61 class StatusCode:
62   ok = GRPC_STATUS_OK
63   cancelled = GRPC_STATUS_CANCELLED
64   unknown = GRPC_STATUS_UNKNOWN
65   invalid_argument = GRPC_STATUS_INVALID_ARGUMENT
66   deadline_exceeded = GRPC_STATUS_DEADLINE_EXCEEDED
67   not_found = GRPC_STATUS_NOT_FOUND
68   already_exists = GRPC_STATUS_ALREADY_EXISTS
69   permission_denied = GRPC_STATUS_PERMISSION_DENIED
70   unauthenticated = GRPC_STATUS_UNAUTHENTICATED
71   resource_exhausted = GRPC_STATUS_RESOURCE_EXHAUSTED
72   failed_precondition = GRPC_STATUS_FAILED_PRECONDITION
73   aborted = GRPC_STATUS_ABORTED
74   out_of_range = GRPC_STATUS_OUT_OF_RANGE
75   unimplemented = GRPC_STATUS_UNIMPLEMENTED
76   internal = GRPC_STATUS_INTERNAL
77   unavailable = GRPC_STATUS_UNAVAILABLE
78   data_loss = GRPC_STATUS_DATA_LOSS
79
80
81 class CallError:
82   ok = GRPC_CALL_OK
83   error = GRPC_CALL_ERROR
84   not_on_server = GRPC_CALL_ERROR_NOT_ON_SERVER
85   not_on_client = GRPC_CALL_ERROR_NOT_ON_CLIENT
86   already_accepted = GRPC_CALL_ERROR_ALREADY_ACCEPTED
87   already_invoked = GRPC_CALL_ERROR_ALREADY_INVOKED
88   not_invoked = GRPC_CALL_ERROR_NOT_INVOKED
89   already_finished = GRPC_CALL_ERROR_ALREADY_FINISHED
90   too_many_operations = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS
91   invalid_flags = GRPC_CALL_ERROR_INVALID_FLAGS
92   invalid_metadata = GRPC_CALL_ERROR_INVALID_METADATA
93
94
95 class CompletionType:
96   queue_shutdown = GRPC_QUEUE_SHUTDOWN
97   queue_timeout = GRPC_QUEUE_TIMEOUT
98   operation_complete = GRPC_OP_COMPLETE
99
100
101 class OperationType:
102   send_initial_metadata = GRPC_OP_SEND_INITIAL_METADATA
103   send_message = GRPC_OP_SEND_MESSAGE
104   send_close_from_client = GRPC_OP_SEND_CLOSE_FROM_CLIENT
105   send_status_from_server = GRPC_OP_SEND_STATUS_FROM_SERVER
106   receive_initial_metadata = GRPC_OP_RECV_INITIAL_METADATA
107   receive_message = GRPC_OP_RECV_MESSAGE
108   receive_status_on_client = GRPC_OP_RECV_STATUS_ON_CLIENT
109   receive_close_on_server = GRPC_OP_RECV_CLOSE_ON_SERVER
110
111 GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM= (
112   _GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM)
113
114 GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY = (
115   _GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY)
116
117 class CompressionAlgorithm:
118   none = GRPC_COMPRESS_NONE
119   deflate = GRPC_COMPRESS_DEFLATE
120   gzip = GRPC_COMPRESS_GZIP
121
122
123 class CompressionLevel:
124   none = GRPC_COMPRESS_LEVEL_NONE
125   low = GRPC_COMPRESS_LEVEL_LOW
126   medium = GRPC_COMPRESS_LEVEL_MED
127   high = GRPC_COMPRESS_LEVEL_HIGH
128
129
130 cdef class CallDetails:
131
132   def __cinit__(self):
133     fork_handlers_and_grpc_init()
134     with nogil:
135       grpc_call_details_init(&self.c_details)
136
137   def __dealloc__(self):
138     with nogil:
139       grpc_call_details_destroy(&self.c_details)
140     grpc_shutdown_blocking()
141
142   @property
143   def method(self):
144     return _slice_bytes(self.c_details.method)
145
146   @property
147   def host(self):
148     return _slice_bytes(self.c_details.host)
149
150   @property
151   def deadline(self):
152     return _time_from_timespec(self.c_details.deadline)
153
154
155 cdef class SslPemKeyCertPair:
156
157   def __cinit__(self, bytes private_key, bytes certificate_chain):
158     self.private_key = private_key
159     self.certificate_chain = certificate_chain
160     self.c_pair.private_key = self.private_key
161     self.c_pair.certificate_chain = self.certificate_chain
162
163
164 cdef class CompressionOptions:
165
166   def __cinit__(self):
167     with nogil:
168       grpc_compression_options_init(&self.c_options)
169
170   def enable_algorithm(self, grpc_compression_algorithm algorithm):
171     with nogil:
172       grpc_compression_options_enable_algorithm(&self.c_options, algorithm)
173
174   def disable_algorithm(self, grpc_compression_algorithm algorithm):
175     with nogil:
176       grpc_compression_options_disable_algorithm(&self.c_options, algorithm)
177
178   def is_algorithm_enabled(self, grpc_compression_algorithm algorithm):
179     cdef int result
180     with nogil:
181       result = grpc_compression_options_is_algorithm_enabled(
182           &self.c_options, algorithm)
183     return result
184
185   def to_channel_arg(self):
186     return (
187         GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
188         self.c_options.enabled_algorithms_bitset,
189     )
190
191
192 def compression_algorithm_name(grpc_compression_algorithm algorithm):
193   cdef const char* name
194   with nogil:
195     grpc_compression_algorithm_name(algorithm, &name)
196   # Let Cython do the right thing with string casting
197   return name