18 from typing
import Any, Dict, List, Optional, Tuple
20 from google.rpc
import code_pb2
25 logger = logging.getLogger(__name__)
31 @dataclasses.dataclass(frozen=
True)
36 traffic_port_selector: dict
37 endpoint_matcher: dict
40 http_filters: Optional[dict] =
None
41 server_tls_policy: Optional[str] =
None
45 Any]) ->
'EndpointPolicy':
48 type=response[
'type'],
49 server_tls_policy=response.get(
'serverTlsPolicy',
None),
50 traffic_port_selector=response[
'trafficPortSelector'],
51 endpoint_matcher=response[
'endpointMatcher'],
52 http_filters=response.get(
'httpFilters',
None),
53 update_time=response[
'updateTime'],
54 create_time=response[
'createTime'])
57 @dataclasses.dataclass(frozen=
True)
62 routes: Optional[List[str]]
69 routes=list(d[
"routes"])
if "routes" in d
else None,
73 @dataclasses.dataclass(frozen=
True)
76 @dataclasses.dataclass(frozen=
True)
79 grpc_service: Optional[str]
80 grpc_method: Optional[str]
81 case_sensitive: Optional[bool]
87 grpc_service=d.get(
"grpcService"),
88 grpc_method=d.get(
"grpcMethod"),
89 case_sensitive=d.get(
"caseSensitive"),
92 @dataclasses.dataclass(frozen=
True)
106 @dataclasses.dataclass(frozen=
True)
108 method: Optional[
'GrpcRoute.MethodMatch']
109 headers: Tuple[
'GrpcRoute.HeaderMatch']
114 method=GrpcRoute.MethodMatch.from_response(d[
"method"])
115 if "method" in d
else None,
117 GrpcRoute.HeaderMatch.from_response(h)
118 for h
in d[
"headers"])
if "headers" in d
else (),
121 @dataclasses.dataclass(frozen=
True)
124 weight: Optional[int]
129 service_name=d[
"serviceName"],
130 weight=d.get(
"weight"),
133 @dataclasses.dataclass(frozen=
True)
139 GrpcRoute.Destination.from_response(dest)
140 for dest
in d[
"destinations"]
141 ]
if "destinations" in d
else []
142 return cls(destinations=destinations)
144 @dataclasses.dataclass(frozen=
True)
146 matches: List[
'GrpcRoute.RouteMatch']
147 action:
'GrpcRoute.RouteAction'
152 GrpcRoute.RouteMatch.from_response(m)
for m
in d[
"matches"]
153 ]
if "matches" in d
else []
156 action=GrpcRoute.RouteAction.from_response(d[
"action"]),
161 hostnames: Tuple[str]
162 rules: Tuple[
'GrpcRoute.RouteRule']
163 meshes: Optional[Tuple[str]]
167 Any]) ->
'GrpcRoute.RouteRule':
171 hostnames=tuple(d[
"hostnames"]),
172 rules=tuple(d[
"rules"]),
173 meshes=
None if d.get(
"meshes")
is None else tuple(d[
"meshes"]),
178 metaclass=abc.ABCMeta):
179 """Base class for NetworkServices APIs."""
191 return 'networkservices'
196 retryer = tenacity.Retrying(
198 wait=tenacity.wait_fixed(10),
199 stop=tenacity.stop_after_delay(5 * 60),
200 before_sleep=tenacity.before_sleep_log(logger, logging.DEBUG),
202 retryer(super()._execute, *args, **kwargs)
207 exception.error.code == code_pb2.INTERNAL)
211 """NetworkServices API v1beta1."""
212 ENDPOINT_POLICIES =
'endpointPolicies'
222 endpointPolicyId=name)
228 return EndpointPolicy.from_response(name, response)
237 """NetworkServices API v1alpha1.
239 Note: extending v1beta1 class presumes that v1beta1 is just a v1alpha1 API
240 graduated into a more stable version. This is true in most cases. However,
241 v1alpha1 class can always override and reimplement incompatible methods.
244 GRPC_ROUTES =
'grpcRoutes'
260 return Mesh.from_response(name, result)
277 return GrpcRoute.from_response(name, result)