Пример #1
0
    async def organize(self,
                       ctx,
                       quiz_type: str = None,
                       team_size: str = None):
        if ctx.channel.name != text(CHANNEL_SETUP):
            return

        if quiz_type not in ['normal', 'jeopardy', 'only connect']:
            quiz_type = 'normal'

        if not team_size:
            team_size = 2

        team_size = min(max(int(team_size), 2), 8)

        self._quiz = Quiz(quiz_type, ctx.message.author, team_size)
        self._quiz_message = await ctx.send(self._quiz.organization_text())

        await self._quiz_message.add_reaction(EMOJI_OK)
        await self._quiz_message.add_reaction(EMOJI_ACCEPT)
        await self._quiz_message.add_reaction(EMOJI_DECLINE)

        try:
            for team_id in range(1, team_size + 1):
                role = await self._management.get_or_create_role('Team ' +
                                                                 str(team_id))
                team = Team(role, team_id)
                self._quiz.add_team(team)
                await self._quiz_message.add_reaction(EMOJI_TEAM[team_id - 1])
        except Exception as e:
            print(e)

        await ctx.message.delete()
Пример #2
0
    def test_question_model(self):
        """Test basic question model"""

        q = Quiz(num_questions=10, family='Test2 family')
        db.session.add(q)
        for i in range(10):
            question = Question(url='test_url',
                                correct_answer='right answer',
                                wrong_answer_1='wrong one',
                                wrong_answer_2='wrong too',
                                wrong_answer_3='wrong 3',
                                slug='test-slug')
            q.questions.append(question)
        db.session.commit()

        qq = q.questions[0]

        self.assertEqual(len(q.questions), 10)
        self.assertEqual(qq.url, 'test_url')
        self.assertEqual(qq.correct_answer, 'right answer')
        self.assertEqual(qq.wrong_answer_2, 'wrong too')
        self.assertEqual(qq.search_slug, 'test+slug')
        self.assertEqual(len(Question.query.all()), 30)
        self.assertEqual(
            len(Question.query.filter(Question.url == 'test_url').all()), 10)
        self.assertEqual(len(qq.part_of), 1)
        self.assertEqual(qq.part_of[0].id, q.id)
Пример #3
0
 def test_quiz_can_be_added(self):
     self.test_quiz_2 = Quiz("2020-02-02", 10, "MEDIUM", "Geography", [])
     self.assertEqual("2020-02-02", self.test_quiz_2.date)
     self.assertEqual(10, self.test_quiz_2.number_of_questions)
     self.assertEqual("MEDIUM", self.test_quiz_2.difficulty)
     self.assertEqual("Geography", self.test_quiz_2.topic)
     self.assertEqual([], self.test_quiz_2.question_list)
Пример #4
0
    async def load_quiz(self, ctx):
        io = BytesIO()
        await ctx.message.attachments[0].save(io)

        with session_scope() as session:
            instances = [Quiz(**instance) for instance in json.load(io)]
            session.add_all(instances)

        await ctx.send(f"`{len(instances)}`개 데이터를 추가했습니다.")
Пример #5
0
def test_next_question_causes_finish():
    Quiz.max_time_in_seconds = 0.1
    quiz = Quiz(FakeSource, 1234, "easy", "9", None)
    quiz.start()

    for _ in range(10):
        sleep(0.1)
        quiz.next_question()

    assert quiz.is_finished
Пример #6
0
def select_all():
    quizzes = []
    sql = "SELECT * FROM quizzes"
    results = run_sql(sql)
    for result in results:
        difficulty = difficulty_repository.select(result["difficulty_id"])
        topic = topic_repository.select(result["topic_id"])
        quiz = Quiz(result["date"], result["number_of_questions"], difficulty,
                    topic, result["question_list"], result["id"])
        quizzes.append(quiz)
    return quizzes
Пример #7
0
def test_next_question():
    Quiz.max_time_in_seconds = 0.1
    quiz = Quiz(FakeSource, 1234, "easy", "9", None)
    quiz.start()
    start_question = quiz.current_question

    sleep(0.1)
    quiz.next_question()
    second_question = quiz.current_question

    assert start_question is second_question - 1
