diff --git a/app/clients/__init__.py b/app/clients/__init__.py index c6b620517..1946f70e6 100644 --- a/app/clients/__init__.py +++ b/app/clients/__init__.py @@ -1,3 +1,6 @@ +from abc import abstractmethod +from typing import Protocol + from botocore.config import Config AWS_CLIENT_CONFIG = Config( @@ -22,12 +25,14 @@ class ClientException(Exception): pass -class Client(object): +class Client(Protocol): """ Base client for sending notifications. """ - pass + @abstractmethod + def init_app(self, current_app, *args, **kwargs): + raise NotImplementedError("TODO: Need to implement.") class NotificationProviderClients(object): diff --git a/app/clients/email/__init__.py b/app/clients/email/__init__.py index 7a2f710a3..1855308b5 100644 --- a/app/clients/email/__init__.py +++ b/app/clients/email/__init__.py @@ -1,3 +1,5 @@ +from abc import abstractmethod, abstractproperty + from app.clients import Client, ClientException @@ -27,9 +29,10 @@ class EmailClient(Client): Base Email client for sending emails. """ + @abstractmethod def send_email(self, *args, **kwargs): raise NotImplementedError("TODO Need to implement.") - @property + @abstractproperty def name(self): raise NotImplementedError("TODO Need to implement.") diff --git a/app/clients/performance_platform/performance_platform_client.py b/app/clients/performance_platform/performance_platform_client.py index 7e3d8c5be..ec0f6b999 100644 --- a/app/clients/performance_platform/performance_platform_client.py +++ b/app/clients/performance_platform/performance_platform_client.py @@ -10,7 +10,7 @@ class PerformancePlatformClient: def active(self): return self._active - def init_app(self, app): + def init_app(self, app, *args, **kwargs): self._active = app.config.get("PERFORMANCE_PLATFORM_ENABLED") if self.active: self.performance_platform_url = app.config.get("PERFORMANCE_PLATFORM_URL") diff --git a/app/clients/sms/__init__.py b/app/clients/sms/__init__.py index 2e7f27cdc..f3a366648 100644 --- a/app/clients/sms/__init__.py +++ b/app/clients/sms/__init__.py @@ -1,3 +1,6 @@ +from abc import abstractmethod, abstractproperty +from typing import final + from app.clients import Client, ClientException @@ -10,7 +13,7 @@ class SmsClientResponseException(ClientException): self.message = message def __str__(self): - return "Message {}".format(self.message) + return f"Message {self.message}" class SmsClient(Client): @@ -18,11 +21,14 @@ class SmsClient(Client): Base Sms client for sending smss. """ - def init_app(self, *args, **kwargs): - raise NotImplementedError("TODO Need to implement.") - + @abstractmethod def send_sms(self, *args, **kwargs): raise NotImplementedError("TODO Need to implement.") - def get_name(self): + @abstractproperty + def name(self): raise NotImplementedError("TODO Need to implement.") + + @final + def get_name(self): + return self.name diff --git a/app/clients/sms/aws_sns.py b/app/clients/sms/aws_sns.py index 1061ec9ce..d75122a7e 100644 --- a/app/clients/sms/aws_sns.py +++ b/app/clients/sms/aws_sns.py @@ -43,9 +43,6 @@ class AwsSnsClient(SmsClient): def name(self): return "sns" - def get_name(self): - return self.name - def _valid_sender_number(self, sender): return sender and re.match(self._valid_sender_regex, sender) diff --git a/tests/app/clients/test_sms.py b/tests/app/clients/test_sms.py index 5718cbc81..f2a5abfed 100644 --- a/tests/app/clients/test_sms.py +++ b/tests/app/clients/test_sms.py @@ -10,6 +10,12 @@ def fake_client(notify_api): def name(self): return "fake" + def init_app(self, current_app, *args, **kwargs): + pass + + def send_sms(self, *args, **kwargs): + pass + fake_client = FakeSmsClient() # fake_client.init_app(notify_api) return fake_client