Všechny důležité změny v tomto projektu budou zdokumentovány v tomto souboru.
Formát je založen na Keep a Changelog a podléhá Sémantickému verzování.
objects.Homework.mark_as_done()aobjects.Komens.confirm()nyní aktualizují i svoji příslušnou hodnotu na objektubakalarishell.utils.resolve_string()nyní bere parametrreverse(viz docstring)- Předělána struktura testů v
bakalarishell - Několik úprav ukládání (a načítání) konfigurace
- Odstraněn parametr
-t/--testpři spouštěníbakalarishell
- Opravena možná invalidace konfigurace, která nastala při uložení konfigurace, měla menší velikost, jak stávající
- Přidána možnost "inliningu" při komplexní serializaci (defaultně) - Reference, které odkazují na objekt, který je referencován pouze touto referencí se při "inliningu" nahradí referencovaným objektem; více informací v dokumentu o serializaci.
bakalarishellnyní automaticky importuje předešlá data; Lze vypnout novým parametrem--no-importbakalarishellnyní automaticky exportuje data při vypnutí; Lze vypnout novým parametrem--no-exportu příkazuexitbakalarishellnyní po zapnutí vypíše obecné shrnutí
- Změněna struktura komplexní serializace - Nyní je v
"data"sekci komplexní serializace pouze list, root se nachází na poslední pozici v tomto listu - Atribut
serialization.Upgradeable._atributeszměněn naserialization.Upgradeable.deserialization_keys - Serializace se nyní chová k
listadictinstancím stejně jako k jiným objektům, tzn. vytváření referencí na tyto instance - Lepší porovnávání podporované verze Bakalářů a hranice zvýšena na "1.45"
bakalarishellnyní všechny soubory vytváří s utf-8 kódováním; Tohle je drastická změna a bohužel může nastat situace, kdy nastaneUnicodeDecodeErrorpři importu starých dat. V tom případě je potřeba manuálně změnit kódování starých souborů na utf-8.bakalarishellnyní používá progress bary zrichmodulu- Autorun obdržel několik vylepšení a je nyní ve výchozím stavu zapnut
- Uložená konfigurace nyní neobsahuje hodnoty, které byly automaticky doplněny
- Různé další vylepšení
bakalarishellu
- Odtraněn parametr
-n(alias parametru--no-init), jelikož--no-*parametrů je již více a již to zavání nedorozuměním
- Opravena serializace
listinstancí - Opraven
SeleniumHandler - Opraven bug při spouštění
bakalarishell, pokud nebyla vytvořena konfigurace
- Data, která byla serilizována starší verzí, nebudou v dalších verzích podporována - aby data byla aktualizována na novou verzi, je potřeba je načíst a opětovně uložit
- Oprava instalace z PyPI
- Přidána možnost instalace z PyPI (
pip install bakalariapi) - Přidán protokol
bakalariapi.serialization.Upgradeable, pomocí kterého mohou třídy při deserializaci převést data ze své staré struktury na novou - Přidána možnost vytvořit
bakalarishell.shell.Shellinstanci jako "dummy shell" - takováto instance nevytváří interaktivní elementy, není možné na ní volat.start_loop()(jinak nastane nový exceptionbakalarishell.shell.DummyShellError) a prakticky je ji možné využít pouze jako "dispatch" ovládaný přes metodu.proc_string. Pokud je při spouštění shellu přítomný argument "-c exit", shell se spustí v tomto "dummy" módu (vhodné pro testování). - Přidány metody
looting.Looting.export_data()alooting.Looting.import_data() - Přidána metoda
looting.Looting.have_id(), která zkontroluje, zda je již objekt (daného typu a s daným ID) uložen - Přidána metoda
objects.BakalariObject.merge()(zatím není pořádně využitá)
- Modul
bakalariapi.serializationnyní řeší escapování speciálních klíčů, které používá, takže se tato věc nemusí řešit externě; Bohužel tohle může mít za následek, že stará data mohou být špatně deserializována (pokud klíč slovníku začíná hashtagem). - Při přidávání dat do
Lootinginstance se nyní data spojí se starými (tzn. import nepřepíše stará data a.add_loot()se pokusí stará data obohatit o nová, pokud daný objekt (resp. jeho stará verze) je už uložen)
- Opravena chyba při spouštění
bakalarishells-c/--commandargumentem - Zamezen výskyt
MarkupResemblesLocatorWarningu zbs4
- Metody
looting.Looting.export_json()alooting.Looting.import_json()jsou nyní zastaralé, lze je nahradit skrze metodylooting.Looting.export_data()alooting.Looting.import_data(), které ovšem generují serializovatelná data namísto JSONu
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
BakalariAPIinstanci bez parametrů a posléze s ní operovat. Takže nyní se nikdo nemusí zabývat nějakým "nastavovánín"BakalariAPIjen proto, aby mohl udělat.looting.import_json()a.get_komens(GetMode.CACHED). - Sessiony jako kontextový manažeři - Automatické obstarání
busyflagy 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())
- Partial init mód - Nyní lze vytvořit
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
- 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
- Přidána podpora kontextový manažerů pro sessiony - pokud se session použije jakožto kontextový manažer (
withkeyword), automaticky se při vnoření do kontextru nastavíbusyflag a při opuštění kontextu se vymaže - Vytvořena funkce
bakalari.is_version_supported()a metodaBakalariAPI.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
appdirsprobakalarishell - 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-configprobakalarishell, který zakazuje import uložené konfigurace - Přidán parametr
-c/--commandprobakalarishell, 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()
- Definice
JSONEncoderaJSONDecoderbyly přesunuty z modululooting.Lootingdo moduluutilsa přejmenovány naJSONSerializeraJSONDeserializera přesunuta a přejmenována iloggerinstance (zbakalariapi.looting.serializernabakalariapi.utils.serializer) - Přidán nepovinný parametr
rich_colors(defaultněFalse) u abstraktní třídyobjects.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 (prorichmodul) bakalarishellnyní 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ěhuBakalariAPIlze nyní inicializovat i bez parametrů (resp. s parametry s hodnotouNone) - 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ýjimkaPartialInitError- Příkazy "export"/"import" v
bakalarishellu nyní přijímají nepovinný poziční parametr "ID", který specifikuje ID/jméno exportovaných/importovaných dat - Nyní je v
bakalarishellplno barviček bakalarishellnyní podporuje více příkazů v jednom oddělených pomocí ";"bakalarishell.shell.Shellnyní parsuje příkaz pomocíshlexnamísto vlastního regexu- Parametry
globals_alocals_ubakalarishell.shell.pyhton_execjsou nyní povinné
- 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ý skrzbakalariapi.bakalari.LAST_SUPPORTED_VERSION) - Odstraněn parametr
-f/--fileprobakalarishell, jelikož po zprovoznění nového systému importu/exportu již není za potřebý - Odstraněny třídy
JSONEncoderaJSONDecoder, jejich funkcionalita byla nahrazenaserializationmodulem
- 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 pomocityping.Literal) - Opraveny defaultní mutující hodnoty
- 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)
- Přidána výjimka
bakalariapi.exceptions.BakalariMissingSeleniumHandlerError, která nastane při použití funkce vyžadující Selenium, přičemž ale nastavení Selenia nebylo poskytnuto - Přidán parametr "command_exception_traceback_locals" u konstruktoru
bakalarishell.shell.Shell, který specifikuje, zda se mají vypisovat proměnné (defaultFalse) - Přidány docstringy a dokumentace
- Upraven top-level export z
bakalariapi- Nově se exportujeGetModea přestal se exportovat type aliasBakalariObj - Přejmenovány metody
Looting.import_JSON()aLooting.export_JSON()naLooting.import_json()aLooting.export_json() - Přejmenován parametr u parametr "_type" na "type_" metod
ResultSet.get()aResultSet.remove()(jak doporučuje PEP 8) - Přejmenován parametr "id" na "ID" u konstruktoru třídy
MeetingProvider, aby se nepřepisovala builtin funkceid() - Přejmenován atribut
Meeting.joinURLnaMeeting.join_url
- Logging cally nyní správně používají lazy string evaluation
Hooooooodně velký posun od posledního (většího) updatu. Ať už v kódu, tak v organizaci a distribuci. Nejdřív něco k organizaci... Pokud tohle čteš, tak sis pravděpodobně všiml(a), že tu je tento soubor. Ano! Je tu changelog! A dokonce se drží (resp. pokouší se držet) nějakých standardů, takže tenhle projekt pravděpodobně bude mít nějakou budoucnost. Dále se přeskupily soubory. "Proč?", ptáš se cizinče? Nuže... Souvisí to s tím, že se vylepšila distribuce. Nyní stačí jen napsat pip install git+https://github.com/Hackrrr/BakalariAPI a voilà - Máme přímo instalovaný bakalariapi modul, který můžeme referencovat z jakéhokoli Python skriptu odkudkoli. A jak tohle souvisí s tím, že se přeskupily soubory? No... jelikož se projekt rozdělil i do druhého balíčku bakalarishell (o tom jsem se rozepsal v dokumentaci), tak je byla potřeba to trochu přeorganizovat - jak pro mě, tak i pro setup.cfg, který se stará o instalaci. A nakonec v rámci organizace projektu bylo provedeno i pár změn v rámci GitHubu, které nejsou pro projekt jako takový podstatný (jakožto třeba releasy nebo dependecies).
A nyní bych rád tady udělal nějaký pořádný changelog, ale vzhledem k enormnímu počtu změn to nejspíše nebude možný. Rovnou zmíním, že zde nebude vše, protože nevím, co vše se od posledního updatu změnilo. Navíc určité věci (třeba shell.py) byly kompletně přesány, takže rozhodně nebudu psát, co vše se zde změnilo. Spíše tedy zde napoprvé bude spíše jen takový stručný soupis změn.
- Přidána závislost na
prompt-toolkitarich
SeleniumSessionnyní může využítrequestsmodul k akceleraci určitých věcíSessionManagernyní může automaticky udržovat sessiony při životě
- Přidány progress bary
- Zprovozněna nabídka příkazů z historie
- Zprovozněn hinting příkazů
- Přidána možnost
--no-init/-npro rychlejší spouštění - Přidán příkaz
init - Přidány příkazy
exportaimport - Přidána možnost
--file/-fpro specifikování I/O souboru při startu - Přidán pěkný barevný traceback při erroru
-
Implementace metod
BakalariAPI._parse()aBakalariAPI._resolve()je nyní přesunuta do samostatných funkcí a byly vytvořeny stejnojmenné metody, které těchto funkcí využívajíNení tudíž potřeba vytvářet
BakalariAPIinstanci jen kvůli parsování/resolvování) -
Metody
get_NĚCO_NĚJAK()nyní jsou implementovány pomociGetModů (viz dokumentace)Přestože to pravděpodobně bude mít určité problémy s IDE hintingem, tak si myslím, že to je poměrně dobré řešení, jelikož se značně zredukoval počet metod na
BakalariAPI(v privátní "draftu" zde bylo asi 40 variant jenget_NĚCO()metod)
- Odstaněna možnost provozu
bakalariapibez nainstalovaného Selenia
- Opravena chybná logika při špatném přihlášení
- Opravena deserializace