11import calendar
22import datetime as dt
33import logging
4+ from zoneinfo import ZoneInfo
45
56# noinspection PyPep8Naming
67from bs4 import BeautifulSoup as bs
@@ -551,10 +552,9 @@ def __init__(self, parent, response_status):
551552 self .response_time = None
552553 if self .response_time :
553554 try :
554- self .response_time = parse (self .response_time ).astimezone (
555- self .protocol .timezone )
555+ self .response_time = parse (self .response_time ).astimezone (self .protocol .timezone )
556556 except OverflowError :
557- log .debug ("Couldn't parse event response time: {}" . format ( self .response_time ) )
557+ log .debug (f "Couldn't parse event response time: { self .response_time } " )
558558 self .response_time = None
559559 else :
560560 self .response_time = None
@@ -1066,8 +1066,9 @@ def start(self, value):
10661066 if value .tzinfo is None :
10671067 # localize datetime
10681068 value = value .replace (tzinfo = self .protocol .timezone )
1069- elif value .tzinfo != self .protocol .timezone :
1070- value = value .astimezone (self .protocol .timezone )
1069+ else :
1070+ if not isinstance (value .tzinfo , ZoneInfo ):
1071+ raise ValueError ('TimeZone data must be set using ZoneInfo objects' )
10711072 self .__start = value
10721073 if not self .end :
10731074 self .end = self .__start + dt .timedelta (minutes = 30 )
@@ -1093,8 +1094,9 @@ def end(self, value):
10931094 if value .tzinfo is None :
10941095 # localize datetime
10951096 value = value .replace (tzinfo = self .protocol .timezone )
1096- elif value .tzinfo != self .protocol .timezone :
1097- value = value .astimezone (self .protocol .timezone )
1097+ else :
1098+ if not isinstance (value .tzinfo , ZoneInfo ):
1099+ raise ValueError ('TimeZone data must be set using ZoneInfo objects' )
10981100 self .__end = value
10991101 self ._track_changes .add (self ._cc ('end' ))
11001102
@@ -1371,7 +1373,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
13711373 :rtype: list[Event] or Pagination
13721374 """
13731375 if self .event_type != EventType .SeriesMaster :
1374- # you can only get occurrences if its a seriesMaster
1376+ # you can only get occurrences if it's a seriesMaster
13751377 return []
13761378
13771379 url = self .build_url (
@@ -1397,6 +1399,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
13971399 if start .tzinfo is None :
13981400 # if it's a naive datetime, localize the datetime.
13991401 start = start .replace (tzinfo = self .protocol .timezone ) # localize datetime into local tz
1402+ # TODO: convert to utc when quering?
14001403 if start .tzinfo != dt .timezone .utc :
14011404 start = start .astimezone (dt .timezone .utc ) # transform local datetime to utc
14021405
@@ -1406,6 +1409,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
14061409 if end .tzinfo is None :
14071410 # if it's a naive datetime, localize the datetime.
14081411 end = end .replace (tzinfo = self .protocol .timezone ) # localize datetime into local tz
1412+ # TODO: convert to utc when quering?
14091413 if end .tzinfo != dt .timezone .utc :
14101414 end = end .astimezone (dt .timezone .utc ) # transform local datetime to utc
14111415
@@ -1439,8 +1443,7 @@ def delete(self):
14391443 if self .object_id is None :
14401444 raise RuntimeError ('Attempting to delete an unsaved event' )
14411445
1442- url = self .build_url (
1443- self ._endpoints .get ('event' ).format (id = self .object_id ))
1446+ url = self .build_url (self ._endpoints .get ('event' ).format (id = self .object_id ))
14441447
14451448 response = self .con .delete (url )
14461449
@@ -1458,16 +1461,13 @@ def save(self):
14581461 # update event
14591462 if not self ._track_changes :
14601463 return True # there's nothing to update
1461- url = self .build_url (
1462- self ._endpoints .get ('event' ).format (id = self .object_id ))
1464+ url = self .build_url (self ._endpoints .get ('event' ).format (id = self .object_id ))
14631465 method = self .con .patch
14641466 data = self .to_api_data (restrict_keys = self ._track_changes )
14651467 else :
14661468 # new event
14671469 if self .calendar_id :
1468- url = self .build_url (
1469- self ._endpoints .get ('event_calendar' ).format (
1470- id = self .calendar_id ))
1470+ url = self .build_url (self ._endpoints .get ('event_calendar' ).format (id = self .calendar_id ))
14711471 else :
14721472 url = self .build_url (self ._endpoints .get ('event_default' ))
14731473 method = self .con .post
@@ -1721,7 +1721,7 @@ def delete(self):
17211721
17221722 def get_events (self , limit = 25 , * , query = None , order_by = None , batch = None ,
17231723 download_attachments = False , include_recurring = True ):
1724- """ Get events from the this Calendar
1724+ """ Get events from this Calendar
17251725
17261726 :param int limit: max no. of events to get. Over 999 uses batch.
17271727 :param query: applies a OData filter to the request
0 commit comments