From e64ceec2c654555c8baeb83ce0afc439ae0f8a00 Mon Sep 17 00:00:00 2001 From: Stephen Rosen Date: Mon, 21 Oct 2024 12:00:20 -0500 Subject: [PATCH] Update to be compatible with SDK 3.46+ --- .../endpoint/user_credential/create/s3.py | 2 +- src/globus_cli/commands/flows/run/resume.py | 17 +++++------------ src/globus_cli/commands/timer/resume.py | 17 +++++------------ src/globus_cli/login_manager/manager.py | 15 +++------------ src/globus_cli/services/transfer/client.py | 2 +- tests/conftest.py | 7 +------ .../groups/test_group_set_policies.py | 10 ++++++---- 7 files changed, 22 insertions(+), 48 deletions(-) diff --git a/src/globus_cli/commands/endpoint/user_credential/create/s3.py b/src/globus_cli/commands/endpoint/user_credential/create/s3.py index 930f6c1b8..c3adc3da9 100644 --- a/src/globus_cli/commands/endpoint/user_credential/create/s3.py +++ b/src/globus_cli/commands/endpoint/user_credential/create/s3.py @@ -35,7 +35,7 @@ def s3( gcs_client = login_manager.get_gcs_client(endpoint_id=endpoint_id) auth_client = login_manager.get_auth_client() - # TODO: replace with SDK class once available + # TODO: replace with SDK class if one becomes available policies = { "DATA_TYPE": "s3_user_credential_policies#1.0.0", "s3_key_id": s3_key_id, diff --git a/src/globus_cli/commands/flows/run/resume.py b/src/globus_cli/commands/flows/run/resume.py index 9885b45bd..9f099d3f1 100644 --- a/src/globus_cli/commands/flows/run/resume.py +++ b/src/globus_cli/commands/flows/run/resume.py @@ -16,9 +16,7 @@ # NB: GARE parsing requires other SDK components and therefore needs to be deferred to # avoid the performance impact of non-lazy imports if t.TYPE_CHECKING: - from globus_sdk.experimental.auth_requirements_error import ( - GlobusAuthRequirementsError, - ) + from globus_sdk.gare import GARE @command("resume") @@ -66,7 +64,7 @@ def resume_command( def check_inactive_reason( login_manager: LoginManager, run_id: uuid.UUID, - gare: GlobusAuthRequirementsError | None, + gare: GARE | None, ) -> None: if gare is None: return @@ -109,13 +107,8 @@ def check_inactive_reason( def _get_inactive_reason( run_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse -) -> GlobusAuthRequirementsError | None: - try: - from globus_sdk.gare import to_gare # type: ignore[import-not-found] - except ImportError: - from globus_sdk.experimental.auth_requirements_error import ( - to_auth_requirements_error as to_gare, - ) +) -> GARE | None: + from globus_sdk.gare import to_gare if not run_doc.get("status") == "INACTIVE": return None @@ -124,7 +117,7 @@ def _get_inactive_reason( if not isinstance(details, dict): return None - return to_gare(details) # type: ignore[no-any-return] + return to_gare(details) def _has_required_consent( diff --git a/src/globus_cli/commands/timer/resume.py b/src/globus_cli/commands/timer/resume.py index 02f487d0f..04b47dfbf 100644 --- a/src/globus_cli/commands/timer/resume.py +++ b/src/globus_cli/commands/timer/resume.py @@ -16,9 +16,7 @@ # NB: GARE parsing requires other SDK components and therefore needs to be deferred to # avoid the performance impact of non-lazy imports if t.TYPE_CHECKING: - from globus_sdk.experimental.auth_requirements_error import ( - GlobusAuthRequirementsError, - ) + from globus_sdk.gare import GARE @command("resume", short_help="Resume a timer.") @@ -59,7 +57,7 @@ def resume_command( def check_inactive_reason( login_manager: LoginManager, timer_id: uuid.UUID, - gare: GlobusAuthRequirementsError | None, + gare: GARE | None, ) -> None: if gare is None: return @@ -102,13 +100,8 @@ def check_inactive_reason( def _get_inactive_reason( timer_doc: dict[str, t.Any] | globus_sdk.GlobusHTTPResponse -) -> GlobusAuthRequirementsError | None: - try: - from globus_sdk.gare import to_gare # type: ignore[import-not-found] - except ImportError: - from globus_sdk.experimental.auth_requirements_error import ( - to_auth_requirements_error as to_gare, - ) +) -> GARE | None: + from globus_sdk.gare import to_gare if timer_doc.get("status") != "inactive": return None @@ -117,7 +110,7 @@ def _get_inactive_reason( if reason.get("cause") != "globus_auth_requirements": return None - return to_gare(reason.get("detail", {})) # type: ignore[no-any-return] + return to_gare(reason.get("detail", {})) def _has_required_consent( diff --git a/src/globus_cli/login_manager/manager.py b/src/globus_cli/login_manager/manager.py index 81587c31e..5e9124f09 100644 --- a/src/globus_cli/login_manager/manager.py +++ b/src/globus_cli/login_manager/manager.py @@ -18,14 +18,7 @@ TimersScopes, TransferScopes, ) - -# TODO: remove this after an SDK release provides scopes.consents -try: - from globus_sdk.scopes.consents import ( # type: ignore[import-not-found] - ConsentForest, - ) -except ImportError: - from globus_sdk.experimental.consents import ConsentForest +from globus_sdk.scopes.consents import ConsentForest from globus_cli.endpointish import Endpointish, EntityType from globus_cli.types import ServiceNameLiteral @@ -183,9 +176,7 @@ def _tokens_meet_nonstatic_requirements( else: # If there are dependent scopes all required scope paths are present in the # user's cached consent forest. - return ( # type: ignore[no-any-return] - self._cached_consent_forest.meets_scope_requirements(required_scopes) - ) + return self._cached_consent_forest.meets_scope_requirements(required_scopes) @property @functools.lru_cache(maxsize=1) # noqa: B019 @@ -304,7 +295,7 @@ def wrapper(*args: P.args, **kwargs: P.kwargs) -> R: def _get_client_authorizer( self, resource_server: str, *, no_tokens_msg: str | None = None - ) -> globus_sdk.authorizers.RenewingAuthorizer: + ) -> globus_sdk.ClientCredentialsAuthorizer | globus_sdk.RefreshTokenAuthorizer: tokens = self._token_storage.get_token_data(resource_server) if is_client_login(): diff --git a/src/globus_cli/services/transfer/client.py b/src/globus_cli/services/transfer/client.py index 65d0ee9d6..e50187f3f 100644 --- a/src/globus_cli/services/transfer/client.py +++ b/src/globus_cli/services/transfer/client.py @@ -47,7 +47,7 @@ class CustomTransferClient(globus_sdk.TransferClient): def __init__( self, *, - authorizer: globus_sdk.GlobusAuthorizer, + authorizer: globus_sdk.authorizers.GlobusAuthorizer, app_name: str, ) -> None: super().__init__(authorizer=authorizer, app_name=app_name) diff --git a/tests/conftest.py b/tests/conftest.py index ba98b9418..30ec9ee23 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -14,18 +14,13 @@ import responses from click.testing import CliRunner from globus_sdk._testing import register_response_set +from globus_sdk.scopes import TimersScopes from globus_sdk.transport import RequestsTransport from ruamel.yaml import YAML import globus_cli from globus_cli.login_manager.tokenstore import build_storage_adapter -# TODO: remove this after an SDK release provides TimersScopes -try: - from globus_sdk.scopes import TimersScopes -except ImportError: - from globus_sdk.scopes import TimerScopes as TimersScopes - yaml = YAML() log = logging.getLogger(__name__) diff --git a/tests/functional/groups/test_group_set_policies.py b/tests/functional/groups/test_group_set_policies.py index a7b5a18f2..09421c98f 100644 --- a/tests/functional/groups/test_group_set_policies.py +++ b/tests/functional/groups/test_group_set_policies.py @@ -1,8 +1,11 @@ import json import pytest -import responses -from globus_sdk._testing import load_response_set, register_response_set +from globus_sdk._testing import ( + get_last_request, + load_response_set, + register_response_set, +) @pytest.fixture(autouse=True, scope="session") @@ -62,8 +65,7 @@ def test_group_set_policies(run_line, add_args, field_name, expected_value): result = run_line(["globus", "group", "set-policies", group_id] + add_args) assert "Group policies updated successfully" in result.output - # TODO: expose get_last_request in globus_sdk._testing ? - last_req = responses.calls[-1].request + last_req = get_last_request() body = json.loads(last_req.body) # confirm expected put body values