def open_lesson(course_id, lesson_id):
    items = []
    auth_storage = plugin.get_storage('auth')
    auth = UdacityAuth(auth_storage)
    udacity = Udacity(auth)

    contents = udacity.get_lesson_contents(lesson_id)
    for content in contents:
        if content['model'] == 'Video':
            items.append({
                'label': content.get('title'),
                'path': plugin.url_for(
                    'play_video', course_id=course_id, lesson_id=lesson_id,
                    asset_id=content.get('key'),
                    youtube_id=content['_video'].get('youtube_id')),
                'is_playable': True,
            })
        elif content['model'] == 'Exercise':
            items.append({
                'label': content.get('title'),
                'path': plugin.url_for(
                    'play_exercise', course_id=course_id,
                    lesson_id=lesson_id, group_id=content.get('key'),
                    lecture=json.dumps(content.get('lecture_ref')),
                    quiz=json.dumps(content.get('quiz_ref')),
                    answer=json.dumps(content.get('answer_ref'))),
            })

    return items
def course_catalog():
    udacity = Udacity(None)
    courses = udacity.get_courses()
    items = [{
        'label': title,
        'path': plugin.url_for('open_course', course_id=course_id),
        'thumbnail': thumbnail
    } for title, course_id, _, thumbnail in courses]

    return items
Beispiel #3
0
def course_catalog():
    udacity = Udacity(None)
    courses = udacity.get_courses()
    items = [{
        'label': title,
        'path': plugin.url_for('open_course', course_id=course_id),
        'thumbnail': thumbnail
    } for title, course_id, _, thumbnail in courses]

    return items
Beispiel #4
0
def load_quiz(course_id, lesson_id, group_id, quiz):
    quiz_data = json.loads(quiz)
    auth = UdacityAuth(plugin.get_storage('auth'))
    auth.authenticate(plugin.get_setting('username'),
                      plugin.get_setting('user_password'))
    udacity = Udacity(auth)
    last_quiz_data = udacity.get_last_quiz_submission(quiz_data['key'])
    if quiz_data['data']['model'] == 'ProgrammingQuiz':
        dialog = xbmcgui.Dialog()
        dialog.ok(plugin.get_string(30010), plugin.get_string(30011))
    else:
        new = controls.FormQuiz()
        new.build(course_id, lesson_id, group_id, quiz_data['key'], quiz_data,
                  last_quiz_data, udacity, plugin)
        new.doModal()
Beispiel #5
0
 def test_only_include_available_courses(self):
     data = {
         'st101': {
             'title': 'Test 1',
             'catalog_entry': {
                 'subtitle': 'Making Decisions Based on Data',
                 'level': 'beginner',
                 '_image': None,
                 'short_summary': 'Summary!',
             },
             'model': 'Lesson',
             '_available': False
         }
     }
     udacity = Udacity(None)
     results = udacity.process_courses(data)
     self.assertTrue(len(results) == 0)
def my_courses():
    items = []
    auth_storage = plugin.get_storage('auth')
    auth = UdacityAuth(auth_storage)
    username = plugin.get_setting('username')
    password = plugin.get_setting('user_password')
    if auth.authenticate(username, password):
        udacity = Udacity(auth)
        courses = udacity.get_my_courses()
        for title, course_id in courses:
            items.append({
                'label': title,
                'path': plugin.url_for('open_course', course_id=course_id),
            })

        return items
    else:
        return plugin.notify(auth.error)
Beispiel #7
0
 def test_dont_fail_when_no_image_data(self):
     data = {
         'st101': {
             'title': 'Test 1',
             'catalog_entry': {
                 'subtitle': 'Making Decisions Based on Data',
                 'level': 'beginner',
                 '_image': None,
                 'short_summary': 'Summary!',
             },
             'model': 'Lesson',
             '_available': True
         }
     }
     udacity = Udacity(None)
     results = udacity.process_courses(data)
     # Check that the thumbnail field in the tuple is None
     self.assertTrue(results[0][3] is None)
