diff --git a/main.py b/main.py index b30eb45..790ec19 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,9 @@ import os import asyncio from os.path import exists +from sentry_sdk.integrations.aiohttp import AioHttpIntegration +from sentry_sdk.integrations.redis import RedisIntegration +from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration from sentry_sdk.integrations.strawberry import StrawberryIntegration from strawberry.asgi import GraphQL from starlette.applications import Starlette @@ -35,6 +38,9 @@ async def start_up(): # at least one async resolver async_execution=True ), + SqlalchemyIntegration(), + RedisIntegration(), + AioHttpIntegration(), ], ) except Exception as e: diff --git a/pyproject.toml b/pyproject.toml index b91509a..9a263a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,13 +11,13 @@ authors = ["discours.io devteam"] [tool.poetry.dependencies] python = "^3.12" SQLAlchemy = "^2.0.22" -httpx = "^0.25.0" psycopg2-binary = "^2.9.9" redis = {extras = ["hiredis"], version = "^5.0.1"} uvicorn = "^0.24.0.post1" strawberry-graphql = {extras = ["asgi", "debug-server"], version = "^0.215.1" } sentry-sdk = "^1.37.1" strawberry-sqlalchemy-mapper = "^0.3.1" +aiohttp = "^3.9.1" [tool.poetry.dev-dependencies] pytest = "^7.4.2" diff --git a/services/auth.py b/services/auth.py index c071944..b95f8c5 100644 --- a/services/auth.py +++ b/services/auth.py @@ -1,5 +1,5 @@ from functools import wraps -from httpx import AsyncClient +import aiohttp from orm.author import Author from services.db import local_session @@ -21,16 +21,16 @@ async def check_auth(req): "variables": None, } - async with AsyncClient(timeout=30.0) as client: - response = await client.post(AUTH_URL, headers=headers, json=gql) - print(f"[services.auth] {AUTH_URL} response: {response.status_code}") - if response.status_code != 200: - return False, None - r = response.json() - if r: - user_id = r.get("data", {}).get(query_name, {}).get("user", {}).get("id", None) - is_authenticated = user_id is not None - return is_authenticated, user_id + async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=30.0)) as session: + async with session.post(AUTH_URL, headers=headers, json=gql) as response: + print(f"[services.auth] {AUTH_URL} response: {response.status}") + if response.status != 200: + return False, None + r = await response.json() + if r: + user_id = r.get("data", {}).get(query_name, {}).get("user", {}).get("id", None) + is_authenticated = user_id is not None + return is_authenticated, user_id return False, None diff --git a/services/core.py b/services/core.py index 50b0ba7..3972efe 100644 --- a/services/core.py +++ b/services/core.py @@ -1,22 +1,22 @@ from typing import List, Any -from httpx import AsyncClient +import aiohttp from settings import API_BASE headers = {"Content-Type": "application/json"} async def _request_endpoint(query_name, body): - async with AsyncClient() as client: + async with aiohttp.ClientSession() as session: try: - response = await client.post(API_BASE, headers=headers, json=body) - print(f"[services.core] {query_name}: [{response.status_code}] {len(response.text)} bytes") - if response.status_code != 200: - return [] - r = response.json() - if r: - return r.get("data", {}).get(query_name, {}) - else: - raise Exception("json response error") + async with session.post(API_BASE, headers=headers, json=body) as response: + print(f"[services.core] {query_name}: [{response.status}] {len(await response.text())} bytes") + if response.status != 200: + return [] + r = await response.json() + if r: + return r.get("data", {}).get(query_name, {}) + else: + raise Exception("json response error") except Exception: import traceback