fix: remove subject filter from API URL (Russian chars), fetch all tickets and filter in code
This commit is contained in:
+10
-5
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user