From 2a3d08247c20247213e6c213c48f02be55c03e0b Mon Sep 17 00:00:00 2001 From: Robert Segal Date: Thu, 2 Oct 2025 14:52:01 -0600 Subject: [PATCH] Added accounts api tokens endpoints --- mpt_api_client/resources/accounts/accounts.py | 11 +++++ .../resources/accounts/api_tokens.py | 45 +++++++++++++++++++ tests/resources/accounts/test_accounts.py | 6 +++ tests/resources/accounts/test_api_tokens.py | 32 +++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 mpt_api_client/resources/accounts/api_tokens.py create mode 100644 tests/resources/accounts/test_api_tokens.py diff --git a/mpt_api_client/resources/accounts/accounts.py b/mpt_api_client/resources/accounts/accounts.py index f49298e3..0335fcf0 100644 --- a/mpt_api_client/resources/accounts/accounts.py +++ b/mpt_api_client/resources/accounts/accounts.py @@ -1,5 +1,6 @@ from mpt_api_client.http import AsyncHTTPClient, HTTPClient from mpt_api_client.resources.accounts.account import AccountsService, AsyncAccountsService +from mpt_api_client.resources.accounts.api_tokens import ApiTokensService, AsyncApiTokensService from mpt_api_client.resources.accounts.licensees import AsyncLicenseesService, LicenseesService from mpt_api_client.resources.accounts.sellers import AsyncSellersService, SellersService from mpt_api_client.resources.accounts.user_groups import ( @@ -40,6 +41,11 @@ def user_groups(self) -> UserGroupsService: """User Groups service.""" return UserGroupsService(http_client=self.http_client) + @property + def api_tokens(self) -> ApiTokensService: + """API Tokens service.""" + return ApiTokensService(http_client=self.http_client) + class AsyncAccounts: """Async Accounts MPT API Module.""" @@ -71,3 +77,8 @@ def licensees(self) -> AsyncLicenseesService: def user_groups(self) -> AsyncUserGroupsService: """User Groups service.""" return AsyncUserGroupsService(http_client=self.http_client) + + @property + def api_tokens(self) -> AsyncApiTokensService: + """API Tokens service.""" + return AsyncApiTokensService(http_client=self.http_client) diff --git a/mpt_api_client/resources/accounts/api_tokens.py b/mpt_api_client/resources/accounts/api_tokens.py new file mode 100644 index 00000000..f346ffdd --- /dev/null +++ b/mpt_api_client/resources/accounts/api_tokens.py @@ -0,0 +1,45 @@ +from mpt_api_client.http import AsyncService, Service +from mpt_api_client.http.mixins import ( + AsyncCreateMixin, + AsyncDeleteMixin, + AsyncUpdateMixin, + CreateMixin, + DeleteMixin, + UpdateMixin, +) +from mpt_api_client.models import Model +from mpt_api_client.resources.accounts.mixins import AsyncEnablableMixin, EnablableMixin + + +class ApiToken(Model): + """API Token Model.""" + + +class ApiTokensServiceConfig: + """API Tokens Service Configuration.""" + + _endpoint = "/public/v1/accounts/api-tokens" + _model_class = ApiToken + _collection_key = "data" + + +class ApiTokensService( + CreateMixin[ApiToken], + DeleteMixin, + UpdateMixin[ApiToken], + EnablableMixin[ApiToken], + Service[ApiToken], + ApiTokensServiceConfig, +): + """API Tokens Service.""" + + +class AsyncApiTokensService( + AsyncCreateMixin[ApiToken], + AsyncDeleteMixin, + AsyncUpdateMixin[ApiToken], + AsyncEnablableMixin[ApiToken], + AsyncService[ApiToken], + ApiTokensServiceConfig, +): + """Async API Tokens Service.""" diff --git a/tests/resources/accounts/test_accounts.py b/tests/resources/accounts/test_accounts.py index 3b5d092f..500c0758 100644 --- a/tests/resources/accounts/test_accounts.py +++ b/tests/resources/accounts/test_accounts.py @@ -2,6 +2,10 @@ from mpt_api_client.resources.accounts.account import AccountsService, AsyncAccountsService from mpt_api_client.resources.accounts.accounts import Accounts, AsyncAccounts +from mpt_api_client.resources.accounts.api_tokens import ( + ApiTokensService, + AsyncApiTokensService, +) from mpt_api_client.resources.accounts.licensees import AsyncLicenseesService, LicenseesService from mpt_api_client.resources.accounts.sellers import AsyncSellersService, SellersService from mpt_api_client.resources.accounts.user_groups import ( @@ -29,6 +33,7 @@ def async_accounts(async_http_client): ("sellers", SellersService), ("licensees", LicenseesService), ("user_groups", UserGroupsService), + ("api_tokens", ApiTokensService), ], ) def test_accounts_properties(accounts, property_name, expected_service_class): @@ -47,6 +52,7 @@ def test_accounts_properties(accounts, property_name, expected_service_class): ("sellers", AsyncSellersService), ("licensees", AsyncLicenseesService), ("user_groups", AsyncUserGroupsService), + ("api_tokens", AsyncApiTokensService), ], ) def test_async_accounts_properties(async_accounts, property_name, expected_service_class): diff --git a/tests/resources/accounts/test_api_tokens.py b/tests/resources/accounts/test_api_tokens.py new file mode 100644 index 00000000..039de324 --- /dev/null +++ b/tests/resources/accounts/test_api_tokens.py @@ -0,0 +1,32 @@ +import pytest + +from mpt_api_client.resources.accounts.api_tokens import ( + ApiTokensService, + AsyncApiTokensService, +) + + +@pytest.fixture +def api_tokens_service(http_client): + return ApiTokensService(http_client=http_client) + + +@pytest.fixture +def async_api_tokens_service(async_http_client): + return AsyncApiTokensService(http_client=async_http_client) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update", "delete", "enable", "disable"], +) +def test_api_tokens_mixins_present(api_tokens_service, method): + assert hasattr(api_tokens_service, method) + + +@pytest.mark.parametrize( + "method", + ["get", "create", "update", "delete", "enable", "disable"], +) +def test_async_api_tokens_mixins_present(async_api_tokens_service, method): + assert hasattr(async_api_tokens_service, method)