Пример #8
0
def select(id):
    quiz = None
    sql = "SELECT * FROM quizzes WHERE id = %s"
    values = [id]
    result = run_sql(sql, values)[0]
    difficulty = difficulty_repository.select(result["difficulty_id"])
    topic = topic_repository.select(result["topic_id"])

    if result is not None:
        quiz = Quiz(result["date"], result["number_of_questions"], difficulty,
                    topic, result["question_list"])
    return quiz
Пример #9
0
    def create_quiz(self,
                    source,
                    difficulty=None,
                    category=None,
                    max_questions=None):
        """creates a new quiz and adds it to the store"""
        # Get the lowest available code
        code = 1
        if len(self.questions) is not 0:
            code = max([quiz.code for quiz in self.quizes.values()]) + 1

        new_quiz = Quiz(source, code, difficulty, category, max_questions)
        self.quizes[new_quiz.quiz_id] = new_quiz
        return new_quiz.quiz_id
Пример #10
0
def add_questions(file_path, family):
    """Add new quizzes to existing database from CSV of questions"""

    with open(f'{file_path}', newline="") as csvfile:
        questions = DictReader(csvfile)
        count = 0
        for question in questions:
            if count % 10 == 0:
                new_quiz = Quiz(family=family, num_questions=10)
                db.session.add(new_quiz)
            new_question = Question(**question)
            new_quiz.questions.append(new_question)
            db.session.add(new_question)
            count += 1
        db.session.commit()
Пример #11
0
def update_quiz(id):
    date = request.form["date"]
    number_of_questions = request.form["number_of_questions"]

    difficulty_id = request.form["difficulty_id"]
    difficulty = difficulty_repository.select(difficulty_id)

    topic_id = request.form["topic_id"]
    topic = topic_repository.select(topic_id)

    question_list = request.form["question_list"]

    quiz = Quiz(date, number_of_questions, difficulty, topic, question_list,
                id)
    quiz_repository.update(quiz)
    return redirect("/quizzes")
Пример #12
0
    def test_quiz_model(self):
        """Test basic quiz model"""

        q = Quiz(num_questions=10, family='Test2 family')
        db.session.add(q)
        db.session.commit()

        self.assertEqual(len(q.questions), 0)
        self.assertEqual(q.num_questions, 10)
        self.assertEqual(q.family, 'Test2 family')
        self.assertEqual(len(Quiz.query.all()), 3)
        self.assertEqual(
            len(Quiz.query.filter(Quiz.family == 'Test2 family').all()), 1)
        self.assertEqual(
            len(Quiz.query.filter(Quiz.family == 'test family').all()), 2)
        self.assertEqual(q.num_by_family, 1)
Пример #13
0
def create_quiz():
    date = request.form["date"]
    number_of_questions = request.form["number_of_questions"]

    difficulty_id = request.form["difficulty"]
    difficulty = difficulty_repository.select(difficulty_id)

    topic_id = request.form["topic"]
    topic = topic_repository.select(topic_id)

    for question in number_of_questions:
        question_list.append(question)
    return question_list

    new_quiz = Quiz(date, number_of_questions, difficulty, topic,
                    question_list)
    quiz_repository.save(new_quiz)
    return redirect("/quizzes")
