Skip to content
Snippets Groups Projects

Toggling pregrading and Identifying blank solutions

Open Ghost User requested to merge feature/toggle-pregrading into develop
Compare and Show latest version
3 files
+ 54
24
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -16,12 +16,46 @@ depends_on = None
def upgrade():
# Add grading policy column to Problem
op.add_column('problem', sa.Column('value',
sa.Enum('set_nothing', 'set_blank', 'set_blank_single', name='gradingpolicy'),
default=1, nullable=True))
# Create copy of problem table
op.create_table(
'problem_copy',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('name', sa.Text(), nullable=False),
sa.Column('exam_id', sa.Integer(), nullable=False),
sa.Column('grading_policy', sa.Enum('set_nothing', 'set_blank', 'set_blank_single', name='gradingpolicy'),
default=1, nullable=False),
sa.ForeignKeyConstraint(['exam_id'], ['exam.id'], ),
sa.PrimaryKeyConstraint('id')
)
conn = op.get_bind()
old_problems = conn.execute('SELECT id, name, exam_id FROM problem').fetchall()
grading_policy = "'set_blank'"
for id, name, exam_id in old_problems:
# Add quotes for SQLite
name = "'" + name + "'"
conn.execute(f'INSERT INTO problem_copy VALUES ({id}, {name}, {exam_id}, {grading_policy})')
op.drop_table('problem')
op.rename_table('problem_copy', 'problem')
def downgrade():
# Remove grading policy column from Problem
op.drop_column('problem', 'value')
# Create copy of old problem table (without grading policy)
op.create_table(
'problem_copy',
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
sa.Column('name', sa.Text(), nullable=False),
sa.Column('exam_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['exam_id'], ['exam.id'], ),
sa.PrimaryKeyConstraint('id')
)
# Move data from new problem table into old problem table
op.execute('INSERT INTO problem_copy (id, name, exam_id)' +
'SELECT id, name, exam_id FROM problem')
op.drop_table('problem')
op.rename_table('problem_copy', 'problem')
Loading