iiuni / projektzapisy

System Zapisów na zajęcia w Instytucie Informatyki Uniwersytetu Wrocławskiego
https://zapisy.ii.uni.wroc.pl
32 stars 10 forks source link

Pobieranie planu: Nie odpalać wyzwalaczy w trybie dry-run #957

Open jasiekmarc opened 4 years ago

jasiekmarc commented 4 years ago

Na początku semestru administrator SZ odpala skrypt do pobierania planu zajęć ze Schedulera. Najpierw robi to w trybie dry run, by upewnić się, że wszystkie ustawienia są poprawne. Z drugiej strony, gdy prowadzący zostaje przydzielony do nowej grupy, wysyłany jest mu e-mail.

Niestety, wyzwalacz ten jest uruchamiany także, gdy jesteśmy w trybie dry-run, więc prowadzący dostają e-maile o grupach, które istniały wyłącznie w porzuconej transakcji w bazie danych. Rozwiązaniem tego problemu mogłoby być sprawdzanie, przed wysyłaniem maila, czy rzeczona grupa istnieje.

jasiekmarc commented 2 years ago

Skrypt jest tutaj. Wyzwalacz, kolejkujący powiadomienie dla nowego prowadzącego grupę jest tutaj.

Problem można spróbować odtworzyć na stagingu albo w lokalnym środowisku testowym (ale nie w środowisku developerskim, bo tam nie jest skonfigurowany serwer poczty wychodzącej) — ustawiamy jakiemuś pracownikowi nasz e-mail, a następnie w konsoli (python manage.py shell) w transakcji (transaction.atomic()) przydzielamy mu jakieś zajęcia (po czym robimy rollback).

jasiekmarc commented 2 years ago

Chyba nie wiem, jak to prosto rozwiązać, bo w momencie wysyłania maila Django jest jeszcze w świecie tej transakcji, która będzie zrollbackowana. Ten skrypt jest intencjonalnie napisany tak, żeby jego poszczególne funkcje nie wiedziały czy są dry-run, czy na żywca.

Może użycie jakiegoś takiego dekoratora wyłączającego wybrane sygnały miałoby sens: https://gist.github.com/bruce-shi/fd0e3f5e2360c64bc9ce2efb254744f7 https://stackoverflow.com/a/71925334