- Rename calendar_app → scheduling (integration app for django-scheduler) - Move schedule_patch.py → scheduling/patch.py with improved logging - Create scheduling.notifications system for django-scheduler events - Add scheduling.rules for django-rules integration - Remove unused calendar_app models and API (not registered in urls) - Remove backend/api/v1/calendar/ (dead code) - Remove old tests for calendar_app - Add comprehensive documentation in scheduling/README.md - Update settings.py: calendar_app.apps.CalendarAppConfig → scheduling.apps.SchedulingConfig - Clean api/apps.py: remove schedule_patch import (now in scheduling.apps) The scheduling app provides: - Patches for django-scheduler bugs (byweekday fix) - Notification system for calendar events - Access rules via django-rules - Auto-applies on Django startup Closes integration of django-scheduler for EUSRR calendar system.
4.5 KiB
Scheduling App
Приложение для интеграции и расширения django-scheduler в EUSRR.
Содержимое
📦 Основные модули
patch.py- Исправление бага django-scheduler сbyweekdaynotifications/- Система уведомлений для событий календаряrules.py- Правила доступа django-rules для календарей и событийapps.py- Конфигурация приложения (применяет патчи, регистрирует сигналы)
🔧 Патчи
Проблема django-scheduler:
При создании повторяющегося события с byweekday=[1, 4] (вторник и пятница), если событие создается в пятницу, django-scheduler неправильно заменяет весь массив на [4], игнорируя вторник.
Решение:
Модуль patch.py автоматически применяется при запуске Django и исправляет метод Event._event_params().
🔔 Уведомления
Автоматические уведомления для событий calendar через django signals:
- Создание события → уведомление всем участникам календаря
- Изменение события → уведомление при изменении важных полей (название, время, описание)
- Удаление события → уведомление об отмене
Конфигурация:
notifications/config.py- шаблоны сообщений, URL-адресаnotifications/handlers.py- бизнес-логика отправки уведомленийnotifications/signals.py- Django signals для автоматической обработки
🔐 Права доступа
Интеграция с django-rules для объектных прав доступа:
# В коде
if user.has_perm('can_edit_calendar', calendar):
# Редактирование разрешено
# В шаблонах
{% if request.user|has_rule:'can_edit_event' event %}
<button>Редактировать</button>
{% endif %}
Правила:
can_view_calendar/can_view_event- просмотрcan_edit_calendar/can_edit_event- редактированиеcan_delete_calendar/can_delete_event- удаление
Права проверяются через CalendarRelation из django-scheduler.
Установка
Приложение автоматически активируется при добавлении в INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'schedule', # django-scheduler (обязательно перед scheduling)
'scheduling', # Интеграция и расширения
# ...
]
Использование
Отправка уведомлений вручную
from scheduling.notifications.handlers import (
notify_event_created,
notify_event_changed,
notify_event_cancelled
)
from schedule.models import Event
event = Event.objects.get(id=1)
# Создано
notify_event_created(event, creator=request.user)
# Изменено
notify_event_changed(event, changed_fields=['title', 'start'], modifier=request.user)
# Отменено
notify_event_cancelled(event, canceller=request.user)
Передача контекста для уведомлений в ViewSet
class EventViewSet(viewsets.ModelViewSet):
def perform_create(self, serializer):
event = serializer.save()
# Передаем создателя для уведомлений
event._creator = self.request.user
event.save()
Зависимости
django-scheduler >= 0.12.0django-rules(опционально, для rules.py)django-notifications-hq(для системы уведомлений)
История
Это приложение заменило старое calendar_app, которое содержало самописный календарь.
После перехода на django-scheduler, calendar_app был переименован в scheduling
и переориентирован на интеграцию, патчи и расширения для django-scheduler.
Дата миграции: 10 марта 2026 г.