Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename 'TokenData' to 'TokenStorageData' #1054

Merged
merged 1 commit into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import typing as t

from globus_sdk import AuthClient, Scope
from globus_sdk.experimental.tokenstorage import TokenData, TokenStorage
from globus_sdk.experimental.tokenstorage import TokenStorage, TokenStorageData
from globus_sdk.scopes.consents import ConsentForest

from ..._types import UUIDLike
Expand All @@ -16,10 +16,10 @@


def _get_identity_id_from_token_data_by_resource_server(
token_data_by_resource_server: t.Mapping[str, TokenData]
token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> str | None:
"""
Get the identity_id attribute from all TokenData objects by resource server
Get the identity_id attribute from all TokenStorageData objects by resource server
Sanity check that they are all the same, and then return that identity_id or None
"""
token_data_identity_ids: set[str] = set()
Expand All @@ -34,7 +34,7 @@ def _get_identity_id_from_token_data_by_resource_server(
return token_data_identity_ids.pop()
else:
raise ValueError(
"token_data_by_resource_server contained TokenData objects with "
"token_data_by_resource_server contained TokenStorageData objects with "
f"different identity_id values: {token_data_identity_ids}"
)

Expand Down Expand Up @@ -105,11 +105,11 @@ def set_consent_client(self, consent_client: AuthClient) -> None:
self._consent_client = consent_client

def store_token_data_by_resource_server(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
"""
:param token_data_by_resource_server: A dict of TokenData objects indexed by
their resource server
:param token_data_by_resource_server: A dict of TokenStorageData objects
indexed by their resource server

:raises: :exc:`MissingIdentityError` if the token data does not contain
identity information.
Expand All @@ -130,9 +130,9 @@ def store_token_data_by_resource_server(
token_data_by_resource_server
)

def get_token_data_by_resource_server(self) -> dict[str, TokenData]:
def get_token_data_by_resource_server(self) -> dict[str, TokenStorageData]:
"""
:returns: A dict of TokenData objects indexed by their resource server
:returns: A dict of TokenStorageData objects indexed by their resource server
:raises: :exc:`UnmetScopeRequirementsError` if any token data does not meet the
attached scope requirements.
"""
Expand All @@ -145,7 +145,7 @@ def get_token_data_by_resource_server(self) -> dict[str, TokenData]:

return by_resource_server

def get_token_data(self, resource_server: str) -> TokenData:
def get_token_data(self, resource_server: str) -> TokenStorageData:
"""
:param resource_server: A resource server with cached token data.
:returns: The token data for the given resource server.
Expand All @@ -170,7 +170,7 @@ def remove_token_data(self, resource_server: str) -> bool:
return self.token_storage.remove_token_data(resource_server)

def _validate_token_data_by_resource_server_meets_identity_requirements(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
"""
Validate that the identity info in the token data matches the stored identity
Expand Down Expand Up @@ -209,7 +209,10 @@ def _validate_token_data_by_resource_server_meets_identity_requirements(
)

def _validate_token_data_meets_scope_requirements(
self, resource_server: str, token_data: TokenData, eval_dependent: bool = True
self,
resource_server: str,
token_data: TokenStorageData,
eval_dependent: bool = True,
) -> None:
"""
Given a particular resource server/token data, evaluate whether the token +
Expand Down
4 changes: 2 additions & 2 deletions src/globus_sdk/experimental/tokenstorage/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
from globus_sdk.experimental.tokenstorage.json import JSONTokenStorage
from globus_sdk.experimental.tokenstorage.memory import MemoryTokenStorage
from globus_sdk.experimental.tokenstorage.sqlite import SQLiteTokenStorage
from globus_sdk.experimental.tokenstorage.token_data import TokenData
from globus_sdk.experimental.tokenstorage.token_data import TokenStorageData

__all__ = (
"JSONTokenStorage",
"SQLiteTokenStorage",
"TokenStorage",
"FileTokenStorage",
"MemoryTokenStorage",
"TokenData",
"TokenStorageData",
)
16 changes: 8 additions & 8 deletions src/globus_sdk/experimental/tokenstorage/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from ... import GlobusSDKUsageError
from ..._types import UUIDLike
from .token_data import TokenData
from .token_data import TokenStorageData

if t.TYPE_CHECKING:
from globus_sdk.experimental.globus_app import GlobusAppConfig
Expand All @@ -37,30 +37,30 @@ def __init__(self, namespace: str = "DEFAULT") -> None:

@abc.abstractmethod
def store_token_data_by_resource_server(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
"""
Store token data in underlying storage partitioned by the resource server
and the current namespace.

:param token_data_by_resource_server: a ``dict`` of ``TokenData`` objects
:param token_data_by_resource_server: a ``dict`` of ``TokenStorageData`` objects
indexed by their ``resource_server``.
"""

@abc.abstractmethod
def get_token_data_by_resource_server(self) -> dict[str, TokenData]:
def get_token_data_by_resource_server(self) -> dict[str, TokenStorageData]:
"""
Lookup all token data under the current namespace in the underlying storage.

Returns a dict of ``TokenData`` objects indexed by their resource server.
Returns a dict of ``TokenStorageData`` objects indexed by their resource server.
"""

def get_token_data(self, resource_server: str) -> TokenData | None:
def get_token_data(self, resource_server: str) -> TokenStorageData | None:
"""
Lookup token data for a resource server in the underlying storage
under the current namespace.

Either returns a ``TokenData`` object containing tokens and metadata for
Either returns a ``TokenStorageData`` object containing tokens and metadata for
the given resource server or ``None`` indicating that there was no data for
that resource server.

Expand Down Expand Up @@ -96,7 +96,7 @@ def store_token_response(self, token_response: OAuthTokenResponse) -> None:
identity_id = None

for resource_server, token_dict in token_response.by_resource_server.items():
token_data_by_resource_server[resource_server] = TokenData(
token_data_by_resource_server[resource_server] = TokenStorageData(
resource_server=token_dict["resource_server"],
identity_id=identity_id,
scope=token_dict["scope"],
Expand Down
12 changes: 6 additions & 6 deletions src/globus_sdk/experimental/tokenstorage/json.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from globus_sdk.experimental.tokenstorage.base import FileTokenStorage
from globus_sdk.version import __version__

from .token_data import TokenData
from .token_data import TokenStorageData

# use the non-annotation form of TypedDict to apply a non-identifier key
_JSONFileData_0 = t.TypedDict("_JSONFileData_0", {"globus-sdk.version": str})
Expand Down Expand Up @@ -116,7 +116,7 @@ def _load(self) -> _JSONFileData:
return self._handle_formats(data)

def store_token_data_by_resource_server(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
"""
Store token data as JSON data in ``self.filepath`` under the current namespace
Expand All @@ -127,7 +127,7 @@ def store_token_data_by_resource_server(
local users, this sets the umask such that only the owner of the
resulting file can read or write it.

:param token_data_by_resource_server: a ``dict`` of ``TokenData`` objects
:param token_data_by_resource_server: a ``dict`` of ``TokenStorageData`` objects
indexed by their ``resource_server``.
"""
to_write = self._load()
Expand All @@ -148,16 +148,16 @@ def store_token_data_by_resource_server(
with open(self.filepath, "w", encoding="utf-8") as f:
json.dump(to_write, f)

def get_token_data_by_resource_server(self) -> dict[str, TokenData]:
def get_token_data_by_resource_server(self) -> dict[str, TokenStorageData]:
"""
Lookup all token data under the current namespace from the JSON file.

Returns a dict of ``TokenData`` objects indexed by their resource server.
Returns a dict of ``TokenStorageData`` objects indexed by their resource server.
"""
ret = {}
dicts_by_resource_server = self._load()["data"].get(self.namespace, {})
for resource_server, token_data_dict in dicts_by_resource_server.items():
ret[resource_server] = TokenData.from_dict(token_data_dict)
ret[resource_server] = TokenStorageData.from_dict(token_data_dict)
return ret

def remove_token_data(self, resource_server: str) -> bool:
Expand Down
8 changes: 4 additions & 4 deletions src/globus_sdk/experimental/tokenstorage/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from globus_sdk.experimental.tokenstorage.base import TokenStorage

from .token_data import TokenData
from .token_data import TokenStorageData

if t.TYPE_CHECKING:
from globus_sdk._types import UUIDLike
Expand Down Expand Up @@ -35,19 +35,19 @@ def for_globus_app(
return cls(namespace=namespace)

def store_token_data_by_resource_server(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
if self.namespace not in self._tokens:
self._tokens[self.namespace] = {}

for resource_server, token_data in token_data_by_resource_server.items():
self._tokens[self.namespace][resource_server] = token_data.to_dict()

def get_token_data_by_resource_server(self) -> dict[str, TokenData]:
def get_token_data_by_resource_server(self) -> dict[str, TokenStorageData]:
ret = {}
dicts_by_resource_server = self._tokens.get(self.namespace, {})
for resource_server, token_data_dict in dicts_by_resource_server.items():
ret[resource_server] = TokenData.from_dict(token_data_dict)
ret[resource_server] = TokenStorageData.from_dict(token_data_dict)
return ret

def remove_token_data(self, resource_server: str) -> bool:
Expand Down
14 changes: 7 additions & 7 deletions src/globus_sdk/experimental/tokenstorage/sqlite.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from globus_sdk.experimental.tokenstorage.base import FileTokenStorage
from globus_sdk.version import __version__

from .token_data import TokenData
from .token_data import TokenStorageData


class SQLiteTokenStorage(FileTokenStorage):
Expand Down Expand Up @@ -107,13 +107,13 @@ def close(self) -> None:
self._connection.close()

def store_token_data_by_resource_server(
self, token_data_by_resource_server: t.Mapping[str, TokenData]
self, token_data_by_resource_server: t.Mapping[str, TokenStorageData]
) -> None:
"""
Given a dict of token data indexed by resource server, convert the data into
JSON dicts and write it to ``self.filepath`` under the current namespace

:param token_data_by_resource_server: a ``dict`` of ``TokenData`` objects
:param token_data_by_resource_server: a ``dict`` of ``TokenStorageData`` objects
indexed by their ``resource_server``.
"""
pairs = []
Expand All @@ -130,21 +130,21 @@ def store_token_data_by_resource_server(
)
self._connection.commit()

def get_token_data_by_resource_server(self) -> dict[str, TokenData]:
def get_token_data_by_resource_server(self) -> dict[str, TokenStorageData]:
"""
Lookup all token data under the current namespace from the database.

Returns a dict of ``TokenData`` objects indexed by their resource server.
Returns a dict of ``TokenStorageData`` objects indexed by their resource server.
"""
ret: dict[str, TokenData] = {}
ret: dict[str, TokenStorageData] = {}
for row in self._connection.execute(
"SELECT resource_server, token_data_json "
"FROM token_storage WHERE namespace=?",
(self.namespace,),
):
resource_server, token_data_json = row
token_data_dict = json.loads(token_data_json)
ret[resource_server] = TokenData.from_dict(token_data_dict)
ret[resource_server] = TokenStorageData.from_dict(token_data_dict)
return ret

def remove_token_data(self, resource_server: str) -> bool:
Expand Down
2 changes: 1 addition & 1 deletion src/globus_sdk/experimental/tokenstorage/token_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from globus_sdk._serializable import Serializable


class TokenData(Serializable):
class TokenStorageData(Serializable):
"""
Data class containing tokens and metadata for a specific resource server used
as the python interface for ``TokenStorage``.
Expand Down
6 changes: 3 additions & 3 deletions tests/functional/tokenstorage_v2/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@

import pytest

from globus_sdk.experimental.tokenstorage import TokenData
from globus_sdk.experimental.tokenstorage import TokenStorageData


@pytest.fixture
def mock_token_data_by_resource_server():
expiration_time = int(time.time()) + 3600
ret = {
"resource_server_1": TokenData(
"resource_server_1": TokenStorageData(
resource_server="resource_server_1",
identity_id="user_id",
scope="scope1",
Expand All @@ -19,7 +19,7 @@ def mock_token_data_by_resource_server():
expires_at_seconds=expiration_time,
token_type="Bearer",
),
"resource_server_2": TokenData(
"resource_server_2": TokenStorageData(
resource_server="resource_server_2",
identity_id="user_id",
scope="scope2 scope2:0 scope2:1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
ExpiredTokenError,
MissingTokenError,
)
from globus_sdk.experimental.tokenstorage import TokenData
from globus_sdk.experimental.tokenstorage import TokenStorageData


def make_mock_token_response(token_number=1):
Expand Down Expand Up @@ -40,7 +40,7 @@ def get_token_data(self, resource_server):
msg = f"No token data for {resource_server}"
raise MissingTokenError(msg, resource_server=resource_server)

return TokenData.from_dict(self.token_data[resource_server])
return TokenStorageData.from_dict(self.token_data[resource_server])

def store_token_response(self, mock_token_response):
self.token_data = mock_token_response.by_resource_server
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/experimental/globus_app/test_globus_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
JSONTokenStorage,
MemoryTokenStorage,
SQLiteTokenStorage,
TokenData,
TokenStorageData,
)
from globus_sdk.gare import GlobusAuthorizationParameters
from globus_sdk.scopes import AuthScopes, Scope
Expand All @@ -42,7 +42,7 @@

def _mock_token_data_by_rs():
return {
"auth.globus.org": TokenData(
"auth.globus.org": TokenStorageData(
resource_server="auth.globus.org",
identity_id="mock_identity_id",
scope="openid",
Expand Down
Loading