def load_quiz(course_id, lesson_id, group_id, quiz):
    quiz_data = json.loads(quiz)
    auth = UdacityAuth(plugin.get_storage('auth'))
    auth.authenticate(
        plugin.get_setting('username'),
        plugin.get_setting('user_password'))
    udacity = Udacity(auth)
    last_quiz_data = udacity.get_last_quiz_submission(quiz_data['key'])
    if quiz_data['data']['model'] == 'ProgrammingQuiz':
        dialog = xbmcgui.Dialog()
        dialog.ok(
            plugin.get_string(30010),
            plugin.get_string(30011))
    else:
        new = controls.FormQuiz()
        new.build(
            course_id, lesson_id, group_id, quiz_data['key'],
            quiz_data, last_quiz_data, udacity, plugin)
        new.doModal()
def open_course(course_id):
    items = []
    udacity = Udacity(None)
    contents = udacity.get_course_contents(course_id)
    if not contents:
        dialog = xbmcgui.Dialog()
        dialog.ok(
            plugin.get_string(30010),
            plugin.get_string(30016),
        )
        return None

    for title, key, model in contents:
        items.append({
            'label': title,
            'path': plugin.url_for(
                'open_lesson', course_id=course_id, lesson_id=key)
        })

    return items
Beispiel #10
0
def my_courses():
    items = []
    auth_storage = plugin.get_storage('auth')
    auth = UdacityAuth(auth_storage)
    username = plugin.get_setting('username')
    password = plugin.get_setting('user_password')
    if auth.authenticate(username, password):
        udacity = Udacity(auth)
        courses = udacity.get_my_courses()
        for title, course_id in courses:
            items.append({
                'label':
                title,
                'path':
                plugin.url_for('open_course', course_id=course_id),
            })

        return items
    else:
        return plugin.notify(auth.error)
Beispiel #11
0
def open_course(course_id):
    items = []
    udacity = Udacity(None)
    contents = udacity.get_course_contents(course_id)
    if not contents:
        dialog = xbmcgui.Dialog()
        dialog.ok(
            plugin.get_string(30010),
            plugin.get_string(30016),
        )
        return None

    for title, key, model in contents:
        items.append({
            'label':
            title,
            'path':
            plugin.url_for('open_lesson', course_id=course_id, lesson_id=key)
        })

    return items
Beispiel #12
0
 def test_dont_fail_when_answer_data_empty(self):
     data = {
         '382888632': {
             'quiz_ref': {
                 'ref': 'Node',
                 'key': '381838603'
             },
             'answer_ref': None,
             'lecture_ref': None,
             'model': 'Exercise',
         },
         '313947755': {
             'steps_refs': [{
                 'key': '382888632'
             }],
         },
         '381838603': {
             'model': 'Quiz'
         },
     }
     udacity = Udacity(None)
     results = udacity.process_lesson_contents(data, '313947755')
     self.assertTrue(not results[0]['answer_ref'])
Beispiel #13
0
def open_lesson(course_id, lesson_id):
    items = []
    auth_storage = plugin.get_storage('auth')
    auth = UdacityAuth(auth_storage)
    udacity = Udacity(auth)

    contents = udacity.get_lesson_contents(lesson_id)
    for content in contents:
        if content['model'] == 'Video':
            items.append({
                'label':
                content.get('title'),
                'path':
                plugin.url_for('play_video',
                               course_id=course_id,
                               lesson_id=lesson_id,
                               asset_id=content.get('key'),
                               youtube_id=content['_video'].get('youtube_id')),
                'is_playable':
                True,
            })
        elif content['model'] == 'Exercise':
            items.append({
                'label':
                content.get('title'),
                'path':
                plugin.url_for('play_exercise',
                               course_id=course_id,
                               lesson_id=lesson_id,
                               group_id=content.get('key'),
                               lecture=json.dumps(content.get('lecture_ref')),
                               quiz=json.dumps(content.get('quiz_ref')),
                               answer=json.dumps(content.get('answer_ref'))),
            })

    return items
 def test_get_course_contents(self):
     ud = Udacity(None)
     courses = ud.get_course_contents('cs215')
     self.assertTrue(type(courses) == list)
     self.assertTrue(len(courses[0]) == 3)
 def test_get_courses(self):
     ud = Udacity(None)
     courses = ud.get_courses()
     self.assertTrue(type(courses) == list)
 def test_get_lesson_contents(self):
     ud = Udacity(None)
     contents = ud.get_lesson_contents('308873795')
     self.assertTrue(type(contents) == list)
     self.assertTrue(type(contents[0]) == dict)