소스 검색

Add a WebService

jherve 1 년 전
부모
커밋
7ccbf4584c
1개의 변경된 파일25개의 추가작업 그리고 0개의 파일을 삭제
  1. 25 0
      src/media_observer/test.py

+ 25 - 0
src/media_observer/test.py

@@ -6,6 +6,8 @@ from loguru import logger
 from attrs import frozen
 from attrs import frozen
 from abc import ABC, abstractmethod
 from abc import ABC, abstractmethod
 from uuid import UUID, uuid1
 from uuid import UUID, uuid1
+from hypercorn.asyncio import serve
+from hypercorn.config import Config
 
 
 from media_observer.article import ArchiveCollection
 from media_observer.article import ArchiveCollection
 from media_observer.internet_archive import (
 from media_observer.internet_archive import (
@@ -14,6 +16,7 @@ from media_observer.internet_archive import (
 )
 )
 from media_observer.storage import Storage
 from media_observer.storage import Storage
 from media_observer.medias import media_collection
 from media_observer.medias import media_collection
+from media_observer.web import app
 from config import settings
 from config import settings
 
 
 
 
@@ -157,6 +160,24 @@ class SnapshotWorker(QueueWorker):
         return {"storage": self.storage, "ia_client": self.ia_client}
         return {"storage": self.storage, "ia_client": self.ia_client}
 
 
 
 
+@frozen
+class WebServer(Worker):
+    # app: Any
+    # config: Any
+
+    async def run(self):
+        shutdown_event = asyncio.Event()
+
+        try:
+            logger.info("Web server stuff")
+            # Just setting the shutdown_trigger even though it is not connected
+            # to anything allows the app to gracefully shutdown
+            await serve(app, Config(), shutdown_trigger=shutdown_event.wait)
+        except asyncio.CancelledError:
+            logger.warning("Web server exiting")
+            return
+
+
 queues = [asyncio.Queue() for _ in range(0, 2)]
 queues = [asyncio.Queue() for _ in range(0, 2)]
 snap_queue = asyncio.Queue()
 snap_queue = asyncio.Queue()
 
 
@@ -171,6 +192,7 @@ async def main():
     try:
     try:
         async with InternetArchiveClient.create() as ia:
         async with InternetArchiveClient.create() as ia:
             worker = SnapshotWorker(15, snap_queue, storage, ia)
             worker = SnapshotWorker(15, snap_queue, storage, ia)
+            web_server = WebServer(16)
             async with asyncio.TaskGroup() as tg:
             async with asyncio.TaskGroup() as tg:
                 for i in range(0, 2):
                 for i in range(0, 2):
                     qw = QueueWorker(i, queue=queues[i])
                     qw = QueueWorker(i, queue=queues[i])
@@ -182,6 +204,9 @@ async def main():
                 tasks.append(tg.create_task(worker.loop()))
                 tasks.append(tg.create_task(worker.loop()))
                 for j in jobs[:3]:
                 for j in jobs[:3]:
                     await snap_queue.put(j)
                     await snap_queue.put(j)
+
+                # THIS TASK DOES NOT HANDLE CANCELLATION SIGNAL
+                tasks.append(tg.create_task(web_server.run()))
     finally:
     finally:
         await storage.close()
         await storage.close()