This commit is contained in:
parent
87506b0478
commit
d02ae5bd3f
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -157,3 +157,6 @@ dokku_config
|
||||||
*.db
|
*.db
|
||||||
*.sqlite3
|
*.sqlite3
|
||||||
views.json
|
views.json
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.crt
|
|
@ -40,13 +40,16 @@ Backend service providing GraphQL API for content management system with reactio
|
||||||
### Setup
|
### Setup
|
||||||
|
|
||||||
|
|
||||||
Start API server with `dev` key:
|
Start API server with `dev` keyword added and `mkcert` installed:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mkdir .venv
|
mkdir .venv
|
||||||
python3.12 -m venv .venv
|
python3.12 -m venv .venv
|
||||||
poetry env use .venv/bin/python3.12
|
poetry env use .venv/bin/python3.12
|
||||||
poetry update
|
poetry update
|
||||||
|
|
||||||
|
mkcert -install
|
||||||
|
mkcert localhost
|
||||||
poetry run server.py dev
|
poetry run server.py dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
10
main.py
10
main.py
|
@ -1,11 +1,13 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from importlib import import_module
|
from importlib import import_module
|
||||||
from os.path import exists
|
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
|
||||||
|
from starlette.middleware.cors import CORSMiddleware
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
from starlette.responses import JSONResponse, Response
|
from starlette.responses import JSONResponse, Response
|
||||||
from starlette.routing import Route
|
from starlette.routing import Route
|
||||||
|
@ -123,3 +125,11 @@ app = Starlette(
|
||||||
)
|
)
|
||||||
|
|
||||||
app.add_middleware(ExceptionHandlerMiddleware)
|
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=["*"],
|
||||||
|
)
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from granian.constants import Interfaces
|
from granian.constants import Interfaces
|
||||||
from granian.log import LogLevels
|
from granian.log import LogLevels
|
||||||
from granian.server import Granian
|
from granian.server import Granian
|
||||||
|
@ -20,6 +23,9 @@ if __name__ == "__main__":
|
||||||
backlog=2048,
|
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()
|
granian_instance.serve()
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logger.error(f"Granian error: {error}", exc_info=True)
|
logger.error(f"Granian error: {error}", exc_info=True)
|
||||||
|
|
|
@ -93,6 +93,7 @@ def login_required(f):
|
||||||
Возвращает:
|
Возвращает:
|
||||||
- Обернутую функцию с добавленной проверкой авторизации.
|
- Обернутую функцию с добавленной проверкой авторизации.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
async def decorated_function(*args, **kwargs):
|
async def decorated_function(*args, **kwargs):
|
||||||
info = args[1]
|
info = args[1]
|
||||||
|
@ -124,6 +125,7 @@ def login_accepted(f):
|
||||||
Возвращает:
|
Возвращает:
|
||||||
- Обернутую функцию с добавленной проверкой авторизации.
|
- Обернутую функцию с добавленной проверкой авторизации.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
async def decorated_function(*args, **kwargs):
|
async def decorated_function(*args, **kwargs):
|
||||||
info = args[1]
|
info = args[1]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from asyncio.log import logger
|
from asyncio.log import logger
|
||||||
from ariadne import MutationType, QueryType
|
|
||||||
import httpx
|
import httpx
|
||||||
|
from ariadne import MutationType, QueryType
|
||||||
|
|
||||||
from settings import AUTH_URL
|
from settings import AUTH_URL
|
||||||
|
|
||||||
|
@ -10,6 +11,8 @@ resolvers = [query, mutation]
|
||||||
|
|
||||||
|
|
||||||
async def request_graphql_data(gql, url=AUTH_URL, headers=None):
|
async def request_graphql_data(gql, url=AUTH_URL, headers=None):
|
||||||
|
if not url:
|
||||||
|
return None
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {"Content-Type": "application/json"}
|
headers = {"Content-Type": "application/json"}
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from asyncio.log import logger
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
from asyncio.log import logger
|
||||||
|
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from starlette.endpoints import HTTPEndpoint
|
from starlette.endpoints import HTTPEndpoint
|
||||||
|
|
Loading…
Reference in New Issue
Block a user