diff --git a/main.py b/main.py index c71f09b..dac7bc2 100644 --- a/main.py +++ b/main.py @@ -9,9 +9,9 @@ from sentry_sdk.integrations.ariadne import AriadneIntegration from sentry_sdk.integrations.redis import RedisIntegration from starlette.applications import Starlette -from services.schema import resolvers from services.rediscache import redis -from settings import DEV_SERVER_PID_FILE_NAME, SENTRY_DSN, MODE +from services.schema import resolvers +from settings import DEV_SERVER_PID_FILE_NAME, MODE, SENTRY_DSN import_module("resolvers") schema = make_executable_schema(load_schema_from_path("inbox.graphql"), resolvers) # type: ignore diff --git a/models/chat.py b/models/chat.py index e2506f6..6309d9c 100644 --- a/models/chat.py +++ b/models/chat.py @@ -1,4 +1,4 @@ -from typing import TypedDict, Optional, List +from typing import List, Optional, TypedDict from models.member import ChatMember from models.message import Message diff --git a/models/member.py b/models/member.py index c61e157..a885903 100644 --- a/models/member.py +++ b/models/member.py @@ -1,4 +1,4 @@ -from typing import TypedDict, Optional +from typing import Optional, TypedDict class ChatMember(TypedDict): diff --git a/models/message.py b/models/message.py index 2e44d42..0db0ee6 100644 --- a/models/message.py +++ b/models/message.py @@ -1,4 +1,4 @@ -from typing import TypedDict, Optional +from typing import Optional, TypedDict class Message(TypedDict): diff --git a/pyproject.toml b/pyproject.toml index 108f494..50ec275 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,27 +6,27 @@ authors = ["Tony Rewin "] [tool.poetry.dependencies] python = "^3.12" -sentry-sdk = "^1.32.0" +sentry-sdk = "^1.39.1" redis = { extras = ["hiredis"], version = "^5.0.1" } ariadne = "^0.21" -starlette = "^0.32" +starlette = "^0.34.0" uvicorn = "^0.24" itsdangerous = "^2.1.2" aiohttp = "^3.9.1" [tool.poetry.group.dev.dependencies] setuptools = "^69.0.2" +isort = "^5.13.2" +pyright = "^1.1.341" +mypy = "^1.7.1" +ruff = "^0.1.8" +black = "^23.12.0" +pytest = "^7.4.3" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" -[tool.poetry.dev-dependencies] -pytest = "^7.4.2" -black = { version = "^23.9.1", python = ">=3.12" } -ruff = { version = "^0.1.0", python = ">=3.12" } -setuptools = "^69.0.2" - [tool.black] line-length = 120 target-version = ['py312'] diff --git a/resolvers/__init__.py b/resolvers/__init__.py index 9183caf..339805b 100644 --- a/resolvers/__init__.py +++ b/resolvers/__init__.py @@ -1,12 +1,7 @@ from resolvers.chats import create_chat, delete_chat, update_chat from resolvers.load import load_chats, load_messages_by, load_recipients -from resolvers.messages import ( - create_message, - delete_message, - update_message, - mark_as_read, -) -from resolvers.search import search_recipients, search_messages +from resolvers.messages import create_message, delete_message, mark_as_read, update_message +from resolvers.search import search_messages, search_recipients __all__ = [ # inbox diff --git a/resolvers/chats.py b/resolvers/chats.py index 2bd96a7..ea71907 100644 --- a/resolvers/chats.py +++ b/resolvers/chats.py @@ -1,12 +1,12 @@ import json -import uuid import time +import uuid +from models.chat import Chat, ChatUpdate from services.auth import login_required +from services.presence import notify_chat from services.rediscache import redis from services.schema import mutation -from models.chat import Chat, ChatUpdate -from services.presence import notify_chat @mutation.field("update_chat") diff --git a/resolvers/load.py b/resolvers/load.py index 70d8fb9..34b0237 100644 --- a/resolvers/load.py +++ b/resolvers/load.py @@ -2,13 +2,13 @@ import asyncio import json from typing import Any, Dict, List, Optional, Union -from services.auth import login_required -from services.core import get_my_followed, get_all_authors -from services.rediscache import redis -from services.schema import query -from models.chat import Message, ChatPayload +from models.chat import ChatPayload, Message from models.member import ChatMember from resolvers.chats import create_chat +from services.auth import login_required +from services.core import get_all_authors, get_my_followed +from services.rediscache import redis +from services.schema import query async def get_unread_counter(chat_id: str, member_id: int) -> int: diff --git a/resolvers/messages.py b/resolvers/messages.py index 555b060..03ca47a 100644 --- a/resolvers/messages.py +++ b/resolvers/messages.py @@ -1,11 +1,11 @@ import json import time +from models.chat import Message from services.auth import login_required from services.presence import notify_message from services.rediscache import redis from services.schema import mutation -from models.chat import Message @mutation.field("create_message") diff --git a/resolvers/search.py b/resolvers/search.py index 87553b3..636990c 100644 --- a/resolvers/search.py +++ b/resolvers/search.py @@ -1,6 +1,6 @@ import json -from datetime import datetime, timezone, timedelta -from typing import Dict, Union, List, Any +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Union from resolvers.load import load_messages from services.auth import login_required diff --git a/services/auth.py b/services/auth.py index bb3ce6c..1e3966b 100644 --- a/services/auth.py +++ b/services/auth.py @@ -1,8 +1,9 @@ -from services.core import get_author from functools import wraps + import aiohttp from aiohttp.web import HTTPUnauthorized +from services.core import get_author from settings import AUTH_URL @@ -12,7 +13,7 @@ async def check_auth(req) -> (bool, int | None): # Logging the authentication token print(f"[services.auth] checking auth token: {token}") query_name = "validate_jwt_token" - opeation = "ValidateToken" + operation = "ValidateToken" headers = { "Content-Type": "application/json", } @@ -20,14 +21,14 @@ async def check_auth(req) -> (bool, int | None): variables = { "params": { "token_type": "access_token", - "token": token.encode("utf-8"), + "token": token, } } gql = { - "query": f"query {opeation}($params: ValidateJWTTokenInput!) {{ {query_name}(params: $params) {{ is_valid claims }} }}", + "query": f"query {operation}($params: ValidateJWTTokenInput!) {{ {query_name}(params: $params) {{ is_valid claims }} }}", "variables": variables, - "operationName": opeation, + "operationName": operation, } print(f"[services.auth] Graphql: {gql}") try: diff --git a/services/core.py b/services/core.py index abe8733..6ceac92 100644 --- a/services/core.py +++ b/services/core.py @@ -1,7 +1,9 @@ +from typing import Any, List + import aiohttp -from settings import API_BASE -from typing import List, Any + from models.member import ChatMember +from settings import API_BASE headers = {"Content-Type": "application/json"} diff --git a/services/presence.py b/services/presence.py index 99b5915..bdec2df 100644 --- a/services/presence.py +++ b/services/presence.py @@ -1,7 +1,7 @@ import json +from models.chat import ChatUpdate, Message from services.rediscache import redis -from models.chat import Message, ChatUpdate async def notify_message(message: Message, action="create"): diff --git a/services/rediscache.py b/services/rediscache.py index 5282471..d878609 100644 --- a/services/rediscache.py +++ b/services/rediscache.py @@ -1,4 +1,5 @@ import redis.asyncio as aredis + from settings import REDIS_URL diff --git a/services/schema.py b/services/schema.py index fa33eb3..f96e7fa 100644 --- a/services/schema.py +++ b/services/schema.py @@ -1,4 +1,4 @@ -from ariadne import QueryType, MutationType +from ariadne import MutationType, QueryType query = QueryType() mutation = MutationType()