Refa: convert download_img to async (#13477)

### What problem does this PR solve?

Convert download_img to async.

### Type of change

- [x] Refactoring
- [x] Performance Improvement
This commit is contained in:
Yongteng Lei
2026-03-09 19:00:17 +08:00
committed by GitHub
parent 52bcd98d29
commit 7484298c82
4 changed files with 14 additions and 10 deletions

View File

@ -222,7 +222,7 @@ async def oauth_callback(channel):
if not users:
try:
try:
avatar = download_img(user_info.avatar_url)
avatar = await download_img(user_info.avatar_url)
except Exception as e:
logging.exception(e)
avatar = ""
@ -317,7 +317,7 @@ async def github_callback():
# User isn't try to register
try:
try:
avatar = download_img(user_info["avatar_url"])
avatar = await download_img(user_info["avatar_url"])
except Exception as e:
logging.exception(e)
avatar = ""
@ -421,7 +421,7 @@ async def feishu_callback():
# User isn't try to register
try:
try:
avatar = download_img(user_info["avatar_url"])
avatar = await download_img(user_info["avatar_url"])
except Exception as e:
logging.exception(e)
avatar = ""

View File

@ -27,16 +27,16 @@ import uuid
from concurrent.futures import ThreadPoolExecutor
import requests
def get_uuid():
return uuid.uuid1().hex
def download_img(url):
async def download_img(url):
if not url:
return ""
response = requests.get(url)
from common.http_client import async_request
response = await async_request("GET", url)
return "data:" + \
response.headers.get('Content-Type', 'image/jpg') + ";" + \
"base64," + base64.b64encode(response.content).decode("utf-8")

View File

@ -218,6 +218,7 @@ markers = [
"p3: low priority test cases",
"smoke: smoke test cases",
"auth: authentication UI tests",
"asyncio: mark test as async",
]
# Test collection and runtime configuration

View File

@ -15,6 +15,7 @@
#
import uuid
import hashlib
import pytest
from common.misc_utils import get_uuid, download_img, hash_str2int, convert_bytes
@ -91,14 +92,16 @@ class TestGetUuid:
class TestDownloadImg:
"""Test cases for download_img function"""
def test_empty_url_returns_empty_string(self):
@pytest.mark.asyncio
async def test_empty_url_returns_empty_string(self):
"""Test that empty URL returns empty string"""
result = download_img("")
result = await download_img("")
assert result == ""
def test_none_url_returns_empty_string(self):
@pytest.mark.asyncio
async def test_none_url_returns_empty_string(self):
"""Test that None URL returns empty string"""
result = download_img(None)
result = await download_img(None)
assert result == ""