1 """Support for Vulcan Calendar platform."""
3 from __future__
import annotations
5 from datetime
import date, datetime, timedelta
7 from typing
import cast
8 from zoneinfo
import ZoneInfo
10 from aiohttp
import ClientConnectorError
11 from vulcan
import UnauthorizedCertificateException
26 from .fetch_data
import get_lessons, get_student_info
28 _LOGGER = logging.getLogger(__name__)
33 config_entry: ConfigEntry,
34 async_add_entities: AddEntitiesCallback,
36 """Set up the calendar platform for entity."""
37 client = hass.data[DOMAIN][config_entry.entry_id]
40 client, config_entry.data.get(
"student_id")
50 f
"vulcan_calendar_{data['student_info']['full_name']}",
59 """A calendar entity."""
61 _attr_has_entity_name =
True
62 _attr_translation_key =
"calendar"
64 def __init__(self, client, data, entity_id) -> None:
65 """Create the Calendar entity."""
66 self.
_event_event: CalendarEvent |
None =
None
69 student_info = data[
"student_info"]
72 identifiers={(DOMAIN, f
"calendar_{student_info['id']}")},
73 entry_type=DeviceEntryType.SERVICE,
74 name=cast(str, student_info[
"full_name"]),
76 f
"{student_info['full_name']} -"
77 f
" {student_info['class']} {student_info['school']}"
79 manufacturer=
"Uonet +",
81 f
"https://uonetplus.vulcan.net.pl/{student_info['symbol']}"
86 def event(self) -> CalendarEvent | None:
87 """Return the next upcoming event."""
91 self, hass: HomeAssistant, start_date: datetime, end_date: datetime
92 ) -> list[CalendarEvent]:
93 """Get all events in a specific time frame."""
100 except UnauthorizedCertificateException
as err:
102 "The certificate is not authorized, please authorize integration again"
104 except ClientConnectorError
as err:
107 "Connection error - please check your internet connection: %s", err
114 start=datetime.combine(
115 item[
"date"], item[
"time"].from_, ZoneInfo(
"Europe/Warsaw")
117 end=datetime.combine(
118 item[
"date"], item[
"time"].to, ZoneInfo(
"Europe/Warsaw")
120 summary=item[
"lesson"],
121 location=item[
"room"],
122 description=item[
"teacher"],
125 event_list.append(event)
130 """Get the latest data."""
136 _LOGGER.warning(
"Restored connection with API")
142 date_to=date.today() +
timedelta(days=7),
147 except UnauthorizedCertificateException
as err:
149 "The certificate is not authorized, please authorize integration again"
151 except ClientConnectorError
as err:
154 "Connection error - please check your internet connection: %s", err
162 datetime.combine(d[
"date"], d[
"time"].to) < datetime.now(),
163 abs(datetime.combine(d[
"date"], d[
"time"].to) - datetime.now()),
167 start=datetime.combine(
168 new_event[
"date"], new_event[
"time"].from_, ZoneInfo(
"Europe/Warsaw")
170 end=datetime.combine(
171 new_event[
"date"], new_event[
"time"].to, ZoneInfo(
"Europe/Warsaw")
173 summary=new_event[
"lesson"],
174 location=new_event[
"room"],
175 description=new_event[
"teacher"],
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
CalendarEvent|None event(self)
None __init__(self, client, data, entity_id)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
def get_student_info(client, student_id)
def get_lessons(client, date_from=None, date_to=None)
str generate_entity_id(str entity_id_format, str|None name, list[str]|None current_ids=None, HomeAssistant|None hass=None)