[docs]classMemoryTokenStorage(TokenStorage):""" A token storage which holds tokens in-memory. All token data is lost when the process exits. See :class:`TokenStorage` for common interface details. :param namespace: A unique string for partitioning token data (Default: "DEFAULT"). """def__init__(self,*,namespace:str="DEFAULT")->None:self._tokens:dict[str,dict[str,t.Any]]={}super().__init__(namespace=namespace)@classmethoddeffor_globus_app(cls,# pylint: disable=unused-argumentclient_id:UUIDLike,app_name:str,config:GlobusAppConfig,# pylint: enable=unused-argumentnamespace:str,)->MemoryTokenStorage:returncls(namespace=namespace)defstore_token_data_by_resource_server(self,token_data_by_resource_server:t.Mapping[str,TokenStorageData])->None:ifself.namespacenotinself._tokens:self._tokens[self.namespace]={}forresource_server,token_dataintoken_data_by_resource_server.items():self._tokens[self.namespace][resource_server]=token_data.to_dict()defget_token_data_by_resource_server(self)->dict[str,TokenStorageData]:ret={}dicts_by_resource_server=self._tokens.get(self.namespace,{})forresource_server,token_data_dictindicts_by_resource_server.items():ret[resource_server]=TokenStorageData.from_dict(token_data_dict)returnretdefremove_token_data(self,resource_server:str)->bool:popped=self._tokens.get(self.namespace,{}).pop(resource_server,None)returnpoppedisnotNone