From f21f21b97b6f48d43ca63f8c3a89921cea6d77aa Mon Sep 17 00:00:00 2001 From: Ana Albuquerque Date: Thu, 19 Sep 2024 13:30:36 -0300 Subject: [PATCH 1/2] Add a singleton metaclass for IncogniaAPI --- incognia/api.py | 3 ++- incognia/singleton.py | 8 ++++++++ tests/test_api.py | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 incognia/singleton.py diff --git a/incognia/api.py b/incognia/api.py index 8814d60..c4c4339 100644 --- a/incognia/api.py +++ b/incognia/api.py @@ -6,11 +6,12 @@ from .exceptions import IncogniaHTTPError, IncogniaError from .json_util import encode from .models import Coordinates, StructuredAddress, TransactionAddress, PaymentValue, PaymentMethod +from .singleton import Singleton from .token_manager import TokenManager from .base_request import BaseRequest, JSON_CONTENT_HEADER -class IncogniaAPI: +class IncogniaAPI(metaclass=Singleton): def __init__(self, client_id: str, client_secret: str): self.__token_manager = TokenManager(client_id, client_secret) self.__request = BaseRequest() diff --git a/incognia/singleton.py b/incognia/singleton.py new file mode 100644 index 0000000..7573028 --- /dev/null +++ b/incognia/singleton.py @@ -0,0 +1,8 @@ + +class Singleton(type): + _instances = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) + return cls._instances[cls] diff --git a/tests/test_api.py b/tests/test_api.py index a7952cd..de7df22 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -136,6 +136,12 @@ class TestIncogniaAPI(TestCase): }) DEFAULT_PARAMS: Final[None] = None + def test_metaclass_singleton_should_always_return_the_same_instance(self): + api1 = IncogniaAPI(self.CLIENT_ID, self.CLIENT_SECRET) + api2 = IncogniaAPI(self.CLIENT_ID, self.CLIENT_SECRET) + + self.assertEqual(api1, api2) + @patch.object(BaseRequest, 'post') @patch.object(TokenManager, 'get', return_value=TOKEN_VALUES) def test_register_new_signup_when_installation_id_is_valid_should_return_a_valid_dict( From 965dc68b5471bada71e8c43f93a500837babc443 Mon Sep 17 00:00:00 2001 From: Almir Cunha <91955658+almirmcunhajr@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:28:35 -0300 Subject: [PATCH 2/2] Use kebab-case for gh-action-pypi-publish parameters Signed-off-by: Almir Cunha <91955658+almirmcunhajr@users.noreply.github.com> --- .github/workflows/continuous.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/continuous.yaml b/.github/workflows/continuous.yaml index 4bc4062..822f18a 100644 --- a/.github/workflows/continuous.yaml +++ b/.github/workflows/continuous.yaml @@ -52,15 +52,15 @@ jobs: - name: Publish Python distribution to Test PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - repository_url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ password: ${{ secrets.TEST_PYPI_API_TOKEN }} - skip_existing: true - print_hash: true + skip-existing: true + print-hash: true verbose: true - name: Publish Python distribution to PyPI if: startsWith(github.ref, 'refs/tags/v') uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} - print_hash: true + print-hash: true verbose: true