Add calendar implementation: models, storage, CLI

This commit is contained in:
Дедов Егор Сергеевич
2026-05-18 14:51:05 +03:00
parent 2a35a9ce78
commit 816c9f1cda
6 changed files with 228 additions and 0 deletions

44
storage.py Normal file
View File

@@ -0,0 +1,44 @@
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]