Další major verze je tu! Kompletní (alespoň doufám) seznam změn je níže, ale pokud chceš vědět jen hlavní věci, tak tady máš souhrn:
- **`bakalariapi`**
- Partial init mód - Nyní lze vytvořit `BakalariAPI` instanci bez parametrů a posléze s ní operovat. Takže nyní se nikdo nemusí zabývat nějakým "nastavovánín" `BakalariAPI` jen proto, aby mohl udělat `.looting.import_json()` a `.get_komens(GetMode.CACHED)`.
- Sessiony jako kontextový manažeři - Automatické obstarání `busy` flagy při použití `with session as s: ...`.
- Serializace - Nový přístup k serializaci přes registraci serializérů a nový formát serializace, který podporuje reference na jeden objekt z více míst (`serialization.complex_serialize()`)
- **`bakalarishell`**
- Globální uložení konfigurace - Už není nutnost pokaždé psát parametry aby se spustil shell. Stačí pouze jednou a konfiguraci ve spuštěném shellu následně uložit `"config save"` a příště se automaticky načte tato konfigurace. S tím také přichází nová flaga `-d`, která deaktivuje načtení této konfigurace.
- "Multi-command" podpora - Nyní lze napsat více příkazů najednou, např. `"komens;schuzky"`. Spolu s tímto je zde nový parametr `-c "příkaz"`, který spustí daný příkaz po startu shellu.
- Barvičky
Added
- Přidána podpora kontextový manažerů pro sessiony - pokud se session použije jakožto kontextový manažer (`with` keyword), automaticky se při vnoření do kontextru nastaví `busy` flag a při opuštění kontextu se vymaže
- Vytvořena funkce `bakalari.is_version_supported()` a metoda `BakalariAPI.is_version_supported()`, které kontrolují, zda je daná verze Bakalářů podporována
- Přidána výjimka `PartialInitError`
- Přidána závislost na balíček `appdirs` pro `bakalarishell`
- Přidán příkaz "config" do `bakalarishell`, který umožňuje práci s konfigurací (uložení, zobrazení, smazání)
- Přidán parametr `-d`/`--disable-config` pro `bakalarishell`, který zakazuje import uložené konfigurace
- Přidán parametr `-c`/`--command` pro `bakalarishell`, kterým lze spustit příkazy po startu
- Nový submodul `serialization`, který obsahuje všechny věci ohledně (de)serializace
- Přidána možnost regitrovat (de)serializéry pro typy, které nemají vlastní implementaci serializace
- Vytvořen nový formát serializace - serializovat pomocí něj lze skrze `serialization.complex_serialize()`
Changed
- Definice `JSONEncoder` a `JSONDecoder` byly přesunuty z modulu `looting.Looting` do modulu `utils` a přejmenovány na `JSONSerializer` a `JSONDeserializer` a přesunuta a přejmenována i `logger` instance (z `bakalariapi.looting.serializer` na `bakalariapi.utils.serializer`)
- Přidán nepovinný parametr `rich_colors` (defaultně `False`) u abstraktní třídy `objects.BakalariObject`, který všechny derivující třídy implementují a který indikuje, zda ve výsledném textu mají být přítomny "tagy" na barvy (pro `rich` modul)
- `bakalarishell` nyní nevyžaduje žádné parametry při spouštění - pokud potřebný argument (url/jméno/heslo) není specifikován při startu, uživatel bude dotázán za běhu
- `BakalariAPI` lze nyní inicializovat i bez parametrů (resp. s parametry s hodnotou `None`) - v tom případě bude instance v "partial init" režimu, během kterého bude možno prověst jen určité akce, které nevyžadují k funkčnosti server (např. práce s uloženými daty); Pokud v tomto režimu bude vyžádána akce, kterou v tomto režimu provést nelze, vyvolá se výjimka `PartialInitError`
- Příkazy "export"/"import" v `bakalarishell`u nyní přijímají nepovinný poziční parametr "ID", který specifikuje ID/jméno exportovaných/importovaných dat
- Nyní je v `bakalarishell` plno barviček
- `bakalarishell` nyní podporuje více příkazů v jednom oddělených pomocí ";"
- `bakalarishell.shell.Shell` nyní parsuje příkaz pomocí `shlex` namísto vlastního regexu
- Parametry `globals_` a `locals_` u `bakalarishell.shell.pyhton_exec` jsou nyní povinné
Removed
- Odstraněn "přímý" export `bakalariapi.LAST_SUPPORTED_VERSION`, jelikož již není potřeba pro běžné užití (avšak stále je přístupný skrz `bakalariapi.bakalari.LAST_SUPPORTED_VERSION`)
- Odstraněn parametr `-f`/`--file` pro `bakalarishell`, jelikož po zprovoznění nového systému importu/exportu již není za potřebý
- Odstraněny třídy `JSONEncoder` a `JSONDecoder`, jejich funkcionalita byla nahrazena `serialization` modulem
Fixed
- Opravany údaje o verzi v instalační konfiguraci a v `bakalariapi`
- Opraven příkaz "test" v `bakalarishell`
- Opravena deserializace offset-aware datetime instancí (časové údaje v `objects.Meeting`)
- Konečně správný zápis typehintigu pro třídu `BakalariAPI` (za pomoci `typing.Literal`)
- Opraveny defaultní mutující hodnoty
Deprecated
- Data, která byla serilizována staršími verzemi nebudou v další verzích podporována - stará data nutno deserializovat a opětovně serializovat (stará verze se detekuje automaticky)