Files
chat/mobile_format_test.py
Andrew K. Choi 76d0d86211
All checks were successful
continuous-integration/drone/push Build is passing
calendar events
2025-09-26 15:57:50 +09:00

139 lines
5.6 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===")