forked from duvholt/memorizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
import.py
executable file
·56 lines (52 loc) · 2.19 KB
/
import.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python3
from main import app, db
import models
import json
import os
def import_questions():
# TODO: Proper importing with migrations
# Reset database
models.db.drop_all()
models.db.create_all()
# Load exams from folder with json files
for filename in os.listdir('questions'):
if os.path.isdir(os.path.join('questions', filename)):
# Skip folders
continue
with open('questions/' + filename, encoding='utf-8') as f:
course_json = json.load(f)
print('Importing questions from', course_json['name'], course_json['code'])
# Get or create course
course = models.Course.query.filter_by(code=course_json['code'], name=course_json['name']).first()
if not course:
course = models.Course(course_json['code'], course_json['name'])
db.session.add(course)
db.session.commit()
# Get or create exam
exam = models.Exam.query.filter_by(name=course_json['exam'], course=course).first()
if not exam:
exam = models.Exam(course_json['exam'], course.id)
db.session.add(exam)
db.session.commit()
questions = course_json['questions']
for question in questions:
image = question['image'] if 'image' in question else ""
question_object = models.Question(question['question'], exam.id, image)
db.session.add(question_object)
db.session.commit()
for number, answer in enumerate(question['answers']):
if type(question['correct']) is int and question['correct'] == number:
correct = True
elif type(question['correct']) is list and number in question['correct']:
correct = True
else:
correct = False
# Setting image if it exists
alternative = models.Alternative(answer, number, correct, question_object.id)
db.session.add(alternative)
db.session.commit()
print("Importing completed")
if __name__ == '__main__':
print("Importing questions...")
with app.app_context():
import_questions()