Coverage for /builds/BuildGrid/buildgrid/buildgrid/server/client/interceptors.py: 96.23%
53 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-10-04 17:48 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-10-04 17:48 +0000
1# Copyright (C) 2019 Bloomberg LP
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.
16from typing import Any, Protocol
18import grpc
19from grpc import aio
22class InterceptorFunc(Protocol):
23 def amend_call_details( # type: ignore[no-untyped-def]
24 self, client_call_details, grpc_call_details_class: Any
25 ) -> Any: ...
28class SyncUnaryUnaryInterceptor(grpc.UnaryUnaryClientInterceptor): # type: ignore[type-arg]
29 def __init__(self, func: InterceptorFunc):
30 self.func = func
32 def intercept_unary_unary(self, continuation, client_call_details, request): # type: ignore[no-untyped-def]
33 new_details = self.func.amend_call_details(client_call_details, grpc.ClientCallDetails)
34 return continuation(new_details, request)
37class SyncUnaryStreamInterceptor(grpc.UnaryStreamClientInterceptor): # type: ignore[type-arg]
38 def __init__(self, func: InterceptorFunc):
39 self.func = func
41 def intercept_unary_stream(self, continuation, client_call_details, request): # type: ignore[no-untyped-def]
42 new_details = self.func.amend_call_details(client_call_details, grpc.ClientCallDetails)
43 return continuation(new_details, request)
46class SyncStreamUnaryInterceptor(grpc.StreamUnaryClientInterceptor): # type: ignore[type-arg]
47 def __init__(self, func: InterceptorFunc):
48 self.func = func
50 def intercept_stream_unary( # type: ignore[no-untyped-def]
51 self, continuation, client_call_details, request_iterator
52 ):
53 new_details = self.func.amend_call_details(client_call_details, grpc.ClientCallDetails)
54 return continuation(new_details, request_iterator)
57class SyncStreamStreamInterceptor(grpc.StreamStreamClientInterceptor): # type: ignore[type-arg]
58 def __init__(self, func: InterceptorFunc):
59 self.func = func
61 def intercept_stream_stream( # type: ignore[no-untyped-def]
62 self, continuation, client_call_details, request_iterator
63 ):
64 new_details = self.func.amend_call_details(client_call_details, grpc.ClientCallDetails)
65 return continuation(new_details, request_iterator)
68class AsyncUnaryUnaryInterceptor(aio.UnaryUnaryClientInterceptor): # type: ignore[type-arg]
69 def __init__(self, func: InterceptorFunc):
70 self.func = func
72 async def intercept_unary_unary(self, continuation, client_call_details, request): # type: ignore[no-untyped-def]
73 new_details = self.func.amend_call_details(client_call_details, aio.ClientCallDetails)
74 return await continuation(new_details, request)
77class AsyncUnaryStreamInterceptor(aio.UnaryStreamClientInterceptor): # type: ignore[type-arg]
78 def __init__(self, func: InterceptorFunc):
79 self.func = func
81 async def intercept_unary_stream(self, continuation, client_call_details, request): # type: ignore[no-untyped-def]
82 new_details = self.func.amend_call_details(client_call_details, aio.ClientCallDetails)
83 return await continuation(new_details, request)
86class AsyncStreamUnaryInterceptor(aio.StreamUnaryClientInterceptor): # type: ignore[type-arg]
87 def __init__(self, func: InterceptorFunc):
88 self.func = func
90 async def intercept_stream_unary( # type: ignore[no-untyped-def]
91 self, continuation, client_call_details, request_iterator
92 ):
93 new_details = self.func.amend_call_details(client_call_details, aio.ClientCallDetails)
94 return await continuation(new_details, request_iterator)
97class AsyncStreamStreamInterceptor(aio.StreamStreamClientInterceptor): # type: ignore[type-arg]
98 def __init__(self, func: InterceptorFunc):
99 self.func = func
101 async def intercept_stream_stream( # type: ignore[no-untyped-def]
102 self, continuation, client_call_details, request_iterator
103 ):
104 new_details = self.func.amend_call_details(client_call_details, aio.ClientCallDetails)
105 return await continuation(new_details, request_iterator)