77"""
88
99
10+ import dateutil .parser
11+
1012from base64 import b32encode
1113from datetime import datetime , timedelta
1214from math import exp
15+ from zoneinfo import ZoneInfo
1316
14- import dateutil .parser
15- from pytz import utc
1617
17- DEFAULT_START_DATE = datetime (2030 , 1 , 1 , tzinfo = utc )
18+ DEFAULT_START_DATE = datetime (2030 , 1 , 1 , tzinfo = ZoneInfo ( "UTC" ) )
1819
1920"""
2021Default grading policy for a course run.
@@ -95,7 +96,7 @@ def has_course_started(start_date):
9596 start_date (datetime): The start datetime of the course in question.
9697 """
9798 # TODO: This will throw if start_date is None... consider changing this behavior?
98- return datetime .now (utc ) > start_date
99+ return datetime .now (ZoneInfo ( "UTC" ) ) > start_date
99100
100101
101102def has_course_ended (end_date ):
@@ -107,7 +108,7 @@ def has_course_ended(end_date):
107108 Arguments:
108109 end_date (datetime): The end datetime of the course in question.
109110 """
110- return datetime .now (utc ) > end_date if end_date is not None else False
111+ return datetime .now (ZoneInfo ( "UTC" ) ) > end_date if end_date is not None else False
111112
112113
113114def is_enrollment_open (enrollment_start_date , enrollment_end_date ):
@@ -118,9 +119,9 @@ def is_enrollment_open(enrollment_start_date, enrollment_end_date):
118119 enrollment_start_date (datetime): The enrollment start datetime of the course.
119120 enrollment_end_date (datetime): The enrollment end datetime of the course.
120121 """
121- now = datetime .now (utc )
122- enrollment_start_date = enrollment_start_date or datetime .min .replace (tzinfo = utc )
123- enrollment_end_date = enrollment_end_date or datetime .max .replace (tzinfo = utc )
122+ now = datetime .now (ZoneInfo ( "UTC" ) )
123+ enrollment_start_date = enrollment_start_date or datetime .min .replace (tzinfo = ZoneInfo ( "UTC" ) )
124+ enrollment_end_date = enrollment_end_date or datetime .max .replace (tzinfo = ZoneInfo ( "UTC" ) )
124125 return enrollment_start_date < now < enrollment_end_date
125126
126127
@@ -133,7 +134,7 @@ def course_starts_within(start_date, look_ahead_days):
133134 start_date (datetime): The start datetime of the course in question.
134135 look_ahead_days (int): number of days to see in future for course start date.
135136 """
136- return datetime .now (utc ) + timedelta (days = look_ahead_days ) > start_date
137+ return datetime .now (ZoneInfo ( "UTC" ) ) + timedelta (days = look_ahead_days ) > start_date
137138
138139
139140def course_start_date_is_default (start , advertised_start ):
@@ -179,10 +180,10 @@ def sorting_dates(start, advertised_start, announcement):
179180 try :
180181 start = dateutil .parser .parse (advertised_start )
181182 if start .tzinfo is None :
182- start = start .replace (tzinfo = utc )
183+ start = start .replace (tzinfo = ZoneInfo ( "UTC" ) )
183184 except (TypeError , ValueError , AttributeError ):
184185 start = start # lint-amnesty, pylint: disable=self-assigning-variable
185186
186- now = datetime .now (utc )
187+ now = datetime .now (ZoneInfo ( "UTC" ) )
187188
188189 return announcement , start , now
0 commit comments