43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
import httpx
|
|
from app.core import config
|
|
from app.core.localizer import localizer
|
|
from app.core.http_client import authorized_get
|
|
from app.core.models.search_models import SearchResponse, SearchData
|
|
|
|
|
|
async def search_by_query(login: str, token: str, query: str):
|
|
"""
|
|
Поиск по строке: пользователи (префикс), далее можно расширить под группы/каналы/сообщения.
|
|
|
|
:return: tuple (ok: bool, data: SearchData | str)
|
|
"""
|
|
url = f"{config.BASE_URL}/v1/feed/search"
|
|
headers = {"Authorization": f"Bearer {token}"}
|
|
params = {"query": query}
|
|
|
|
try:
|
|
response = await authorized_get(url, login=login, access_token=token, headers=headers, params=params)
|
|
|
|
print("response.status_code", response.status_code)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
if data.get("status") == "fine":
|
|
model = SearchResponse(**data)
|
|
return True, model.data
|
|
return False, data.get("detail", localizer.translate("Произошла ошибка"))
|
|
|
|
if response.status_code in [401, 403]:
|
|
error_data = response.json()
|
|
return False, error_data.get("detail", localizer.translate("Недостаточно прав или неавторизован"))
|
|
|
|
if response.status_code == 422:
|
|
return False, localizer.translate("Некорректные параметры запроса")
|
|
|
|
return False, f"{localizer.translate('Неожиданный статус')}: {response.status_code}"
|
|
|
|
except httpx.RequestError as e:
|
|
return False, f"{localizer.translate('Сетевая ошибка')}: {e}"
|
|
except Exception as e:
|
|
return False, f"{localizer.translate('Внутренняя ошибка')}: {e}"
|
|
|