from__future__importannotationsimportdataclassesimporttypingastimportglobus_sdkfromglobus_sdk.configimportget_environment_namefromglobus_sdk.login_flowsimport(CommandLineLoginFlowManager,LocalServerLoginFlowManager,LoginFlowManager,)fromglobus_sdk.tokenstorageimport(JSONTokenStorage,MemoryTokenStorage,SQLiteTokenStorage,TokenStorage,TokenValidationError,)fromglobus_sdk.tokenstorage.v2.validating_token_storageimportIdentityMismatchErrorfrom.protocolsimport(IDTokenDecoderProvider,LoginFlowManagerProvider,TokenStorageProvider,TokenValidationErrorHandler,)ift.TYPE_CHECKING:from.appimportGlobusAppKnownLoginFlowManager=t.Literal["command-line","local-server"]KNOWN_LOGIN_FLOW_MANAGERS:dict[KnownLoginFlowManager,LoginFlowManagerProvider]={"command-line":CommandLineLoginFlowManager,"local-server":LocalServerLoginFlowManager,}KnownTokenStorage=t.Literal["json","sqlite","memory"]KNOWN_TOKEN_STORAGES:dict[KnownTokenStorage,t.Type[TokenStorageProvider]]={"json":JSONTokenStorage,"sqlite":SQLiteTokenStorage,"memory":MemoryTokenStorage,}defresolve_by_login_flow(app:GlobusApp,error:TokenValidationError)->None:""" An error handler for GlobusApp token access errors that will retry the login flow if the error is a TokenValidationError. :param app: The GlobusApp instance which encountered an error. :param error: The encountered token validation error. """ifisinstance(error,IdentityMismatchError):# An identity mismatch error indicates incorrect use of the app. Not something# that can be resolved by running a login flow.raiseerrorapp.login(force=True)
[docs]@dataclasses.dataclass(frozen=True)classGlobusAppConfig:""" An immutable dataclass used to control the behavior of a :class:`GlobusApp`. :ivar bool request_refresh_tokens: Whether to request ``refresh tokens`` (expire after 6 months of no use) or use exclusively ``access tokens`` (expire 2 hours after issuance). Default: ``False``. :ivar str | ``TokenStorage`` | ``TokenStorageProvider`` token_storage: A class responsible for storing and retrieving tokens. This may be either a well-known provider (one of :class:`"json" <globus_sdk.tokenstorage.JSONTokenStorage>`, :class:`"sqlite" <globus_sdk.tokenstorage.SQLiteTokenStorage>`, or :class:`"memory" <globus_sdk.tokenstorage.MemoryTokenStorage>`) or a custom storage/provider. Default: ``"json"``. :ivar str | ``LoginFlowManager`` | ``LoginFlowManagerProvider`` login_flow_manager: A class responsible for overseeing Globus Auth login flows. This may be either be a well-known provider (one of :class:`"command-line" <globus_sdk.login_flows.CommandLineLoginFlowManager>` or :class:`"local-server" <globus_sdk.login_flows.LocalServerLoginFlowManager>`) or a custom manager/provider. Default: ``"command-line"``. .. note:: **login_flow_manager** may be ignored when using a :class:`ClientApp`. :ivar str | None login_redirect_uri: The destination for Globus Auth to send a user after once completed a login flow. Default: ``None``. .. note:: **login_redirect_url** may be ignored when using a :class:`NativeAppAuthClient`. Explicit values must be pre-registered on your client `here <https://app.globus.org/settings/developers>`_. :ivar ``TokenValidationErrorHandler`` | None token_validation_error_handler: A handler invoked to resolve errors raised during token validation. Set this to ``None`` to disable auto-login on service token validation errors. Default: ``resolve_by_login_flow`` (runs a login flow, storing the resulting tokens). :ivar ``IDTokenDecoder`` | ``IDTokenDecoderProvider`` id_token_decoder: An ID token decoder or a provider which produces a decoder. The decoder is used when decoding ``id_token`` JWTs from Globus Auth. Defaults to ``IDTokenDecoder``. :ivar str environment: The Globus environment of services to interact with. This is mostly used for testing purposes. This may additionally be set with the environment variable `GLOBUS_SDK_ENVIRONMENT`. Default: ``"production"``. """login_flow_manager:(KnownLoginFlowManager|LoginFlowManagerProvider|LoginFlowManager|None)=Nonelogin_redirect_uri:str|None=Nonetoken_storage:KnownTokenStorage|TokenStorageProvider|TokenStorage="json"request_refresh_tokens:bool=Falsetoken_validation_error_handler:TokenValidationErrorHandler|None=(resolve_by_login_flow)id_token_decoder:globus_sdk.IDTokenDecoder|IDTokenDecoderProvider=(globus_sdk.IDTokenDecoder)environment:str=dataclasses.field(default_factory=get_environment_name)