瀏覽代碼

Add a Application class

jherve 1 年之前
父節點
當前提交
a681ba3c30
共有 1 個文件被更改,包括 31 次插入6 次删除
  1. 31 6
      src/de_quoi_parle_le_monde/main.py

+ 31 - 6
src/de_quoi_parle_le_monde/main.py

@@ -1,7 +1,9 @@
 import asyncio
+from hypercorn.typing import Framework
 from loguru import logger
 from hypercorn.config import Config
 from hypercorn.asyncio import serve
+from attrs import frozen
 
 
 from de_quoi_parle_le_monde.web import app
@@ -9,12 +11,35 @@ from de_quoi_parle_le_monde.http import HttpClient
 from de_quoi_parle_le_monde.storage import Storage
 
 
-async def main():
-    http_client = HttpClient()
-    storage = await Storage.create()
+@frozen
+class Application:
+    http_client: HttpClient
+    storage: Storage
+    web_app: Framework
+    web_config: Config
+
+    async def run(self):
+        await asyncio.gather(self._run_web_server())
+        logger.info("Will quit now..")
+
+    async def _run_web_server(self):
+        logger.info("Starting web server..")
+        await serve(self.web_app, self.web_config)
+
+    @staticmethod
+    async def create():
+        http_client = HttpClient()
+        storage = await Storage.create()
+        web_app = app
+        web_config = Config()
 
-    await serve(app, Config())
-    logger.info("Will quit now..")
+        return Application(http_client, storage, web_app, web_config)
+
+
+async def main():
+    full_application = await Application.create()
+    await full_application.run()
 
 
-asyncio.run(main())
+if __name__ == "__main__":
+    asyncio.run(main())