44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import json
|
||
import os
|
||
from typing import List
|
||
from models import Event
|
||
|
||
DATA_FILE = "calendar_data.json"
|
||
|
||
def load_events() -> List[Event]:
|
||
"""Загружает события из JSON файла"""
|
||
if not os.path.exists(DATA_FILE):
|
||
return []
|
||
|
||
try:
|
||
with open(DATA_FILE, 'r', encoding='utf-8') as f:
|
||
data = json.load(f)
|
||
return [Event.from_dict(item) for item in data]
|
||
except (json.JSONDecodeError, FileNotFoundError):
|
||
return []
|
||
|
||
def save_events(events: List[Event]) -> None:
|
||
"""Сохраняет события в JSON файл"""
|
||
with open(DATA_FILE, 'w', encoding='utf-8') as f:
|
||
data = [event.to_dict() for event in events]
|
||
json.dump(data, f, ensure_ascii=False, indent=2)
|
||
|
||
def add_event(event: Event) -> None:
|
||
"""Добавляет новое событие"""
|
||
events = load_events()
|
||
events.append(event)
|
||
save_events(events)
|
||
|
||
def remove_event(index: int) -> bool:
|
||
"""Удаляет событие по индексу (начиная с 0)"""
|
||
events = load_events()
|
||
if 0 <= index < len(events):
|
||
del events[index]
|
||
save_events(events)
|
||
return True
|
||
return False
|
||
|
||
def get_events_by_date(date: str) -> List[Event]:
|
||
"""Возвращает события на конкретную дату"""
|
||
events = load_events()
|
||
return [e for e in events if e.date == date] |