filabel-cvut

Simple CLI & WEB tool for labeling GitHub PRs using globs


Keywords
github, labels, management, pull-requests, globs
License
MIT
Install
pip install filabel-cvut==0.3

Documentation

filabel

Tool for labeling PRs at GitHub by globs.

Zadání úkolu 3

Vaším úkolem za 5 bodů je udělat z vašeho dosavadního projektu balíček instalovatelný přes pip a nahrát jej na testovací PyPI.

Jelikož používáme všichni stejný název aplikace filabel, tak pro PyPI použijte jako název filabel_<username> (v reálných situacích se nedoporučuje jiný název než je jméno importovatelného modulu).

Pokud svůj kód za žádných okolností nechcete zveřejnit ani na testovací PyPI, dejte nám vědět a domluvíme se.

ℹ️
Pokud jste předchozí úkoly nedělali a nebo neprochází testy, můžete použít naše referenční řešení.

Podmínky (je jich hodně, ale jsou triviální):

  • Váš balíček musí fungovat (viz zadání předchozích úkolů) po instalaci pomocí pipu do „prázdného“ virtuálního prostředí. Musí tedy mít správně nadefinované všechny závislosti.

  • Musí obsahovat rozumný počet classsifiers a voleb pro setup.py.

  • Podpříkazy sdist a bdist_wheel nesmí skončit chybou ani vyvolat varování.

  • Musí splňovat konvence uvedené ve výukových materiálech:

    • Jméno importovatelného modulu musí být filabel a všechny další pomocné moduly musí být jeho podmoduly.

    • Všechny soubory __init__.py mají být víceméně prázdné a obsahovat pouze importy, případně nastavovat __all__.

  • Hlavní program musí jít spouštět pomocí entrypointu filabel i pomocí -m filabel.

  • Stále se musí dát z modulu filabel přímo importovat Flask app (či create_app).

  • Pokud jste již tak neučinili, tak rozdělte aplikaci na jednotlivé funkční celky. Měli byste mít alespoň 3 submoduly, například:

    • cli - vstup + výpis na konzoli z prvního úkolu,

    • web - flask aplikace,

    • github - klient pro komunikaci s GitHub API (společný pro cli a web),

    • případně navíc ještě oddělit logiku práce se štítky či další.

    • (Pamatujte že v Pythonu není nutné každou třídu dávat do zvláštního souboru. Také připomínáme, že Flat is better than nested, není tedy vhodné moduly do sebe nořit příliš hluboko.)

    • Vyvarujte se cyklických importů!

  • Zabalený modul musí obsahovat soubor s textem licence (LICENSE, COPYING) *

  • long_description musí být dynamicky načten z README

* Vhodnou licenci můžete najít na choosealicense.com. V případě, že váš kód nechcete šířit pod svobodnou licencí, napište to do souboru vlastní podmínky. Nevymýšlejte si ale prosím vlastní open-source licence.

Automatické testy

Testy z minula byly mírně upraveny, aby nevolaly python filabel.py přímo, ale příkaz filabel, navíc byly přidány jednoduché testy, které volají python -m filabel.

⚠️
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í pyhton setup.py develop nebo pip install -e.

Nově jsou dodány extra testy ve složce test_module, které simulují reálnou instalaci vašeho balíčku filabel 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 FILABEL_REPO pro získání vaší verze filabelu (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

Následuje text z minula, který stále platí:

Pro spuštění testů 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.

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 všechny štítky. Alternativně můžete testovací repozitáře smazat pomocí skriptu test_environment/delete.sh (potřeba scope delete_repo) a vytvořit znovu. Vytváření repozitářů a Pull Requestů může trvat jednotky minut.

Pro spuštění testů nastavte stejné proměnné prostředí (GH_TOKEN a GH_USER).

$ export GH_USER=anicka
$ export GH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ python -m pytest -v test

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 předpokládají, že se štítky mění podle běhu předchozích testů. Nepouštějte tedy jednotlivé testy samostatně.

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.

Odevzdání úkolu

Odkazy na repozitář a balíček na testovací PyPI nám pošlete e-mailem. Pro odevzdání v repozitáři nastavte tag v0.3.