diff --git a/app/services/location/__init__.py b/app/services/location/__init__.py index 6d292b54..123552a5 100644 --- a/app/services/location/__init__.py +++ b/app/services/location/__init__.py @@ -1,7 +1,17 @@ """app.services.location""" from abc import ABC, abstractmethod +def singleton(cls): + instances = {} + def wrapper(*args, **kwargs): + if cls not in instances: + instances[cls] = cls(*args, **kwargs) + return instances[cls] + + return wrapper + +@singleton class LocationService(ABC): """ Service for retrieving locations. diff --git a/app/services/location/csbs.py b/app/services/location/csbs.py index 444ebad6..8d97e5ac 100644 --- a/app/services/location/csbs.py +++ b/app/services/location/csbs.py @@ -14,7 +14,7 @@ LOGGER = logging.getLogger("services.location.csbs") - +@singleton class CSBSLocationService(LocationService): """ Service for retrieving locations from csbs diff --git a/app/services/location/jhu.py b/app/services/location/jhu.py index ebed3960..ce58f1dd 100644 --- a/app/services/location/jhu.py +++ b/app/services/location/jhu.py @@ -21,6 +21,7 @@ PID = os.getpid() +@singleton class JhuLocationService(LocationService): """ Service for retrieving locations from Johns Hopkins CSSE (https://github.com/CSSEGISandData/COVID-19). diff --git a/app/services/location/nyt.py b/app/services/location/nyt.py index 1f25ec34..54b01fef 100644 --- a/app/services/location/nyt.py +++ b/app/services/location/nyt.py @@ -16,6 +16,7 @@ LOGGER = logging.getLogger("services.location.nyt") +@singleton class NYTLocationService(LocationService): """ Service for retrieving locations from New York Times (https://github.com/nytimes/covid-19-data).