From d658e5d918417217a7e60d093803eec85e4e45fd Mon Sep 17 00:00:00 2001 From: Ana Albuquerque Date: Thu, 19 Sep 2024 13:30:36 -0300 Subject: [PATCH] Add a singleton metaclass for IncogniaAPI --- incognia/api.py | 3 ++- incognia/singleton.py | 7 +++++++ 2 files changed, 9 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..399f727 --- /dev/null +++ b/incognia/singleton.py @@ -0,0 +1,7 @@ + +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] \ No newline at end of file