All checks were successful
continuous-integration/drone/push Build is passing
139 lines
5.6 KiB
Python
Executable File
139 lines
5.6 KiB
Python
Executable File
#!/usr/bin/env python
|
||
|
||
"""
|
||
Скрипт для демонстрации преобразования данных мобильного формата в формат сервера.
|
||
Показывает, как преобразовывать данные и какие поля ожидает сервер.
|
||
"""
|
||
|
||
import json
|
||
import requests
|
||
from datetime import date, datetime
|
||
|
||
# Пример данных из мобильного приложения
|
||
MOBILE_DATA_EXAMPLES = [
|
||
{
|
||
"date": "2025-09-26",
|
||
"type": "MENSTRUATION",
|
||
"flow_intensity": 3,
|
||
"symptoms": ["CRAMPS", "HEADACHE"],
|
||
"mood": "NORMAL",
|
||
"notes": "Пример записи о менструации"
|
||
},
|
||
{
|
||
"date": "2025-09-30",
|
||
"type": "OVULATION",
|
||
"symptoms": ["BREAST_TENDERNESS"],
|
||
"mood": "HAPPY",
|
||
"notes": "Пример записи об овуляции"
|
||
},
|
||
{
|
||
"date": "2025-10-05",
|
||
"type": "SPOTTING",
|
||
"flow_intensity": 1,
|
||
"symptoms": ["BLOATING"],
|
||
"mood": "STRESSED",
|
||
"notes": "Пример записи о выделениях"
|
||
}
|
||
]
|
||
|
||
def test_format_conversion(mobile_data):
|
||
"""Тестирование преобразования формата данных"""
|
||
url = "http://localhost:8004/debug/mobile-entry"
|
||
|
||
headers = {
|
||
"Content-Type": "application/json"
|
||
}
|
||
|
||
print(f"\nТестирование преобразования данных: {json.dumps(mobile_data, ensure_ascii=False)}")
|
||
|
||
try:
|
||
response = requests.post(url, json=mobile_data, headers=headers)
|
||
|
||
if response.status_code == 200:
|
||
result = response.json()
|
||
|
||
print("✅ Успешное преобразование данных")
|
||
print("\nОригинальные данные (мобильный формат):")
|
||
print(json.dumps(result["original_data"], ensure_ascii=False, indent=2))
|
||
|
||
print("\nПреобразованные данные (формат сервера):")
|
||
print(json.dumps(result["transformed_data"], ensure_ascii=False, indent=2))
|
||
|
||
print("\nАнализ преобразования:")
|
||
print(f"- Дата: {mobile_data['date']} -> {result['transformed_data']['entry_date']}")
|
||
print(f"- Тип: {mobile_data['type']} -> {result['transformed_data']['entry_type']}")
|
||
|
||
if mobile_data.get('flow_intensity'):
|
||
print(f"- Интенсивность: {mobile_data['flow_intensity']} -> {result['transformed_data']['flow_intensity']}")
|
||
|
||
if mobile_data.get('symptoms'):
|
||
print(f"- Симптомы: {', '.join(mobile_data['symptoms'])} -> {result['transformed_data']['symptoms']}")
|
||
|
||
if mobile_data.get('mood'):
|
||
print(f"- Настроение: {mobile_data['mood']} -> {result['transformed_data']['mood'] or 'Не задано'}")
|
||
|
||
return result
|
||
else:
|
||
print(f"❌ Ошибка: {response.status_code}")
|
||
print(response.text)
|
||
return None
|
||
except Exception as e:
|
||
print(f"❌ Исключение: {str(e)}")
|
||
return None
|
||
|
||
def generate_documentation():
|
||
"""Генерация документации по формату данных"""
|
||
print("\n=== ДОКУМЕНТАЦИЯ ПО ФОРМАТУ ДАННЫХ ===\n")
|
||
print("Мобильный формат данных должен соответствовать следующей схеме:")
|
||
|
||
schema = {
|
||
"date": "string (формат YYYY-MM-DD, например '2025-09-26')",
|
||
"type": "string (один из: MENSTRUATION, OVULATION, SPOTTING, DISCHARGE, PAIN, MOOD)",
|
||
"flow_intensity": "integer (опционально, значения от 1 до 5)",
|
||
"symptoms": "массив строк (опционально, например ['CRAMPS', 'HEADACHE'])",
|
||
"mood": "string (опционально, одно из: HAPPY, SAD, NORMAL, STRESSED, ANXIOUS, IRRITATED)",
|
||
"notes": "string (опционально, текстовые заметки)"
|
||
}
|
||
|
||
print(json.dumps(schema, ensure_ascii=False, indent=2))
|
||
|
||
print("\nМаппинг между форматами:")
|
||
|
||
mapping = {
|
||
"Типы записей": {
|
||
"MENSTRUATION": "period",
|
||
"OVULATION": "ovulation",
|
||
"SPOTTING": "symptoms",
|
||
"DISCHARGE": "symptoms",
|
||
"PAIN": "symptoms",
|
||
"MOOD": "mood"
|
||
},
|
||
"Интенсивность выделений": {
|
||
"1": "light",
|
||
"2": "light",
|
||
"3": "medium",
|
||
"4-5": "heavy"
|
||
},
|
||
"Настроение": {
|
||
"HAPPY": "happy",
|
||
"SAD": "sad",
|
||
"NORMAL": "happy", # Маппится на happy
|
||
"STRESSED": "anxious",
|
||
"ANXIOUS": "anxious",
|
||
"IRRITATED": "irritated"
|
||
},
|
||
"Симптомы": "Преобразуются из массива строк в строку с разделителями-запятыми"
|
||
}
|
||
|
||
print(json.dumps(mapping, ensure_ascii=False, indent=2))
|
||
|
||
if __name__ == "__main__":
|
||
print("=== ТЕСТИРОВАНИЕ ПРЕОБРАЗОВАНИЯ ДАННЫХ МОБИЛЬНОГО ФОРМАТА ===\n")
|
||
|
||
for i, example in enumerate(MOBILE_DATA_EXAMPLES):
|
||
print(f"\n--- Пример #{i+1} ---")
|
||
test_format_conversion(example)
|
||
|
||
generate_documentation()
|
||
|
||
print("\n=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===") |