Přeskočit obsah

Osmý sraz

2026-03-26

Lektor:
Martin Zelený

Zápis:
Dagmar Vodáková


Na dnešním srazu jsme prošli otevřené Pull Requesty od Niny a Patricie. Po technické části jsme se přesunuli na Pyvo do Artbaru.

Pull Request #8 v repozitáři quiz_server od Niny byl úspěšně schválen a uzavřen.

Pull Request #2 v repozitáři quiz_common od Patricie zatím čeká na otestování.


PR #8 Admin sees connected and disconnected clients

Cílem tohoto PR bylo umožnit adminovi sledovat, kolik hráčů je aktuálně připojených, a zároveň mít přehled o jejich připojení a odpojení v reálném čase.
Samotné změny jsme si prošli už na minulém srazu, takže dnes jsme se zaměřili hlavně na drobné úpravy po code review a prakticky si ukázali celý proces uzavření Pull Requestu.

Shrnutí změn v kódu

  1. Byla přidána metoda __len__ do třídy Players, která vrací počet aktuálně připojených hráčů
  2. Adminův websocket se ukládá do app.state.admin, což umožňuje serveru komunikovat přímo s adminem

Postup uzavření PR krok za krokem

1. Úpravy podle review
Martin v minulém týdnu zapsal poznámky do changelogu, které Nina akceptovala a upravila kód.

2. Stažení a otestování větve
Martin si stáhl Nininu větev a ověřil funkčnost spuštěním kvízu.

3. Schválení PR
Protože vše fungovalo podle očekávání, Martin PR schválil (approve).

4. Merge změn
Nina provedla merge pomocí Squash and Merge, čímž se všech 5 commitů se sloučilo do jednoho. Po merge byla větev na GitHubu smazána, abychom měli uklizeno.

5. Uzavření issue
Uzavíráme Issue #7 Admin should see the number of clients na které byl PR navázaný.

6. Synchronizace lokálního repozitáře
Po merge je potřeba si aktualizovat a uklidit lokální prostředí.

  • git fetch --prune stáhne změny z remote repozitáře a odstraní reference na již smazané větve

  • git branch -D nb_show_players smaže lokální větev nb_show_players i když není mergnutá lokálně


PR #2 Allow non-string types in Option.answer field and auto-convert to string

Patricie v tomto PR opravovala bug popsaný v Issue #2 Linux quiz YAML is not valid od Davida.
Protože se issue nachází v jiném repozitáři, není možné ho s PR přímo propojit. Řešením je přesunout issue do správného repozitáře quiz_common (transfer issue), aby odpovídalo místu, kde se problém skutečně řeší.
Patricie nám popsala změny, které v kódu provedla, vysvětlili jsme si, jak funguje nově přidaná validace a Martin nám ukázal, jak spouštět unit testy. Na závěr jsme narazili na to, že změny zatím nelze plnohodnotně otestovat v rámci celého projektu, takže PR zatím zůstává otevřený.

Změny v kódu

1. Přidána validace dat (Pydantic)

  • Metoda convert_to_string zajišťuje, že vstup je vždy string.

  • Dekorátor @field_validator se spustí při nastavování hodnoty, kontroluje a případně upraví vstupní data.

  • Poznámka # noqa: FBT001 potlačí konkrétní warning, v našem případě použití bool jako pozičního argumentu.

2. Přidány unit testy

unit test = malý rychlý test jedné funkce izolovaný od zbytku systému

Aby šly testy spouštět, je nutné nainstalovat knihovnu pytest.

  • uv add --dev pytest přidá pytest mezi development dependencies

Aby pytest testy spustil, je důležité správné pojmenování. Soubory s testy test_xxx.py obsahují funkce test_xxx().

  • uv run pytest spustí testy

Proč zatím nelze PR mergnout

Aby bylo možné změny otestovat v praxi, knihovna quiz_common musí být zabalena jako balíček nainstalovaný do repozitářů quiz_server a quiz_admin.
Bez toho ostatní části projektu nemají k novému kódu přístup a není možné ověřit integraci.

Další kroky

  1. zabalit quiz_common jako Python balíček
  2. nainstalovat ho do ostatních částí projektu
  3. otestovat integraci
  4. následně PR schválit a mergnout

Poznámka na závěr

Do quiz_client bude také potřeba přidat závislost na quiz_common, aby všechny části projektu používaly stejné modely a validace.