Skip to content

Commit a1e2d61

Browse files
committed
fix: address code review comments for lazy imports
1 parent 94ba2c2 commit a1e2d61

3 files changed

Lines changed: 23 additions & 11 deletions

File tree

packages/google-auth/google/auth/transport/grpc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
__lazy_modules__: Set[str] = {"grpc"}
4343

4444

45+
# Inheriting from object instead of grpc.AuthMetadataPlugin is intentional.
46+
# This prevents eagerly loading grpc at module import time, preserving lazy loading support.
4547
class AuthMetadataPlugin(object):
4648
"""A `gRPC AuthMetadataPlugin`_ that inserts the credentials into each
4749
request.

packages/google-auth/google/auth/transport/requests.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
import time
2424
from typing import Optional, Set
2525

26-
try:
27-
import requests
28-
except ImportError as caught_exc: # pragma: NO COVER
26+
import importlib.util
27+
28+
if importlib.util.find_spec("requests") is None:
2929
raise ImportError(
30-
"The requests library is not installed from please install the requests package to use the requests transport."
31-
) from caught_exc
30+
"The requests library is not installed, please install the requests package to use the requests transport."
31+
)
32+
33+
import requests
3234
import requests.adapters # pylint: disable=ungrouped-imports
3335
import requests.exceptions # pylint: disable=ungrouped-imports
3436
from requests.packages.urllib3.util.ssl_ import ( # type: ignore

packages/google-auth/google/auth/transport/urllib3.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,18 +299,26 @@ def my_cert_callback():
299299
"""
300300

301301
_encode_url_methods = {"DELETE", "GET", "HEAD", "OPTIONS"}
302+
_request_methods_class = None
302303

303304
def __getattr__(self, name):
304305
if name in ("request", "request_encode_url", "request_encode_body"):
305306
import types
306307

307-
if version.parse(urllib3.__version__) >= version.parse("2.0.0"):
308-
rm = urllib3._request_methods.RequestMethods
309-
else:
310-
rm = urllib3.request.RequestMethods
308+
if AuthorizedHttp._request_methods_class is None:
309+
if version.parse(urllib3.__version__) >= version.parse("2.0.0"):
310+
AuthorizedHttp._request_methods_class = (
311+
urllib3._request_methods.RequestMethods
312+
)
313+
else:
314+
AuthorizedHttp._request_methods_class = (
315+
urllib3.request.RequestMethods
316+
)
311317

312-
method = getattr(rm, name)
313-
return types.MethodType(method, self)
318+
method = getattr(AuthorizedHttp._request_methods_class, name)
319+
bound_method = types.MethodType(method, self)
320+
setattr(self, name, bound_method)
321+
return bound_method
314322

315323
raise AttributeError(
316324
f"'{self.__class__.__name__}' object has no attribute '{name}'"

0 commit comments

Comments
 (0)