SameerMesiah97 commented on code in PR #69128:
URL: https://github.com/apache/airflow/pull/69128#discussion_r3500784429


##########
providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py:
##########
@@ -394,7 +398,21 @@ def get_conn(self) -> RequestAdapter:
     @staticmethod
     def _is_http_client_closed(request_adapter: RequestAdapter) -> bool:
         """Return True when the underlying httpx AsyncClient has been 
closed."""
-        return cast("HttpxRequestAdapter", 
request_adapter)._http_client.is_closed
+        adapter = cast("HttpxRequestAdapter", request_adapter)
+
+        if adapter._http_client.is_closed:
+            return True
+
+        provider = cast("BaseBearerTokenAuthenticationProvider", 
adapter._authentication_provider)
+        access_token_provider = cast("AzureIdentityAccessTokenProvider", 
provider.access_token_provider)
+        credential = cast(
+            "ClientSecretCredential | CertificateCredential", 
access_token_provider._credentials
+        )

Review Comment:
   Are all of these casts needed to satisfy type-checking? Is there no way to 
avoid this by making the logic more explicit? 



##########
providers/microsoft/azure/tests/unit/microsoft/azure/hooks/test_msgraph.py:
##########


Review Comment:
   Have you considered adding a test for the fallback to `False` when 
`transport.session` is `None`? 



##########
providers/microsoft/azure/src/airflow/providers/microsoft/azure/hooks/msgraph.py:
##########
@@ -394,7 +398,21 @@ def get_conn(self) -> RequestAdapter:
     @staticmethod
     def _is_http_client_closed(request_adapter: RequestAdapter) -> bool:
         """Return True when the underlying httpx AsyncClient has been 
closed."""
-        return cast("HttpxRequestAdapter", 
request_adapter)._http_client.is_closed
+        adapter = cast("HttpxRequestAdapter", request_adapter)
+
+        if adapter._http_client.is_closed:
+            return True
+
+        provider = cast("BaseBearerTokenAuthenticationProvider", 
adapter._authentication_provider)
+        access_token_provider = cast("AzureIdentityAccessTokenProvider", 
provider.access_token_provider)
+        credential = cast(
+            "ClientSecretCredential | CertificateCredential", 
access_token_provider._credentials
+        )
+        transport = credential._client._pipeline._transport
+
+        if transport.session is not None:
+            return transport.session.closed
+        return False

Review Comment:
   As someone not too familiar with this hook, I have one question about 
defaulting to False (i.e. assuming the HTTP client is still open). If the 
transport cannot be found, does that not imply the client is no longer usable? 
In that case, would it be safer to rebuild the cached request adapter (or even 
fail by raising an error and logging) rather than continue reusing it?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to