Skip to content
/ ghia Public

A task for the advanced Python class (MI-PYT)

License

Notifications You must be signed in to change notification settings

cvut/ghia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GHIA VI.

Zadání úkolu 6

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).

Screenshot - changes
Screenshot - fallback label
Screenshot - error repo
Screenshot - error issue

Automatické testy

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ů.

Odevzdání úkolu

Úkol odevzdáváte tradičně s tagem v0.6 a nahráním nové verze na testovací PyPI. Použijte verzi 0.6 (případně 0.6.x v souladu s tagem).