dry run added
This commit is contained in:
41
sd_api.py
41
sd_api.py
@@ -3,7 +3,9 @@
|
||||
import requests
|
||||
import logging
|
||||
import json
|
||||
import os
|
||||
from typing import List, Dict, Any
|
||||
from datetime import datetime
|
||||
|
||||
# Импортируем нашу конфигурацию
|
||||
import config
|
||||
@@ -56,6 +58,12 @@ class ServiceDeskClient:
|
||||
error_message = f"Request failed for URL {url}: {e}"
|
||||
log.error(error_message)
|
||||
raise ServiceDeskAPIError(error_message) from e
|
||||
|
||||
def _ensure_test_output_dir(self):
|
||||
"""Проверяет и создает директорию для тестовых файлов."""
|
||||
if not os.path.exists(config.TEST_OUTPUT_PATH):
|
||||
os.makedirs(config.TEST_OUTPUT_PATH)
|
||||
log.info(f"Создана директория для тестовых данных: {config.TEST_OUTPUT_PATH}")
|
||||
|
||||
def get_all_frs(self) -> List[Dict]:
|
||||
"""Получает список всех фискальных регистраторов."""
|
||||
@@ -94,10 +102,28 @@ class ServiceDeskClient:
|
||||
def update_fr(self, uuid: str, data: Dict) -> None:
|
||||
"""
|
||||
Обновляет существующий фискальный регистратор.
|
||||
В режиме DRY_RUN сохраняет данные в файл.
|
||||
|
||||
:param uuid: UUID объекта для редактирования.
|
||||
:param data: Словарь с полями для обновления.
|
||||
"""
|
||||
if config.DRY_RUN:
|
||||
self._ensure_test_output_dir()
|
||||
filename = f"update_{uuid}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
||||
filepath = os.path.join(config.TEST_OUTPUT_PATH, filename)
|
||||
|
||||
# Сохраняем и URL, и параметры для полного понимания
|
||||
output_data = {
|
||||
"action": "UPDATE",
|
||||
"target_uuid": uuid,
|
||||
"payload": data
|
||||
}
|
||||
|
||||
with open(filepath, 'w', encoding='utf-8') as f:
|
||||
json.dump(output_data, f, indent=4, ensure_ascii=False)
|
||||
log.warning(f"[DRY RUN] Пропущено обновление {uuid}. Данные сохранены в {filepath}")
|
||||
return
|
||||
|
||||
log.info(f"Обновление объекта ФР с UUID: {uuid}...")
|
||||
# Примечание: старый код использовал POST с параметрами для редактирования.
|
||||
# Если API требует form-encoded data, а не JSON, нужно использовать `data=data` вместо `json=data`.
|
||||
@@ -109,10 +135,25 @@ class ServiceDeskClient:
|
||||
def create_fr(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Создает новый фискальный регистратор.
|
||||
В режиме DRY_RUN сохраняет тело запроса в файл.
|
||||
|
||||
:param data: Словарь с данными для создания объекта (тело запроса).
|
||||
:return: JSON-ответ от сервера, содержащий UUID нового объекта.
|
||||
"""
|
||||
serial_number = data.get('FRSerialNumber', 'unknown_sn')
|
||||
if config.DRY_RUN:
|
||||
self._ensure_test_output_dir()
|
||||
filename = f"create_{serial_number}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
||||
filepath = os.path.join(config.TEST_OUTPUT_PATH, filename)
|
||||
|
||||
# Сохраняем только тело запроса
|
||||
with open(filepath, 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f, indent=4, ensure_ascii=False)
|
||||
log.warning(f"[DRY RUN] Пропущено создание ФР с S/N {serial_number}. Body запроса сохранено в {filepath}")
|
||||
|
||||
# В режиме dry run возвращаем фейковый ответ, чтобы не сломать вызывающий код
|
||||
return {"action": "DRY_RUN_CREATE", "saved_to": filepath}
|
||||
|
||||
log.info(f"Создание нового ФР с серийным номером: {data.get('FRSerialNumber')}...")
|
||||
# Параметр для получения UUID в ответе
|
||||
params = {'attrs': 'UUID'}
|
||||
|
||||
Reference in New Issue
Block a user