def create_quiz_thread(title, desc, results, options, user_profile, new_id):
    items = []
    tags = []
    error = None
    searchable = 1
    script_results = {}

    st = time.monotonic()
    try:
        items, tags = process_items(results)
        tags = str(','.join(tags))
        #print(tags)
        email_name = options.get('required', 0x02)
        searchable = options.get('searchable', searchable)
        options = {
            'email': email_name & 0x01,
            'name': email_name & 0x02,
            'show_correct': options.get('show_correct', 0)
        }

        credentials = GoogleCredentials().get_credential()
        params = [title, desc, user_profile, items, options]
        socket.setdefaulttimeout(180)
        script_results = run_app_script(credentials,
                                        function_name='createQuiz',
                                        params=params)
        metadata = script_results.get('metadata', {})
        folder = metadata.get('folder_name')
        form_id = metadata.get('id')
        if form_id and folder:
            params = [form_id, folder]
            run_app_script(credentials,
                           function_name='moveFiles',
                           params=params)
    except Exception as exc:
        logger.error("Quiz creation App Script exception: " + str(exc))
        error = str(exc)

    et = time.monotonic() - st

    # insert/update in DB
    try:
        metadata_quiz = script_results.get('metadata', {})
        metadata_quiz['elapsed'] = et
        if error:
            metadata_quiz['error'] = error
        # user_profile = results.get('user_profile', {})
        values = (new_id, metadata_quiz.get('id'), title, desc,
                  json.dumps(metadata_quiz,
                             indent=4), 1, metadata_quiz.get('count_items'),
                  metadata_quiz.get('total_points'), json.dumps(items,
                                                                indent=4),
                  metadata_quiz.get('published_url'),
                  json.dumps(user_profile,
                             indent=4), user_profile.get('email'), tags,
                  str(searchable))
        # print("****", values)
        connect_and_execute(insert_sqls[2], values)
    except Exception as exc:
        logger.error("error", exc)
Esempio n. 2
0
def get_quiz_responses(json_data):
    edit_url = json_data.get('edit_url')
    provider_id = json_data.get('provider_id')
    responses = json_data.get('responses')
    params = [edit_url or provider_id, int(responses)]
    credentials = GoogleCredentials().get_credential()
    socket.setdefaulttimeout(300)
    results = run_app_script(credentials,
                             function_name='getQuizResponses',
                             params=params)
    responses = results.get('responses', [])
    # TODO Convert to json format needed for Item Analysis
    # Call Analyze_test and send analysis data in the below dict
    exam_info = {'exam': {'name': results.get('title')}, 'student_list': []}

    for i in results.get('students'):
        curr_id = str(i[0].get('student_id'))
        exam_info['student_list'].append({'id': curr_id, 'item_responses': []})

    for i in responses:
        for k in i:
            for j in exam_info['student_list']:
                if str(k.get('student_id')) == j['id']:
                    j['item_responses'].append({
                        'item_id': str(k.get('item_id')),
                        'response': k.get('score')})

    quiz_analysis = analyze_test(exam_info)['analysis']

    return {"quiz_analysis": quiz_analysis}
def create_quiz(subject='Islam', topic=None):
    q = queries[9]
    sql = q.format(subject, 50)
    if topic:
        sql = queries[10].format(subject, topic, 15)

    results = connect_and_query(sql)
    # print(json.dumps(results, indent=4))
    items, tags = process_items(results)
    user = json.loads(results[0].get('metadata', {}))
    user = user.get('user_profile')
    pt = "We are compiling the results for 25 Quizzes. " \
         "Please complete any missed ones before the 29th of Ramadan.\n\n" \
         "We are very grateful for your overwhelming response, " \
         "support and feedback to our daily Ramadan quizzes. " \
         "Ramadan will shortly be over but our striving to gain knowledge " \
         "should continue. We will soon be introducing a feature to allow " \
         "you to contribute your own questions and create your own quizzes. " \
         "Please look out for more updates on this soon."

    creds = GoogleCredentials().get_credential()
    options = {'email': 0, 'name': 1, 'show_correct': 1}
    params = [
        'Ramadan 2020 Quiz Review 7',
        "All " + topic + " Questions (" + str(len(results)) + "). "
        "See all quizzes here: http://muslimscholars.info/quiz/\n\n" + pt,
        user, items, options
    ]
    return run_app_script(creds, function_name='createQuiz', params=params)
Esempio n. 4
0
def create_quiz_form_db(json_data):
    title = json_data.get('quiz_name')
    desc = json_data.get('quiz_description')
    ids = json_data.get('item_ids')
    user_profile = json_data.get('user_profile')

    # get items from list of ids
    sql = queries[11].format(','.join(map(str, ids)))
    results = connect_and_execute(sql)
    items = process_items(results)

    creds = GoogleCredentials().get_credential()
    params = [title, desc, user_profile, items, 0]
    results = run_app_script(creds, function_name='createQuiz', params=params)
    # TODO: save in DB

    return {"quiz": results}