def localize_if_needed(d): # type: (datetime.datetime) -> datetime.datetime if d.tzinfo is None: from relate.utils import localize_datetime return localize_datetime(d) else: return d
def get_custom_page_types_stop_support_deadline(): # type: () -> Optional[datetime.datetime] from django.conf import settings custom_page_types_removed_deadline = getattr( settings, "RELATE_CUSTOM_PAGE_TYPES_REMOVED_DEADLINE", None) force_deadline = datetime.datetime(2019, 1, 1, 0, 0, 0, 0) if (custom_page_types_removed_deadline is None or custom_page_types_removed_deadline > force_deadline): custom_page_types_removed_deadline = force_deadline from relate.utils import localize_datetime return localize_datetime(custom_page_types_removed_deadline)
def parse_date_spec(course, datespec, return_now_on_error=True): if datespec is None: return None if isinstance(datespec, datetime.datetime): if datespec.tzinfo is None: from relate.utils import localize_datetime return localize_datetime(datespec) else: return datespec if isinstance(datespec, datetime.date): return datetime.datetime(datespec) datespec = datespec.strip() # {{{ parse postprocessors postprocs = [] while True: parsed_one = False for pp_class in DATESPEC_POSTPROCESSORS: datespec, postproc = pp_class.parse(datespec) if postproc is not None: parsed_one = True postprocs.insert(0, postproc) break datespec = datespec.strip() if not parsed_one: break # }}} def apply_postprocs(dtime): for postproc in postprocs: dtime = postproc.apply(dtime) return dtime match = DATE_RE.match(datespec) if match: return apply_postprocs( datetime.date(int(match.group(1)), int(match.group(2)), int(match.group(3)))) from course.models import Event match = TRAILING_NUMERAL_RE.match(datespec) if match: try: return apply_postprocs( Event.objects.get(course=course, kind=match.group(1), ordinal=int(match.group(2))).time) except ObjectDoesNotExist: if return_now_on_error: return now() else: raise InvalidDatespec(datespec) try: return apply_postprocs( Event.objects.get(course=course, kind=datespec, ordinal=None).time) except ObjectDoesNotExist: if return_now_on_error: return now() else: raise InvalidDatespec(datespec)