Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)