Vaším úkolem za 5 bodů je vytvořit asynchronní zpracování repozitářů,
issues a jejich oštítkování v rámci aplikace ghia
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
ghia
doplňte přepínač-x
/--async
, 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 issue 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 issue je asynchronní.
-
-
Výstup je obdobný tomu z první úlohy s tím (viz níže), že se v něm mohou objevovat issue (případně chyby) z různých repozitářů a že pořadí jednotlivých issue při asynchronním zpracování nehraje roli. Vypisujte vždy zpracování jednoho issue najednou tak, aby název a odkaz na issue byl následován změnami daného issue a nedošlo ke smíchání s jinými issue.
-
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é.
Následuje text z minula, který stále platí:
|
Testy netestují splnění tohoto úkolu, Testují pouze to, že se nic nerozbilo a že funguje spuštění pomocí příkazů výše. |
ℹ️
|
Před spuštěním testů předpokládejte, že je váš balíček nainstalován.
Toho můžete docílit například pomocí python setup.py develop
nebo pip install -e.
|
K úkolu na moduly jsou dodány extra testy ve složce test_module
, které simulují reálnou instalaci
vašeho balíčku ghia
z naklonovaného repozitáře i z testovací PyPI. Navíc testují
i další náležitosti požadované v tomto zadání (sdist bez warningů, submoduly, závislosti,
klíčová slova a další metadata). Tyto testy vyžadují nastavené proměnné prostředí
CTU_USERNAME
a GHIA_REPO
pro získání vaší verze ghia (pipem a gitem). V rámci
testů spouští subprocesy a pokud se na vašem OS jmenují jinak nebo jsou v jiné cestě, než
standardně na Linuxu, budete muset upravit soubor fixtures/test_config.cfg
. V případě
potřeby založte issue. Tyto testy nepracují s aktuálním kódem „kolem nich“, ale s tím, co
je dostupné přes PyPI (publikováno) a GitHub (napushováno). Testy spustíte pomocí:
$ python -m pytest -v test_module
K úloze existuje sada integračních/akceptačních testů (k úlohám na click+requests a flask).
Pro jejich spuštění nainstalujte do virtuálního prostředí balík pytest
.
Testy vyžadují určitý setup repozitáře v rámci organizace MI-PYT-ghia, do
které budete pozváni po zaslání emailu s Vaším GitHub účtem některému ze
cvičících. Pro jeho vytvoření použijte skript setup.sh
z adresáře tests_environment
.
Je třeba nastavit proměnné prostředí GITHUB_TOKEN
a GITHUB_USER
.
Token musí příslušet danému uživateli a mít scope repo
.
Skript je potřeba spouštět z adresáře tests_environment
.
Skript využívá program hub, který si nejprve zprovozněte. Potřebujete alepsoň verzi 2.8.3. Skript je otestován na Linux i Windows (pomocí git bash).
$ cd tests_environment
$ export GITHUB_USER=anicka
$ export GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ ./setup.sh
Testy jsou napsané tak, že pokud váš program funguje dle zadání,
dají se pouštět opakovaně. Pokud ale dle zadání nefunguje,
je třeba smazat repozitář a vytvořit jej s issues znova pomocí
skriptu tests_environment/delete.sh
(potřeba scope delete_repo
).
Vytváření repozitáře s issues může trvat jednotky minut. Pokud
bude správně fungovat strategie change
, pak poslední test v souboru
test_behavior.py
(se jménem test_reset
) zajistí nastavení na
úvodní a nebude již potřeba mazat repozitář a vytvářet jej znova.
Pro spuštění testů nastavte stejné proměnné prostředí (GITHUB_TOKEN
a GITHUB_USER
).
$ export GITHUB_USER=anicka
$ export GITHUB_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ python -m pytest -v tests
Testy si můžete zkopírovat k sobě do repozitáře, považujte je za Public Domain.
Nepřidejte ale do repozitáře omylem soubor auth.real.cfg
,
který se v průběhu testů dočasně vytváří a obsahuje váš token.
ℹ️
|
Testy proti živému API, navíc napsané tak, že se jednotlivé testy navzájem ovlivňují, 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. Implementace, která projde testy, není automaticky hodnocena plným počtem bodů. |