39 lines
968 B
Python
39 lines
968 B
Python
|
# pylint: disable=too-few-public-methods
|
||
|
|
||
|
from datetime import datetime
|
||
|
from flask import Flask
|
||
|
from flask_smorest import Api
|
||
|
from .config import APISettings
|
||
|
|
||
|
class IsSingletonException(Exception):
|
||
|
pass
|
||
|
|
||
|
class Application:
|
||
|
"""
|
||
|
This is a singleton that can be accessed using get_instance()
|
||
|
|
||
|
It has 2 properties
|
||
|
- app: Used for WSGI servers and such
|
||
|
- api: Used for Blueprints
|
||
|
"""
|
||
|
|
||
|
__instance = None
|
||
|
app = Flask(__name__)
|
||
|
app.config.from_object(APISettings)
|
||
|
app.json.sort_keys = False
|
||
|
api = None
|
||
|
alive_since = None
|
||
|
|
||
|
@staticmethod
|
||
|
def get_instance():
|
||
|
if Application.__instance is None:
|
||
|
Application()
|
||
|
return Application.__instance
|
||
|
|
||
|
def __init__(self):
|
||
|
if Application.__instance is not None:
|
||
|
raise IsSingletonException("This class is a singleton")
|
||
|
Application.__instance = self
|
||
|
self.api = Api(self.app)
|
||
|
self.alive_since = datetime.now()
|