Vaším úkolem za 5 bodů je vytvořit asynchronní zpracování repozitářů, commitů a příslušného nastavení
commit statusů v rámci aplikace committee
s použitím knihovny aiohttp.
-
Upravte CLI tak, aby bylo možné zadat libovolný počet repozitářů ke zpracování (pozor, že musíte kontrolovat jejich správnost) pomocí argumentu
reposlug
. -
Do implementace CLI nástroje
committee
doplňte přepínač--async/--no-async
(výchozí je ne-asynchronní), se kterým bude zpracování repozitářů a issue probíhat v asynchronním režimu pomocí aiohttp:-
Pokud je zadáno více repozitářů v argumentech, pak se zpracovávají asynchronně.
-
Získání seznamu commitů z více stránek musí být asynchronní (čeká se synchronně jen na první stránku pro zjištění počtu stránek).
-
Zpracování jednotlivých commitů je asynchronní.
-
-
Výstup je obdobný tomu z první úlohy s tím, že se v něm mohou objevovat commity (případně chyby) z různých repozitářů a že pořadí jednotlivých commitů při asynchronním zpracování nehraje roli.
-
Před SHA commitu přidejte reposlug repozitáře (viz aktualizované testy).
-
Pro synchronní verzi jsou repozitáře zpracovány v pořadí tak, jak je zadal uživatel.
-
Jinak je očekávaný výstup totožný včetně použití barev a různých módů.
-
-
Popište tento nový režim v dokumentaci.
-
(nepovinně) Rozšiřte vlastní jednotkové testy o testování práce v asynchronním režimu. Pozor ale, že betamax funguje pouze s knihovnou requests. Pro obecné mockování HTTP komunikace doporučujeme vyzkoušet vcrpy (má trochu jiné API, ale principy zůstávají stejné).
-
Původní funkcionalita musí zůstat zachována. Možností by bylo samozřejmě napsat zcela odděleně asynchronní logiku, ale znovupoužitím a případným upravením existujících částí kódu můžete ušetřit relativně hodně času (například s využitím návrhových vzorů Strategy a/nebo Observer).
Námi dodané testy z minulých úloh jsou stále závazné. Byly upraveny tak, aby správně testovaly nové
výstupy, zpracování více repozitářů a možnost přepínače --async
. Testy ale nestestují, že
jsou repozitáře, stránky commitů a jednotlivé commity skutečně zpracovávány asynchronně.
Následuje text z minula, který stále platí:
K úloze existuje sada testů.
Pro jejich spuštění nainstalujte do virtuálního prostředí balík pytest
.
Testy vyžadují určitý setup repozitářů. Pro jeho vytvoření použijte skript
test_environment/setup.sh
. Je třeba nastavit proměnné prostředí
GH_TOKEN
a GH_USER
.
Token musí příslušet danému uživateli a mít scope repo
.
Skript využívá program hub, který si nejprve zprovozněte.
Skript vytvoří na GitHubu 3 repozitáře:
-
committee-basic
-
committee-rules
-
committee-radioactive
Pokud by vám to vadilo, použijte testovací účet k tomuto určený.
Commit status nelze na GitHub smazat, tudíž jedinou možností, jak vyčistit
případný nepořádek je repozitáře smazat pomocí skriptu
test_environment/delete.sh
(potřeba scope delete_repo
) a vytvořit znovu.
Nicméně jsou testy napsané tak, že když jsou správně implementovány přepínače
--dry-run
a --force
, tak lze pouštět testy opakovaně bez nutnosti čistění
repozitářů.
Pro spuštění testů si do virtuálního prostředí si nainstalujte pytest
,
nastavte stejné proměnné prostředí (GH_TOKEN
a GH_USER
) a spusťte pytest
:
(__venv__) $ python -m pip install pytest
(__venv__) $ export GH_USER=anicka
(__venv__) $ export GH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(__venv__) $ python -m pytest -v tests
Testy v souboru test_radioactive_waste.py
trvají dlouho a mají potenciál
vyřadit vás na hodinu z přístupu ke GitHub API.
Když ladíte ostatní testy, doporučujeme je vypínat pomocí přepínače -k
:
$ python -m pytest -v -k "not radioactive" test
Testy si můžete zkopírovat k sobě do repozitáře, považujte je za Public Domain.
Nepřidávejte ale do repozitáře nikdy konfigurační soubory z tests/fixtures/config
,
které se v průběhu testů vytváří a obsahují váš token.
Součástí výstupu selhaných testů je i kompletní způsob volání.
ℹ️
|
Testy proti živému API a závisí tak na daném stavu repozitáře, jsou ukázkou toho, jak se to nemá dělat. Pokud narazíte v testech na problém, nebo nevíte jak dál, zeptejte se. K tomu, jak se to dělá pořádně, se v předmětu dostaneme později. |
|
Testy netestují barevnost výstupu. I neobarvený výstup projde testy. Barevnost kontrolujte očima. |
|
Splnění testů není nutnou ale pouze postačující podmínkou pro plný počet bodů. Na druhou stranu lze odevzdat i úlohu, která neprojde všemi testy pro získání alespoň adekvátní části bodů. |