This commit is contained in:
139
mobile_format_test.py
Executable file
139
mobile_format_test.py
Executable file
@@ -0,0 +1,139 @@
|
||||
#!/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=== ТЕСТИРОВАНИЕ ЗАВЕРШЕНО ===")
|
||||
Reference in New Issue
Block a user