All notable changes to this project will be documented in this file.
🇨🇿 Full documentation (czech) on this site
Add support for fetching noticeboard messages in Komens. (#169) @schizza
- přidána funkce pro stažení
Nástěnky
-
Feature/sign marks (#160) @schizza
- Přidána funkce k podepisování známek
async_sign_marks
-
Add marks command with listing, saving, and summary features (#157) @schizza
- do CLI přiána funkce známek s výpisem, ukládáním a zobrazením přehledu
-
Demo app now support custom reqequest (#158) @schizza
- do CLI přidána možnost odeslání vlastního requestu na server
- Fixed debug severity from info to debug (#159) @schizza
- Fixed headers creation (#161) @schizza
- bump version to 0.8.1
-
Add confirmed field to marks and support unconfirmed marks (#154) @schizza
- Přidán atribut
confirmedpro známky - umožňuje sledovat stav potvrztení známky na serveru
- přidána funkce
get_unconfirmed_marks() -> list[SubjectBase], která vrací pouze nepotvrzené známky.
- Přidán atribut
-
Add mark message as read and get_single_message (#147) @schizza
-
Přidána funkce
message_mark_read(message_id: str), která označí zprávu za přečtenou -
Přidána funkce
message_get_single_message(message_id: str), která vratí aktualizovanou zprávu smessage_id
-
Adds marks summary function (#141) @schizza
Přidána funkce
get_all_marks_summary, která vrací sumarizovaný přehled o známkách a předmětech. Vracíprůměrpočítaný z průměru předmětů,vážený průměrpočítaný ze všech znmek,počet předmětů,počet celkových známek,počet numerických známekapočet bodovaných známek
- Limits the number of authentication retries (#143) @schizza Přidává limit pro opakování při chybné authentizaci. Zabraňuje nekonečné smyčce při chybném tokenu.
-
Add asynchronous context manager and close method (#133) @schizza
Zavádí asynchronní kontextový manažer pro správu životního cyklu klientské session, který zajišťuje správné uvolňování prostředků, a přidává explicitní metodu pro ukončení.
-
Refakorizace logování tak, aby využívalo modul logging ze standardní knihovny místo vlastní implementace.
-
Make school list save/load async (#144) @schizza Oprava ukládání a načítání seznamu škol ze souboru, tak aby využívala asynchronní metody. Fixes #116
-
Přidány testy k novým modalitám, oprava testů u refaktorovaných modalit.
- Adds marks helpers for data manipulation, including flat mark representation and snapshot creation, grouping.
- Implements session handling and refresh token logic to ensure thread safety.
This change introduces:
FlatMarkdataclass for a simplified mark representation.- Functions to convert between
MarksBaseandFlatMark. - Methods for iterating over grouped marks.
- A
get_snapshotmethod to create a structured snapshot of marks data.
Refactors and improves API client (#129)
- Upgrades Python version to 3.13 in CI and
pyproject.toml - Applies minor formatting changes
- Implements more robust error handling and data validation.
- Adds tests to cover various error branches and edge cases in Bakalari and Komens modules, increasing overall test coverage and robustness.
- New
Timetablemodule introduced- This commit introduces the ability to fetch and parse timetable data from the Bakalari API, including actual and permanent timetables. It also defines data structures for representing timetable entities like lessons, changes, and other related information.
Credentialsare now required to be passed toBakalariconstructor as they are set to read-only properties.- Renamed
src/bakalari_apitosrc/async_bakalari_apifor consistency
- Introducing a lock to handle concurrent refresh token requests, preventing race conditions.
- Ensuring each Bakalari instance has its own dedicated credentials and session, preventing credential sharing between instances.
- Strip requirements to minimum
- Updated wheel build
- Using a context manager to properly manage the aiohttp session.
CredentialsinBakalariis instance, not reference to credentials. This fixes issue with multiple instances ofBakalarisharing the same credentials.
awaitkeyword was missing in the code snippet
- Renamed
src/bakalari_apitosrc/async_bakalari_apifor consistency - Strip requirements to minimum
- Updated wheel build
- Minor bugfixes, version bumps for Home Assistant
- New module
Marksto handle marks from server- Adds endpoint to retrieve marks.
- Added logging for file operations
- Refactored API logger initialization
- Argument parsing for CLI appliaction - now
auto_cacheoption is available with-cfoption - Fix proper session closure on deletion
- class
Schools()is accessible byBakalariclass inself.schools Schoolsnow support operations with towns- new data structure
UniqueTownsthat hold all town namesget_town_partial_namereturns list of the towns based on partial nameget_all_townsreturns list of all townsistownchecks if the town is present in the listcount_townsreturns number of towns in list
- automatically load credentials if auto_cache is on
- recursive search in towns when fetching
schools_listfrom server. Recursive search is enabled by default. You can turn it off byschool_list(... , recursive=False)
Schoolsnow support operations with towns- new data structure
UniqueTownsthat hold all town namesget_town_partial_namereturns list of the towns based on partial nameget_all_townsreturns list of all townsistownchecks if the town is present in the listcount_townsreturns number of towns in list
- dependency list is divided to application dependencies and development dependencies
- if
auto_cache_credentialsandcache_filenameis set then credentials are loaded automatically
bakalari_demo.pyis now CLI applicationKomensnow support for downloading attachment -get_attachmentsend_auth_requestnow supports extending EndPoints url wihtextendargumentschool_listnow supports variabletown- fetch schools in the town to limit downloading full list of schools.Messagesclass now have functionjsonto return messages as JSON representativeMessagesclass have__str__function for better handlingstr(Messages)
- refactor of the code for speed and better reading of the code
school_listnow fetching schools in concurency mode - improved speed form about 1:30 min to 20smidvariable in theMessageContainteris now string instead of integer.async_school_listrenamed toschool_listas all methods are asyncMessageContainterreturns JSON bytes onas_json()call instead oforjson.Fragmentget_messsages()renamed tofetch_messages()
usernamefromCredentials- as we do not need to store it
- better exceptions handling and logging
class Komens- count unread messages
- get all messages
- tests and coverage
async_schools_listmoved toBakalariclass- Refactor login functions
- Refactor token handling
- Invalid refresh token
- Refactor send_request to better maintenance
-
main
class Bakalari- supports saving
access tokenandrefresh tokenlocaly - automatically refreshes access token with refresh token if refresh token is not expired
- supports saving
-
class Schoolsindatastructures.pylists all schools with their API points- get_url by school name or index in list
- search school by town
- cache list of schools by saving and loading list in JSON format