Best Flask open-source libraries and packages

Ghia

A task for the advanced Python class (MI-PYT)
Updated 4 years ago

= GHIA VI. :toc: :note-caption: :information_source: :warning-caption: :warning:

== 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 https://aiohttp.readthedocs.io/en/stable/[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í https://aiohttp.readthedocs.io/[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 https://vcrpy.readthedocs.io/[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).

image::screenshots/screen_changes.png[Screenshot - changes]

image::screenshots/screen_fallback_label.png[Screenshot - fallback label]

image::screenshots/screen_error_repo.png[Screenshot - error repo]

image::screenshots/screen_error_issue.png[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í:

WARNING: Testy netestují splnění tohoto úkolu, Testují pouze to, že se nic nerozbilo a že funguje spuštění pomocí příkazů výše.

NOTE: 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í:

[source,console] $ 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 https://hub.github.com/[hub], který si nejprve zprovozněte. Potřebujete alepsoň verzi 2.8.3. Skript je otestován na Linux i Windows (pomocí https://gitforwindows.org[git bash]).

[source,console] $ 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).

[source,console] $ 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.

NOTE: 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.

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