44from datetime import datetime
55
66import grpc
7+ from six .moves .urllib .parse import urlparse
78
89from yandex .cloud .iam .v1 .iam_token_service_pb2 import CreateIamTokenRequest
910from yandex .cloud .iam .v1 .iam_token_service_pb2_grpc import IamTokenServiceStub
1213
1314
1415class Credentials (grpc .AuthMetadataPlugin ):
15- def __init__ (self , oauth_token , channel ):
16+ def __init__ (self , oauth_token , lazy_channel ):
1617 self ._oauth_token = oauth_token
17- self ._client = IamTokenServiceStub (channel )
18+ self ._lazy_channel = lazy_channel
19+ self ._channel = None
1820 self ._cached_iam_token = None
1921 self ._iam_token_timestamp = None
2022
@@ -25,13 +27,17 @@ def __call__(self, context, callback):
2527 callback (None , exception )
2628
2729 def _call (self , context , callback ):
28- if context .service_url == '/yandex.cloud.iam.v1.IamTokenService' or \
29- context .service_url == '/yandex.cloud.endpoint.ApiEndpointService' :
30+ u = urlparse (context .service_url )
31+ if u .path == '/yandex.cloud.iam.v1.IamTokenService' or \
32+ u .path == '/yandex.cloud.endpoint.ApiEndpointService' :
3033 callback (None , None )
3134 return
3235
36+ if not self ._channel :
37+ self ._channel = self ._lazy_channel ()
38+
3339 if self ._cached_iam_token is None or not self ._fresh ():
34- token_future = self ._client .Create .future (CreateIamTokenRequest (
40+ token_future = IamTokenServiceStub ( self ._channel ) .Create .future (CreateIamTokenRequest (
3541 yandex_passport_oauth_token = self ._oauth_token ))
3642 token_future .add_done_callback (self .create_done_callback (callback ))
3743 return
0 commit comments