improved singleton

This commit is contained in:
Sagi Frimer
2019-04-10 19:23:40 +03:00
parent 73e044ed89
commit cf7de01338
3 changed files with 12 additions and 20 deletions

View File

@@ -5,7 +5,8 @@ from app.classes.Settings import SettingsManager
from tornado.options import options
if __name__ == "__main__":
mng = SettingsManager.get_instance()
mng = SettingsManager()
m = SettingsManager()
tornado.options.parse_command_line()
app = ChameleonApplication()
print(f"Serving on port {options.port}")

View File

@@ -1,30 +1,13 @@
import os
import json
from Singleton import Singleton
class SettingsManager:
class SettingsManager(metaclass=Singleton):
cams = {}
__instance = None
@staticmethod
def get_instance():
if not SettingsManager.__instance:
SettingsManager()
return SettingsManager.__instance
def __init__(self):
if SettingsManager.__instance:
raise Exception("This class is a singleton!")
else:
SettingsManager.__instance = self
self._init_settings()
def _init_settings(self):
self.settings_path = os.path.join(os.getcwd(), "settings")
self.cams_path = os.path.join(self.settings_path, "cams")
self._init_general_settings()

View File

@@ -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]