From 57bc4982e6d5d552602324688a7d4d0c86b55315 Mon Sep 17 00:00:00 2001 From: Igor Lobanov Date: Wed, 23 Nov 2022 00:51:29 +0100 Subject: [PATCH] dev server reload --- .gitignore | 3 ++- main.py | 21 ++++++++++++++++++++- server.py | 14 +++++++++----- settings.py | 3 +++ 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 650774ab..b8332f4b 100644 --- a/.gitignore +++ b/.gitignore @@ -146,4 +146,5 @@ migration/content/**/*.md dump .vscode *dump.sql -*.csv \ No newline at end of file +*.csv +dev-server-status.txt diff --git a/main.py b/main.py index 7b29f901..4550028b 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import asyncio from importlib import import_module - +from os.path import exists from ariadne import load_schema_from_path, make_executable_schema from ariadne.asgi import GraphQL from starlette.applications import Starlette @@ -21,6 +21,8 @@ from services.stat.topicstat import TopicStat from services.stat.viewed import ViewedStorage from services.zine.gittask import GitTask from services.zine.shoutauthor import ShoutAuthorStorage +from settings import DEV_SERVER_STATUS_FILE_NAME + import_module("resolvers") schema = make_executable_schema(load_schema_from_path("schema.graphql"), resolvers) # type: ignore @@ -45,6 +47,15 @@ async def start_up(): git_task = asyncio.create_task(GitTask.git_task_worker()) print(git_task) +async def dev_start_up(): + if exists(DEV_SERVER_STATUS_FILE_NAME): + return + else: + with open(DEV_SERVER_STATUS_FILE_NAME, 'w', encoding='utf-8') as f: + f.write('running') + + await start_up() + async def shutdown(): await redis.disconnect() @@ -64,3 +75,11 @@ app = Starlette( routes=routes, ) app.mount("/", GraphQL(schema, debug=True)) + +dev_app = app = Starlette( + debug=True, + on_startup=[dev_start_up], + middleware=middleware, + routes=routes, +) +dev_app.mount("/", GraphQL(schema, debug=True)) diff --git a/server.py b/server.py index 8059d554..dc7041bc 100644 --- a/server.py +++ b/server.py @@ -1,8 +1,8 @@ import sys - +import os import uvicorn -from settings import PORT +from settings import PORT, DEV_SERVER_STATUS_FILE_NAME log_settings = { 'version': 1, @@ -54,6 +54,9 @@ if __name__ == "__main__": x = sys.argv[1] if x == "dev": print("DEV MODE") + if os.path.exists(DEV_SERVER_STATUS_FILE_NAME): + os.remove(DEV_SERVER_STATUS_FILE_NAME) + headers = [ ("Access-Control-Allow-Methods", "GET, POST, OPTIONS, HEAD"), ("Access-Control-Allow-Origin", "http://localhost:3000"), @@ -65,14 +68,15 @@ if __name__ == "__main__": ("Access-Control-Allow-Credentials", "true"), ] uvicorn.run( - "main:app", + "main:dev_app", host="localhost", port=8080, headers=headers, # log_config=LOGGING_CONFIG, log_level=None, - access_log=True - ) # , ssl_keyfile="discours.key", ssl_certfile="discours.crt", reload=True) + access_log=True, + reload=True + ) # , ssl_keyfile="discours.key", ssl_certfile="discours.crt") elif x == "migrate": from migration import migrate diff --git a/settings.py b/settings.py index 6649b8ea..ccfdbed0 100644 --- a/settings.py +++ b/settings.py @@ -25,3 +25,6 @@ for provider in OAUTH_PROVIDERS: SHOUTS_REPO = "content" SESSION_TOKEN_HEADER = "Authorization" + +# for local development +DEV_SERVER_STATUS_FILE_NAME = 'dev-server-status.txt'