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

1
.gitignore vendored
View File

@ -147,3 +147,4 @@ dump
.vscode
*dump.sql
*.csv
dev-server-status.txt

21
main.py
View File

@ -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))

View File

@ -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

View File

@ -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'