1
1
import calendar
2
2
import datetime as dt
3
3
import logging
4
+ from zoneinfo import ZoneInfo
4
5
5
6
# noinspection PyPep8Naming
6
7
from bs4 import BeautifulSoup as bs
@@ -551,10 +552,9 @@ def __init__(self, parent, response_status):
551
552
self .response_time = None
552
553
if self .response_time :
553
554
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 )
556
556
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 } " )
558
558
self .response_time = None
559
559
else :
560
560
self .response_time = None
@@ -1066,8 +1066,9 @@ def start(self, value):
1066
1066
if value .tzinfo is None :
1067
1067
# localize datetime
1068
1068
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' )
1071
1072
self .__start = value
1072
1073
if not self .end :
1073
1074
self .end = self .__start + dt .timedelta (minutes = 30 )
@@ -1093,8 +1094,9 @@ def end(self, value):
1093
1094
if value .tzinfo is None :
1094
1095
# localize datetime
1095
1096
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' )
1098
1100
self .__end = value
1099
1101
self ._track_changes .add (self ._cc ('end' ))
1100
1102
@@ -1371,7 +1373,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
1371
1373
:rtype: list[Event] or Pagination
1372
1374
"""
1373
1375
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
1375
1377
return []
1376
1378
1377
1379
url = self .build_url (
@@ -1397,6 +1399,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
1397
1399
if start .tzinfo is None :
1398
1400
# if it's a naive datetime, localize the datetime.
1399
1401
start = start .replace (tzinfo = self .protocol .timezone ) # localize datetime into local tz
1402
+ # TODO: convert to utc when quering?
1400
1403
if start .tzinfo != dt .timezone .utc :
1401
1404
start = start .astimezone (dt .timezone .utc ) # transform local datetime to utc
1402
1405
@@ -1406,6 +1409,7 @@ def get_occurrences(self, start, end, *, limit=None, query=None, order_by=None,
1406
1409
if end .tzinfo is None :
1407
1410
# if it's a naive datetime, localize the datetime.
1408
1411
end = end .replace (tzinfo = self .protocol .timezone ) # localize datetime into local tz
1412
+ # TODO: convert to utc when quering?
1409
1413
if end .tzinfo != dt .timezone .utc :
1410
1414
end = end .astimezone (dt .timezone .utc ) # transform local datetime to utc
1411
1415
@@ -1439,8 +1443,7 @@ def delete(self):
1439
1443
if self .object_id is None :
1440
1444
raise RuntimeError ('Attempting to delete an unsaved event' )
1441
1445
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 ))
1444
1447
1445
1448
response = self .con .delete (url )
1446
1449
@@ -1458,16 +1461,13 @@ def save(self):
1458
1461
# update event
1459
1462
if not self ._track_changes :
1460
1463
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 ))
1463
1465
method = self .con .patch
1464
1466
data = self .to_api_data (restrict_keys = self ._track_changes )
1465
1467
else :
1466
1468
# new event
1467
1469
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 ))
1471
1471
else :
1472
1472
url = self .build_url (self ._endpoints .get ('event_default' ))
1473
1473
method = self .con .post
@@ -1721,7 +1721,7 @@ def delete(self):
1721
1721
1722
1722
def get_events (self , limit = 25 , * , query = None , order_by = None , batch = None ,
1723
1723
download_attachments = False , include_recurring = True ):
1724
- """ Get events from the this Calendar
1724
+ """ Get events from this Calendar
1725
1725
1726
1726
:param int limit: max no. of events to get. Over 999 uses batch.
1727
1727
:param query: applies a OData filter to the request
0 commit comments