Browse Source

Change config to be environ-based

Getty Ritter 4 years ago
parent
commit
b6beb4cc08
1 changed files with 55 additions and 6 deletions
  1. 55 6
      lc/config.py

+ 55 - 6
lc/config.py

@@ -1,16 +1,65 @@
+from dataclasses import dataclass
 import os
 import sys
+from typing import Any
 
+import environ
 import flask
 import itsdangerous
 import playhouse.sqlite_ext
 
-db = playhouse.sqlite_ext.SqliteExtDatabase(None)
-per_page = 50
-serializer = itsdangerous.URLSafeTimedSerializer(os.getenv("SECRET_KEY", "TEMP KEY"))
-app_path = os.environ["APP_PATH"].strip()
-app = flask.Flask(__name__, static_folder=os.path.join(os.getcwd(), 'static'))
-app.secret_key = os.getenv("SECRET_KEY", "ARGLBARGL")
+
+@environ.config(prefix="LC")
+class Config:
+    secret_key = environ.var()
+    app_path = environ.var()
+    db_path = environ.var()
+    static_path = environ.var("static")
+
+
+@dataclass
+class App:
+    config: Config
+    app: flask.Flask
+    db: playhouse.sqlite_ext.SqliteExtDatabase
+    serializer: itsdangerous.URLSafeTimedSerializer
+    per_page: int = 50
+
+    @staticmethod
+    def from_env() -> "App":
+        config = environ.to_config(Config)
+        app = flask.Flask(
+            __name__, static_folder=os.path.join(os.getcwd(), config.static_path),
+        )
+        app.secret_key = config.secret_key
+        return App(
+            config=config,
+            db=playhouse.sqlite_ext.SqliteExtDatabase(None),
+            serializer=itsdangerous.URLSafeTimedSerializer(config.secret_key),
+            app=app,
+        )
+
+    def init_db(self):
+        self.db.init(self.config.db_path)
+
+    def in_memory_db(self):
+        try:
+            self.db.close()
+        except:
+            pass
+        self.db.init(":memory:")
+
+    def close_db(self):
+        self.db.close()
+
+    def serialize_token(self, obj: Any) -> str:
+        return self.serializer.dumps(obj)
+
+    def load_token(self, token: str) -> Any:
+        return self.serializer.loads(token)
+
+
+app = App.from_env()
 
 if sys.stderr.isatty():