From d02ae5bd3fe9bf1226997f1be57110be531245d4 Mon Sep 17 00:00:00 2001 From: Untone Date: Thu, 12 Dec 2024 01:04:11 +0300 Subject: [PATCH] fmt+debug --- .gitignore | 5 ++++- README.md | 5 ++++- main.py | 10 ++++++++++ resolvers/editor.py | 2 +- server.py | 6 ++++++ services/auth.py | 2 ++ services/schema.py | 5 ++++- services/webhook.py | 2 +- 8 files changed, 32 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 0fea1dd9..5c8dfc99 100644 --- a/.gitignore +++ b/.gitignore @@ -156,4 +156,7 @@ dokku_config *.db *.sqlite3 -views.json \ No newline at end of file +views.json +*.pem +*.key +*.crt \ No newline at end of file diff --git a/README.md b/README.md index 4cfe4a4d..dd1c3a15 100644 --- a/README.md +++ b/README.md @@ -40,13 +40,16 @@ Backend service providing GraphQL API for content management system with reactio ### Setup -Start API server with `dev` key: +Start API server with `dev` keyword added and `mkcert` installed: ```shell mkdir .venv python3.12 -m venv .venv poetry env use .venv/bin/python3.12 poetry update + +mkcert -install +mkcert localhost poetry run server.py dev ``` diff --git a/main.py b/main.py index 23206d6d..db015c87 100644 --- a/main.py +++ b/main.py @@ -1,11 +1,13 @@ import asyncio import os +import sys 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 +from starlette.middleware.cors import CORSMiddleware from starlette.requests import Request from starlette.responses import JSONResponse, Response from starlette.routing import Route @@ -123,3 +125,11 @@ app = Starlette( ) app.add_middleware(ExceptionHandlerMiddleware) +if "dev" in sys.argv: + app.add_middleware( + CORSMiddleware, + allow_origins=["https://localhost:3000"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], + ) diff --git a/resolvers/editor.py b/resolvers/editor.py index 478ae594..89311785 100644 --- a/resolvers/editor.py +++ b/resolvers/editor.py @@ -250,7 +250,7 @@ async def update_shout(_, info, shout_id: int, shout_input=None, publish=False): same_slug_shout = session.query(Shout).filter(Shout.slug == slug).first() shout_input["slug"] = slug logger.info(f"shout#{shout_id} slug patched") - + if filter(lambda x: x.id == author_id, [x for x in shout_by_id.authors]) or "editor" in roles: logger.info(f"shout#{shout_id} is author or editor") # topics patch diff --git a/server.py b/server.py index b47ecb0e..9d65e31a 100644 --- a/server.py +++ b/server.py @@ -1,3 +1,6 @@ +import sys +from pathlib import Path + from granian.constants import Interfaces from granian.log import LogLevels from granian.server import Granian @@ -20,6 +23,9 @@ if __name__ == "__main__": backlog=2048, ) + if "dev" in sys.argv: + logger.info("dev mode, building ssl context") + granian_instance.build_ssl_context(cert=Path("localhost.pem"), key=Path("localhost-key.pem"), password=None) granian_instance.serve() except Exception as error: logger.error(f"Granian error: {error}", exc_info=True) diff --git a/services/auth.py b/services/auth.py index d8046af5..81d8230c 100644 --- a/services/auth.py +++ b/services/auth.py @@ -93,6 +93,7 @@ def login_required(f): Возвращает: - Обернутую функцию с добавленной проверкой авторизации. """ + @wraps(f) async def decorated_function(*args, **kwargs): info = args[1] @@ -124,6 +125,7 @@ def login_accepted(f): Возвращает: - Обернутую функцию с добавленной проверкой авторизации. """ + @wraps(f) async def decorated_function(*args, **kwargs): info = args[1] diff --git a/services/schema.py b/services/schema.py index e6100e3d..64ef420c 100644 --- a/services/schema.py +++ b/services/schema.py @@ -1,6 +1,7 @@ from asyncio.log import logger -from ariadne import MutationType, QueryType + import httpx +from ariadne import MutationType, QueryType from settings import AUTH_URL @@ -10,6 +11,8 @@ resolvers = [query, mutation] async def request_graphql_data(gql, url=AUTH_URL, headers=None): + if not url: + return None if headers is None: headers = {"Content-Type": "application/json"} try: diff --git a/services/webhook.py b/services/webhook.py index 3c941ec3..97f6edfa 100644 --- a/services/webhook.py +++ b/services/webhook.py @@ -1,7 +1,7 @@ import asyncio -from asyncio.log import logger import os import re +from asyncio.log import logger from sqlalchemy import select from starlette.endpoints import HTTPEndpoint