Пример #14
0
def quiz_dashboard(qid=None):
    if not current_user.is_authenticated:
        flash('Login is Required for this action!')
        return redirect('/', 302)
    if not current_user.is_admin:
        flash('You need to be an Admin for Performing this action!')
        return redirect('/', 302)

    template = "_question.html"
    req_path = request.path.split('/')[-1]

    if qid and len(qid) > 24:
        return render_template('404.html')
    if req_path == qid:
        req_path = request.path.split('/')[-2]

    if req_path == 'add':
        form = AddQuestion()
        if request.method == "POST":
            if form.validate():
                sol = {
                    1: form.option1.data,
                    2: form.option2.data,
                    3: form.option3.data,
                    4: form.option4.data,
                }
                Quiz(question=form.question.data,
                     options=[
                         form.option1.data,
                         form.option2.data,
                         form.option3.data,
                         form.option4.data,
                     ],
                     answer=sol.get(form.solution.data)).save_quiz()
                flash('Question Saved Successfully!')
                return redirect('/admin/dashboard/Quiz/edit')
        return render_template('add' + template, form=form)

    elif req_path == 'edit':
        if not qid:
            questions = Quiz.get_questions(userID=None,
                                           show_history=True,
                                           is_admin=True,
                                           limit=1000)
            for question in questions:
                question._id = str(question._id)

            return render_template('display_questions.html',
                                   questions=questions)

        form = EditQuestion()
        question = Quiz.get_question(qid)
        if request.method == "POST":
            if form.validate_on_submit():
                if question:
                    question.question = form.question.data
                    question.options = [
                        form.option1.data, form.option2.data,
                        form.option3.data, form.option4.data
                    ]
                    sol = {
                        1: form.option1.data,
                        2: form.option2.data,
                        3: form.option3.data,
                        4: form.option4.data,
                    }
                    question.answer = sol.get(form.solution.data)
                    question.update_quiz_info()
                    # print('Quiz updated!')
                    flash('Question Edited Successfully!')
                    return redirect('/admin/dashboard/Quiz/edit')
                else:
                    flash('Unable to find Question in DB')
                    return redirect('/')
            else:
                flash("Couldn't Validate form..")
                # print(form.validate_on_submit())
                return render_template('edit' + template, form=form)

        if question:
            form.solution.default = question.options.index(question.answer) + 1
            form.process()
            form.question.data = question.question
            form.option1.data = question.options[0]
            form.option2.data = question.options[1]
            form.option3.data = question.options[2]
            form.option4.data = question.options[3]
            # form.process()

        return render_template('edit' + template, form=form)

    elif req_path == 'delete' or qid:
        if request.method == "POST" and qid:
            # print(help(Quiz.DB.CURSOR.delete_one))
            Quiz.DB.CURSOR.Quiz.delete_one({'_id': ObjectId(qid)})
            flash('Question Deleted!')
            return redirect('/admin/dashboard/Quiz/delete')

        if not qid:
            questions = Quiz.get_questions(userID=None,
                                           show_history=True,
                                           is_admin=True,
                                           limit=1000)
            for question in questions:
                question._id = str(question._id)

            return render_template('display_questions.html',
                                   questions=questions)
        return render_template('delete_question.html')
    else:
        return render_template('404.html')
Пример #15
0
def setup(bot):
    bot.add_cog(Quiz(bot))
Пример #16
0
from json import load
from models.quiz import Quiz
content = load(open('json_quiz.json'))
for question in content:
    Quiz(question=question.get('question'),
         options=question.get('options'),
         answer=question.get('answer')).save_quiz()
Пример #17
0
def test_finish_quiz():
    quiz = Quiz(FakeSource, 1234, "easy", "9", None)
    quiz.finish()
    assert quiz.is_finished is True
Пример #18
0
db.create_all()

with open('generator/general_5.csv') as questions:
    db.session.bulk_insert_mappings(Question, DictReader(questions))

with open('generator/rose_3.csv') as questions:
    db.session.bulk_insert_mappings(Question, DictReader(questions))

with open('generator/aster_3.csv') as questions:
    db.session.bulk_insert_mappings(Question, DictReader(questions))

with open('generator/mint_3.csv') as questions:
    db.session.bulk_insert_mappings(Question, DictReader(questions))

with open('generator/pea_3.csv') as questions:
    db.session.bulk_insert_mappings(Question, DictReader(questions))

questions = Question.query.all()

family = ['general'] * 5 + ['Rose family'] * 3 + ['Aster family'] * 3
family = family + ['Mint family'] * 3 + ['Pea family'] * 3

for i in range(len(family)):
    new_quiz = Quiz(family=family[i], num_questions=10)
    for j in range(10):
        questions[10 * i + j].family = family[i]
        new_quiz.questions.append(questions[i * 10 + j])
    db.session.add(new_quiz)

db.session.commit()
Пример #19
0
 def setUp(self):
     self.test_quiz = Quiz("2020-01-01", 5, "EASY", "General Knowledge", [])
