Exemplo n.º 1
0
    def _get_course_run_start_end_str(self, course_run):
        """
        Get the course run start and end as a descriptive string. Also include a note if enrollment is closed.
        """
        course_run_start = course_run.get('start')
        course_run_end = course_run.get('end')
        date_str = ''

        if course_run_start:
            date_str += '{starts}: {:%B %Y}'.format(
                parse_lms_api_datetime(course_run_start),
                starts=_('Starts')
            )

        if course_run_end:
            if date_str:
                date_str += ', '

            date_str += '{ends}: {:%B %Y}. '.format(
                parse_lms_api_datetime(course_run_end),
                ends=_('Ends')
            )
        else:
            if date_str:
                date_str += '. '

        if not is_course_run_available_for_enrollment(course_run):
            date_str += 'Enrollment is closed. '

        return date_str
Exemplo n.º 2
0
def current_time_is_in_interval(start, end):
    """
    Determine whether the current time is on the interval [start, end].
    """
    interval_start = parse_lms_api_datetime(start or UNIX_MIN_DATE_STRING)
    interval_end = parse_lms_api_datetime(end or UNIX_MAX_DATE_STRING)
    return interval_start <= timezone.now() <= interval_end
Exemplo n.º 3
0
    def transform_courserun_title(self, content_metadata_item):
        """
        Return the title of the courserun content item.
        """
        title = content_metadata_item.get('title') or ''
        course_run_start = content_metadata_item.get('start')

        if course_run_start:
            if is_course_run_available_for_enrollment(content_metadata_item):
                title += ' ({starts}: {:%B %Y})'.format(
                    parse_lms_api_datetime(course_run_start),
                    starts=_('Starts')
                )
            else:
                title += ' ({:%B %Y} - {enrollment_closed})'.format(
                    parse_lms_api_datetime(course_run_start),
                    enrollment_closed=_('Enrollment Closed')
                )

        title_with_locales = []
        content_metadata_language_code = transform_language_code(content_metadata_item.get('content_language', ''))
        for locale in self.enterprise_configuration.get_locales(default_locale=content_metadata_language_code):
            title_with_locales.append({
                'locale': locale,
                'value': title
            })

        return title_with_locales
Exemplo n.º 4
0
def parse_datetime_to_epoch(datestamp, magnitude=1.0):
    """
    Convert an ISO-8601 datetime string to a Unix epoch timestamp in some magnitude.

    By default, returns seconds.
    """
    parsed_datetime = parse_lms_api_datetime(datestamp)
    time_since_epoch = parsed_datetime - UNIX_EPOCH
    return int(time_since_epoch.total_seconds() * magnitude)
Exemplo n.º 5
0
    def transform_courserun_title(self, content_metadata_item):
        """
        Return the title of the courserun content item.
        """
        title = content_metadata_item.get('title') or ''
        course_run_start = content_metadata_item.get('start')

        if course_run_start:
            if course_available_for_enrollment(content_metadata_item):
                title += ' ({starts}: {:%B %Y})'.format(
                    parse_lms_api_datetime(course_run_start),
                    starts=_('Starts'))
            else:
                title += ' ({:%B %Y} - {enrollment_closed})'.format(
                    parse_lms_api_datetime(course_run_start),
                    enrollment_closed=_('Enrollment Closed'))

        return [{
            'locale':
            transform_language_code(
                content_metadata_item.get('content_language', '')),
            'value':
            title
        }]
Exemplo n.º 6
0
 def test_transform_courserun_title_includes_start(self, course_run):
     """
     Transforming a title gives back the title with start date for course
     run of type `instructor-paced` or `self-paced`.
     """
     exporter = SapSuccessFactorsContentMetadataExporter('fake-user', self.config)
     expected_title = '{course_run_title} (Starts: {start_date})'.format(
         course_run_title=course_run['title'],
         start_date=parse_lms_api_datetime(course_run['start']).strftime('%B %Y')
     )
     assert exporter.transform_courserun_title(course_run) == \
         [{
             'locale': 'English',
             'value': expected_title
         }]
Exemplo n.º 7
0
 def test_transform_courserun_title_includes_enrollment_closed(self, course_run):
     """
     Transforming a title gives back the title with start date and
     `enrollment closed` message for course run with availability set to
     `Archived`.
     """
     exporter = SapSuccessFactorsContentMetadataExporter('fake-user', self.config)
     expected_title = '{course_run_title} ({start_date} - {enrollment_closed})'.format(
         course_run_title=course_run['title'],
         start_date=parse_lms_api_datetime(course_run['start']).strftime('%B %Y'),
         enrollment_closed='Enrollment Closed'
     )
     assert exporter.transform_courserun_title(course_run) == \
         [{
             'locale': 'English',
             'value': expected_title
         }]
Exemplo n.º 8
0
def get_earliest_start_date_from_program(program):
    """
    Get the earliest date that one of the courses in the program was available.
    For the sake of emails to new learners, we treat this as the program start date.

    Arguemnts:
        program (dict): Program data from Course Catalog API

    returns:
        datetime.datetime: The date and time at which the first course started
    """
    start_dates = []
    for course in program.get('courses', []):
        for run in course.get('course_runs', []):
            if run.get('start'):
                start_dates.append(parse_lms_api_datetime(run['start']))
    if not start_dates:
        return None
    return min(start_dates)
Exemplo n.º 9
0
 def test_current_time_in_interval(self, start, end, expected,
                                   fake_timezone):
     fake_timezone.now.return_value = parse_lms_api_datetime(
         '2016-01-01T00:00:00Z')
     assert utils.current_time_is_in_interval(start, end) is expected