diff --git a/main.py b/main.py index 790ec19..2283d84 100644 --- a/main.py +++ b/main.py @@ -33,11 +33,7 @@ async def start_up(): SENTRY_DSN, enable_tracing=True, integrations=[ - StrawberryIntegration( - # Set async_execution to True if you have - # at least one async resolver - async_execution=True - ), + StrawberryIntegration(async_execution=True), SqlalchemyIntegration(), RedisIntegration(), AioHttpIntegration(), diff --git a/resolvers/schema.py b/resolvers/schema.py index 6f33029..76ec94d 100644 --- a/resolvers/schema.py +++ b/resolvers/schema.py @@ -81,7 +81,7 @@ class Query: total=session.query(NotificationMessage).count(), ) return nr - except Exception as ex: + except SQLAlchemyError as ex: print(f"[resolvers.schema] {ex}") return NotificationsResult(notifications=[], total=0, unread=0) @@ -101,8 +101,7 @@ class Mutation: except SQLAlchemyError as e: session.rollback() print(f"[mark_notification_as_read] error: {str(e)}") - nsr = NotificationSeenResult(error="cant mark as read") - return nsr + return NotificationSeenResult(error="cant mark as read") return NotificationSeenResult() @login_required @@ -121,8 +120,7 @@ class Mutation: except SQLAlchemyError as e: session.rollback() print(f"[mark_all_notifications_as_read] error: {str(e)}") - nsr = NotificationSeenResult(error="cant mark as read") - return nsr + return NotificationSeenResult(error="cant mark as read") return NotificationSeenResult() diff --git a/services/auth.py b/services/auth.py index 469fd4a..defec86 100644 --- a/services/auth.py +++ b/services/auth.py @@ -1,22 +1,14 @@ -from functools import wraps -import aiohttp - -from orm.author import Author -from services.db import local_session -from settings import AUTH_URL - - from functools import wraps import aiohttp from aiohttp.web import HTTPUnauthorized - +from orm.author import Author +from services.db import local_session from settings import AUTH_URL async def check_auth(req) -> (bool, int | None): token = req.headers.get("Authorization") if token: - # Logging the authentication token print(f"[services.auth] checking auth token: {token}") query_name = "validate_jwt_token" operation = "ValidateToken" @@ -38,15 +30,12 @@ async def check_auth(req) -> (bool, int | None): } print(f"[services.auth] Graphql: {gql}") try: - # Asynchronous HTTP request to the authentication server async with aiohttp.ClientSession() as session: async with session.post(AUTH_URL, json=gql, headers=headers) as response: - # Logging the GraphQL response response_text = await response.text() print(f"[services.auth] GraphQL Response: {response_text}") if response.status == 200: - # Parsing JSON response data = await response.json() errors = data.get("errors") if errors: @@ -55,18 +44,14 @@ async def check_auth(req) -> (bool, int | None): user_id = data.get("data", {}).get(query_name, {}).get("claims", {}).get("sub") if user_id: - # Logging the retrieved user ID print(f"[services.auth] User ID retrieved: {user_id}") return True, user_id else: - # Logging when no user ID is found in the response print("[services.auth] No user ID found in the response") else: - # Logging when the request to the authentication server fails print(f"[services.auth] Request failed with status: {response.status}") except Exception as e: - # Handling and logging exceptions during authentication check print(f"[services.auth] {e}") return False, None @@ -75,16 +60,13 @@ async def check_auth(req) -> (bool, int | None): def login_required(f): @wraps(f) async def decorated_function(*args, **kwargs): - print(args) info = args[1] context = info.context req = context.get("request") is_authenticated, user_id = await check_auth(req) if not is_authenticated: - # Raising HTTPUnauthorized exception if the user is not authenticated raise HTTPUnauthorized(text="Please, login first") else: - # Добавляем author_id и user_id в контекст with local_session() as session: author = session.query(Author).filter(Author.user == user_id).first() if author: @@ -92,7 +74,6 @@ def login_required(f): if user_id: context["user_id"] = user_id - # Если пользователь аутентифицирован, выполняем резолвер return await f(*args, **kwargs) return decorated_function