Add calendar implementation: models, storage, CLI
This commit is contained in:
44
storage.py
Normal file
44
storage.py
Normal 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]
|
||||
Reference in New Issue
Block a user