fix: remove subject filter from API URL (Russian chars), fetch all tickets and filter in code

This commit is contained in:
Денис Кривоченко
2026-07-29 01:28:45 +07:00
parent c42854c3a5
commit dd14853362
+10 -5
View File
@@ -217,26 +217,31 @@ async def _find_existing_trueconf_ticket(cn: str, requester_email: str = None) -
""" """
subject = "Запрос доступа к Trueconf" subject = "Запрос доступа к Trueconf"
try: try:
# Забираем все заявки с темой (без фильтра по статусу — проверяем в коде) # Забираем все заявки без фильтра — API v3 некорректно работает с русскими буквами в filter
url = f"{SD_URL.rstrip('/')}/api/v3/requests?filter=subject:{subject}&fields=id,subject,requester,status" url = f"{SD_URL.rstrip('/')}/api/v3/requests?fields=id,subject,requester,status"
headers = {"TECHNICIAN_KEY": SD_TOKEN} headers = {"TECHNICIAN_KEY": SD_TOKEN}
async with httpx.AsyncClient(verify=False) as client: async with httpx.AsyncClient(verify=False) as client:
resp = await client.get(url, headers=headers, timeout=10.0) resp = await client.get(url, headers=headers, timeout=10.0)
if resp.status_code == 200: if resp.status_code == 200:
data = resp.json() data = resp.json()
requests_list = data.get("requests", []) requests_list = data.get("requests", [])
logger.info(f"Found {len(requests_list)} tickets with subject='{subject}', searching for CN={cn}") logger.info(f"Found {len(requests_list)} total tickets, searching for CN={cn}")
for req in requests_list: for req in requests_list:
# Фильтруем по subject в коде
if subject not in req.get("subject", ""):
continue
req_status = req.get("status", {}) req_status = req.get("status", {})
status_name = req_status.get("name", "") if isinstance(req_status, dict) else str(req_status) status_name = req_status.get("name", "") if isinstance(req_status, dict) else str(req_status)
req_id = req.get("id") req_id = req.get("id")
req_name = req_status.get("requester", {}).get("name", "") if isinstance(req_status.get("requester"), dict) else ""
logger.info(f"Ticket {req_id}: status={status_name}")
# Пропускаем закрытые заявки # Пропускаем закрытые заявки
if status_name in ("Resolved", "Rejected", "Closed", "Solved"): if status_name in ("Resolved", "Rejected", "Closed", "Solved"):
logger.info(f"Skipping ticket {req_id}: status={status_name}")
continue continue
logger.info(f"Checking ticket {req_id}: status={status_name}")
# Получаем детали заявки для поиска по описанию # Получаем детали заявки для поиска по описанию
detail_url = f"{SD_URL.rstrip('/')}/api/v3/requests/{req_id}" detail_url = f"{SD_URL.rstrip('/')}/api/v3/requests/{req_id}"
detail_resp = await client.get(detail_url, headers=headers, timeout=10.0) detail_resp = await client.get(detail_url, headers=headers, timeout=10.0)