dev server reload

This commit is contained in:
Igor Lobanov 2022-11-23 00:51:29 +01:00
parent b144a6ab8b
commit 57bc4982e6
4 changed files with 34 additions and 7 deletions

3
.gitignore vendored
View File

@ -146,4 +146,5 @@ migration/content/**/*.md
dump dump
.vscode .vscode
*dump.sql *dump.sql
*.csv *.csv
dev-server-status.txt

21
main.py
View File

@ -1,6 +1,6 @@
import asyncio import asyncio
from importlib import import_module from importlib import import_module
from os.path import exists
from ariadne import load_schema_from_path, make_executable_schema from ariadne import load_schema_from_path, make_executable_schema
from ariadne.asgi import GraphQL from ariadne.asgi import GraphQL
from starlette.applications import Starlette from starlette.applications import Starlette
@ -21,6 +21,8 @@ from services.stat.topicstat import TopicStat
from services.stat.viewed import ViewedStorage from services.stat.viewed import ViewedStorage
from services.zine.gittask import GitTask from services.zine.gittask import GitTask
from services.zine.shoutauthor import ShoutAuthorStorage from services.zine.shoutauthor import ShoutAuthorStorage
from settings import DEV_SERVER_STATUS_FILE_NAME
import_module("resolvers") import_module("resolvers")
schema = make_executable_schema(load_schema_from_path("schema.graphql"), resolvers) # type: ignore 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()) git_task = asyncio.create_task(GitTask.git_task_worker())
print(git_task) 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(): async def shutdown():
await redis.disconnect() await redis.disconnect()
@ -64,3 +75,11 @@ app = Starlette(
routes=routes, routes=routes,
) )
app.mount("/", GraphQL(schema, debug=True)) 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))

View File

@ -1,8 +1,8 @@
import sys import sys
import os
import uvicorn import uvicorn
from settings import PORT from settings import PORT, DEV_SERVER_STATUS_FILE_NAME
log_settings = { log_settings = {
'version': 1, 'version': 1,
@ -54,6 +54,9 @@ if __name__ == "__main__":
x = sys.argv[1] x = sys.argv[1]
if x == "dev": if x == "dev":
print("DEV MODE") print("DEV MODE")
if os.path.exists(DEV_SERVER_STATUS_FILE_NAME):
os.remove(DEV_SERVER_STATUS_FILE_NAME)
headers = [ headers = [
("Access-Control-Allow-Methods", "GET, POST, OPTIONS, HEAD"), ("Access-Control-Allow-Methods", "GET, POST, OPTIONS, HEAD"),
("Access-Control-Allow-Origin", "http://localhost:3000"), ("Access-Control-Allow-Origin", "http://localhost:3000"),
@ -65,14 +68,15 @@ if __name__ == "__main__":
("Access-Control-Allow-Credentials", "true"), ("Access-Control-Allow-Credentials", "true"),
] ]
uvicorn.run( uvicorn.run(
"main:app", "main:dev_app",
host="localhost", host="localhost",
port=8080, port=8080,
headers=headers, headers=headers,
# log_config=LOGGING_CONFIG, # log_config=LOGGING_CONFIG,
log_level=None, log_level=None,
access_log=True access_log=True,
) # , ssl_keyfile="discours.key", ssl_certfile="discours.crt", reload=True) reload=True
) # , ssl_keyfile="discours.key", ssl_certfile="discours.crt")
elif x == "migrate": elif x == "migrate":
from migration import migrate from migration import migrate

View File

@ -25,3 +25,6 @@ for provider in OAUTH_PROVIDERS:
SHOUTS_REPO = "content" SHOUTS_REPO = "content"
SESSION_TOKEN_HEADER = "Authorization" SESSION_TOKEN_HEADER = "Authorization"
# for local development
DEV_SERVER_STATUS_FILE_NAME = 'dev-server-status.txt'