116 lines
4.4 KiB
Python
116 lines
4.4 KiB
Python
"""Скрипт для генерации тестовых данных."""
|
||
import argparse
|
||
import asyncio
|
||
import json
|
||
import random
|
||
from datetime import date, timedelta
|
||
from uuid import uuid4
|
||
|
||
from models.schedule import Schedule, Task
|
||
|
||
|
||
def generate_tasks(count: int = 5) -> list[Task]:
|
||
"""Генерировать тестовые задания."""
|
||
task_templates = [
|
||
{"title": "Утренняя зарядка", "category": "утренняя_рутина", "duration": 15},
|
||
{"title": "Чистка зубов", "category": "утренняя_рутина", "duration": 5},
|
||
{"title": "Завтрак", "category": "утренняя_рутина", "duration": 20},
|
||
{"title": "Рисование", "category": "обучение", "duration": 30},
|
||
{"title": "Чтение книги", "category": "обучение", "duration": 20},
|
||
{"title": "Игра с конструктором", "category": "игра", "duration": 45},
|
||
{"title": "Прогулка", "category": "игра", "duration": 60},
|
||
{"title": "Обед", "category": "отдых", "duration": 30},
|
||
{"title": "Тихий час", "category": "отдых", "duration": 60},
|
||
{"title": "Ужин", "category": "вечерняя_рутина", "duration": 30},
|
||
{"title": "Подготовка ко сну", "category": "вечерняя_рутина", "duration": 20},
|
||
]
|
||
|
||
selected = random.sample(task_templates, min(count, len(task_templates)))
|
||
tasks = []
|
||
|
||
for i, template in enumerate(selected):
|
||
tasks.append(
|
||
Task(
|
||
id=uuid4(),
|
||
title=template["title"],
|
||
description=f"Описание для {template['title']}",
|
||
duration_minutes=template["duration"],
|
||
category=template["category"],
|
||
completed=random.choice([True, False]),
|
||
order=i,
|
||
)
|
||
)
|
||
|
||
return tasks
|
||
|
||
|
||
def generate_schedules(user_id: str, count: int, start_date: date = None) -> list[Schedule]:
|
||
"""Генерировать тестовые расписания."""
|
||
if start_date is None:
|
||
start_date = date.today()
|
||
|
||
schedules = []
|
||
for i in range(count):
|
||
schedule_date = start_date + timedelta(days=i)
|
||
tasks = generate_tasks(random.randint(4, 8))
|
||
|
||
schedules.append(
|
||
Schedule(
|
||
id=uuid4(),
|
||
title=f"Расписание на {schedule_date.strftime('%d.%m.%Y')}",
|
||
date=schedule_date,
|
||
tasks=tasks,
|
||
user_id=user_id,
|
||
created_at=schedule_date.isoformat(),
|
||
)
|
||
)
|
||
|
||
return schedules
|
||
|
||
|
||
async def main():
|
||
"""Главная функция."""
|
||
parser = argparse.ArgumentParser(description="Генерация тестовых данных")
|
||
parser.add_argument("--users", type=int, default=10, help="Количество пользователей")
|
||
parser.add_argument("--schedules", type=int, default=50, help="Количество расписаний")
|
||
parser.add_argument("--output", type=str, default="test_data.json", help="Файл для сохранения")
|
||
|
||
args = parser.parse_args()
|
||
|
||
print(f"Генерация тестовых данных:")
|
||
print(f" Пользователей: {args.users}")
|
||
print(f" Расписаний: {args.schedules}")
|
||
|
||
data = {
|
||
"users": [],
|
||
"schedules": [],
|
||
}
|
||
|
||
# Генерируем пользователей
|
||
for _ in range(args.users):
|
||
user_id = str(uuid4())
|
||
data["users"].append(
|
||
{
|
||
"id": user_id,
|
||
"email": f"user_{random.randint(1000, 9999)}@example.com",
|
||
}
|
||
)
|
||
|
||
# Генерируем расписания для пользователя
|
||
schedules_per_user = args.schedules // args.users
|
||
user_schedules = generate_schedules(user_id, schedules_per_user)
|
||
data["schedules"].extend([s.model_dump() for s in user_schedules])
|
||
|
||
# Сохраняем в файл
|
||
with open(args.output, "w", encoding="utf-8") as f:
|
||
json.dump(data, f, ensure_ascii=False, indent=2, default=str)
|
||
|
||
print(f"\nДанные сохранены в {args.output}")
|
||
print(f" Пользователей: {len(data['users'])}")
|
||
print(f" Расписаний: {len(data['schedules'])}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|
||
|