Пример #20
0
    def create_office_online(self):
        module = Module(
            'onedrive-and-office-online', 'One Drive & Office Online',
            'In this introduction to OneDrive and Office Online, pupils will learn to create, edit, save and upload documents in the cloud so that they can <b>create and edit documents from school or home</b>.',
            'one-drive-office-online')

        lesson1 = Lesson(
            'onedrive-and-office-online', 1, 'OneDrive & Office online',
            'How to create, edit, save, upload and access documents using OneDrive and Office Online',
            'None', 'None')
        lesson1.setLearningObjectiveIds('ss02', 'oo02*')
        lesson1.starter = """
      <ul>
        <li>Work in groups of 2's or 3's</li>
        <li>Take one piece of paper per group.</li>
        <li>Discuss and identify 3 difficulties of <b>using thumb drives</b></li>
      </ul>"""
        lesson1.resources = [
            {
                'url': '',
                'text': 'Lesson Slides'
            },
            {
                'url': '',
                'text': 'Cheat Sheet'
            },
        ]

        q1 = Quiz('q1', 'Using OneDrive?')
        q1.add_question(0, 'What is OneDrive?', [
            'A house with one drive',
            'A software service that can store files.'
        ], [False, True])
        q1.add_question(1, 'Which software company creates OneDrive?',
                        ['Microsoft', 'BISAK', 'Google', 'DropBox'],
                        [True, False, False, False])

        q2 = Quiz('q2', 'Uploading Files.')
        q2.add_question(0, 'Test Question 1?', ['Answer 1', 'Answer 2.'],
                        [False, True])
        q2.add_question(1, 'Test Question 2?', ['Answer 1', 'Answer 2.'],
                        [True, False])

        lesson1.addActivities(
            Activity(
                10, 'Starter', """
          <h2>In pairs, create a list of the issues you may face when you use a thumbdrive to transport files to and from home.</h2> 
          """),
            VideoActivity(
                10, 'What is OneDrive?',
                'https://www.dropbox.com/s/tkjpefa581rsibg/Internet%20Safety%20-%20Newsround%20Caught%20In%20The%20Web%20%289%20Feb%202010%29.mp4?raw=1'
            ), QuizActivity(10, 'What is OneDrive?', q1),
            Activity(15,
                     'Uploading and locating files in the Cloud.',
                     content=""), QuizActivity(10, 'Test Quiz?', q2),
            Activity(0,
                     '(Extension) What is OneDrive Version History?',
                     content=""), RateProgressActivity(5,
                                                       'Rate your progress'),
            RecapActivity(10, 'Recap'),
            LoPuActivity(5, 'LoPu')
            #,
            # QuizItem    ('00:45',  f"CFU: {tlQuiz.title}", tlQuiz),

            #     TimelineItem('00:50',  BringItAllTogetherItem('Bring It All Together'),
            #     TimelineItem('00:54',  RateYourProgressItem('Rate Your Progress'),
            #     TimelineItem('00:57',  NailItDown('Nail It Down'),
            #     TimelineItem('00:59',  LOPU()),
        )

        lesson1.homework = """From `vle"""

        module.add_lesson(lesson1)

        self.modules[module.id] = module
Пример #21
0
question_005 = Question("Who wrote Catch-22?", "Joseph Heller",
                        "John Steinbeck", "Ernest Hemmingway", "Jane Austin",
                        difficulty_2, topic_05, user_topic_00, False)
question_repository.save(question_005)

question_006 = Question("Who shot Mr Burns?", "Maggie Simpson",
                        "Homer Simpson", "Marge Simpson", "Smithers",
                        difficulty_1, topic_06, user_topic_00, False)
question_repository.save(question_006)

question_007 = Question("Who painted The Salvator Mundi?", "Leonardo da Vinci",
                        "Vincent van Gogh", "Andy Worhol", "El Greco",
                        difficulty_3, topic_07, user_topic_00, False)
question_repository.save(question_007)

question_008 = Question("What was the first song played on BBC Radio 1?",
                        "Flowers in The Rain", "The Sound of Music",
                        "She Loves Me", "Time After Time", difficulty_4,
                        topic_08, user_topic_00, False)
question_repository.save(question_008)

quiz_01 = Quiz("2020-01-01", 5, difficulty_1, topic_00, [])
quiz_repository.save(quiz_01)

topic_repository.select_all()
user_topic_repository.select_all()
difficulty_repository.select_all()
question_repository.select_all()
quiz_repository.select_all()

pdb.set_trace()