1414from homeassistant .helpers import device_registry as dr
1515import voluptuous as vol
1616
17+ from .api import BakalariClient
1718from .children import ChildrenIndex
1819from .const import DOMAIN , MANUFACTURER , MODEL , PLATFORMS , SW_VERSION
1920from .coordinator_marks import BakalariMarksCoordinator
@@ -41,7 +42,7 @@ class CustomFormatter(logging.Formatter):
4142 cyan = "\u001b [36m"
4243 white = "\u001b [37m"
4344
44- _format = f"%(asctime)s - %(levelname)s [%(name)s]\n { reset } Message : %(message)s)"
45+ _format = f"%(asctime)s - %(levelname)s [%(name)s] %(funcName)s { reset } \n Message : %(message)s)"
4546 dateformat = "%d/%m/%Y %H:%M:%S"
4647
4748 FORMATS = {
@@ -62,6 +63,10 @@ def format(self, record):
6263
6364async def async_setup (hass : HomeAssistant , config ) -> bool :
6465 """Set up the Bakalari component."""
66+
67+ _dev_console_handler_for (
68+ logging .getLogger ("custom_components.bakalari" ), CustomFormatter ()
69+ )
6570 hass .data .setdefault (DOMAIN , {})
6671 return True
6772
@@ -73,11 +78,19 @@ def _dev_console_handler_for(
7378 # pokud už nějaké handlery existují (na loggeru NEBO u předků), nedělej nic
7479 # if logger.hasHandlers():
7580 # return
81+ existing = [h for h in logger .handlers if getattr (h , "_bakalari_dev" , False )]
82+ if existing :
83+ if formatter is not None :
84+ existing [0 ].setFormatter (formatter )
85+ logger .propagate = False
86+ configure_logging (logger .getEffectiveLevel ())
87+ return
7688
7789 h = logging .StreamHandler () # default: stderr
7890 if formatter is None :
7991 formatter = logging .Formatter ("[%(levelname)s] %(name)s: %(message)s" )
8092 h .setFormatter (formatter )
93+ h ._bakalari_dev = True # pyright: ignore[reportAttributeAccessIssue]
8194
8295 # level nech na loggeru; handler level nenech NOTSET explicitně – zbytečné
8396 logger .addHandler (h )
@@ -120,7 +133,7 @@ async def _srv_mark_message_seen(call) -> None:
120133 await coord .async_mark_message_seen (
121134 call .data ["message_id" ], call .data .get ("child_key" )
122135 )
123- await coord .async_request_refresh ()
136+ await coord .async_refresh ()
124137
125138 async def _srv_refresh_messages (call ) -> None : # noqa: ARG001
126139 await hass .data [DOMAIN ][entry .entry_id ]["messages" ].async_refresh ()
@@ -207,19 +220,32 @@ async def ws_get_timetable(hass_, connection, msg): # noqa: ANN001
207220
208221async def async_setup_entry (hass : HomeAssistant , entry : ConfigEntry ) -> bool :
209222 """Set up of Bakalari component."""
210- _dev_console_handler_for (
211- logging .getLogger ("custom_components.bakalari" ), CustomFormatter ()
212- )
213223
214- children = ChildrenIndex .from_entry (entry )
224+ children : ChildrenIndex = ChildrenIndex .from_entry (entry )
225+
226+ # create shared library for each child
227+ _clients : dict [str , BakalariClient ] = {}
228+ for child in children .children :
229+ _LOGGER .debug (
230+ "[class=%s module=%s] Creating client for child: %s" ,
231+ object .__name__ ,
232+ __name__ ,
233+ child .display_name ,
234+ )
235+
236+ _client = BakalariClient (
237+ hass , entry , children .option_key_for_child (child .key ) or ""
238+ )
239+ _clients [child .key ] = _client
215240
216- coord_marks = BakalariMarksCoordinator (hass , entry , children )
217- coord_msgs = BakalariMessagesCoordinator (hass , entry , children )
218- coord_tt = BakalariTimetableCoordinator (hass , entry , children )
241+ coord_marks = BakalariMarksCoordinator (hass , entry , children , _clients )
242+ coord_msgs = BakalariMessagesCoordinator (hass , entry , children , _clients )
243+ coord_tt = BakalariTimetableCoordinator (hass , entry , children , _clients )
219244
220245 hass .data .setdefault (DOMAIN , {})
221246 hass .data [DOMAIN ][entry .entry_id ] = {
222247 "children" : children ,
248+ "clients" : _clients ,
223249 "marks" : coord_marks ,
224250 "messages" : coord_msgs ,
225251 "timetable" : coord_tt ,
0 commit comments