Skip to content

Commit abd8585

Browse files
committed
fix: Replace httpx async client with non blocking sync request
1 parent f34b34e commit abd8585

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

backend/services/users/user_service.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
from databases import Database
66
from loguru import logger
77
from sqlalchemy import and_, desc, distinct, func, insert, select
8-
from httpx import AsyncClient
8+
import requests
9+
import asyncio
910

1011
from backend.config import Settings
1112
from backend.exceptions import NotFound
@@ -172,6 +173,9 @@ async def get_projects_mapped(user_id: int, db: Database):
172173

173174
@staticmethod
174175
async def get_and_save_stats(user_id: int, db: Database) -> dict:
176+
def sync_get(url, headers):
177+
return requests.get(url, headers=headers, timeout=10.0)
178+
175179
hashtag = settings.DEFAULT_CHANGESET_COMMENT.replace("#", "")
176180
oh_some_url = (
177181
f"{settings.OHSOME_STATS_API_URL}/stats/user?"
@@ -180,11 +184,17 @@ async def get_and_save_stats(user_id: int, db: Database) -> dict:
180184
)
181185
osm_user_details_url = f"{settings.OSM_SERVER_URL}/api/0.6/user/{user_id}.json"
182186

183-
oh_some_headers = {"Authorization": f"Basic {settings.OHSOME_STATS_TOKEN}"}
184-
185-
async with AsyncClient(timeout=10.0) as client:
186-
oh_some_response = await client.get(oh_some_url, headers=oh_some_headers)
187-
changeset_response = await client.get(osm_user_details_url)
187+
oh_some_headers = {
188+
"Authorization": f"Basic {settings.OHSOME_STATS_TOKEN}",
189+
"User-Agent": "HOT-Tasking-Manager/5.0",
190+
}
191+
osm_headers = {
192+
"User-Agent": "HOT-Tasking-Manager/5.0",
193+
}
194+
oh_some_response, changeset_response = await asyncio.gather(
195+
asyncio.to_thread(sync_get, oh_some_url, oh_some_headers),
196+
asyncio.to_thread(sync_get, osm_user_details_url, osm_headers),
197+
)
188198

189199
if oh_some_response.status_code != 200:
190200
error_msg = (
@@ -217,9 +227,7 @@ async def get_and_save_stats(user_id: int, db: Database) -> dict:
217227
topic_data["result"]["topics"]["changeset"] = {
218228
"value": changeset_data["user"]["changesets"]["count"],
219229
}
220-
221230
new_stats = await UserStats.update(user_id, topic_data, db)
222-
223231
return new_stats
224232

225233
@staticmethod

0 commit comments

Comments
 (0)