Skip to content
Snippets Groups Projects
Commit ce3ccdf0 authored by robinwilliam.hundt's avatar robinwilliam.hundt
Browse files

Merge branch 'refactor' of gitlab.gwdg.de:j.michal/grady into refactor

parents 6f6f7eae 43cb3c1d
No related branches found
No related tags found
1 merge request!15Refactor
Pipeline #
...@@ -56,7 +56,6 @@ class Migration(migrations.Migration): ...@@ -56,7 +56,6 @@ class Migration(migrations.Migration):
('score', models.PositiveIntegerField(default=0)), ('score', models.PositiveIntegerField(default=0)),
('created', models.DateTimeField(auto_now_add=True)), ('created', models.DateTimeField(auto_now_add=True)),
('modified', models.DateTimeField(auto_now=True)), ('modified', models.DateTimeField(auto_now=True)),
('slug', models.SlugField(default=core.models.random_slug, editable=False, unique=True)),
('status', models.IntegerField(choices=[(0, 'editable'), (1, 'request reassignment'), (2, 'request review'), (3, 'accepted')], default=0)), ('status', models.IntegerField(choices=[(0, 'editable'), (1, 'request reassignment'), (2, 'request review'), (3, 'accepted')], default=0)),
('origin', models.IntegerField(choices=[(0, 'was empty'), (1, 'passed unittests'), (2, 'did not compile'), (3, 'could not link'), (4, 'created by a human. yak!')], default=4)), ('origin', models.IntegerField(choices=[(0, 'was empty'), (1, 'passed unittests'), (2, 'did not compile'), (3, 'could not link'), (4, 'created by a human. yak!')], default=4)),
], ],
...@@ -77,7 +76,6 @@ class Migration(migrations.Migration): ...@@ -77,7 +76,6 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('has_logged_in', models.BooleanField(default=False)), ('has_logged_in', models.BooleanField(default=False)),
('matrikel_no', models.CharField(default=core.models.random_matrikel_no, max_length=8, unique=True)),
('exam', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='students', to='core.ExamType')), ('exam', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='students', to='core.ExamType')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL)),
], ],
...@@ -92,7 +90,6 @@ class Migration(migrations.Migration): ...@@ -92,7 +90,6 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('seen_by_student', models.BooleanField(default=False)), ('seen_by_student', models.BooleanField(default=False)),
('text', models.TextField(blank=True)), ('text', models.TextField(blank=True)),
('slug', models.SlugField(default=core.models.random_slug, editable=False, unique=True)),
('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.Student')), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.Student')),
], ],
options={ options={
...@@ -109,7 +106,6 @@ class Migration(migrations.Migration): ...@@ -109,7 +106,6 @@ class Migration(migrations.Migration):
('full_score', models.PositiveIntegerField(default=0)), ('full_score', models.PositiveIntegerField(default=0)),
('description', models.TextField()), ('description', models.TextField()),
('solution', models.TextField()), ('solution', models.TextField()),
('slug', models.SlugField(default=core.models.random_slug, editable=False, unique=True)),
], ],
options={ options={
'verbose_name': 'SubmissionType', 'verbose_name': 'SubmissionType',
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-11-10 21:46
from __future__ import unicode_literals
import core.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0002_auto_20171110_1612'),
]
operations = [
migrations.AddField(
model_name='student',
name='matrikel_no',
field=models.CharField(default=core.models.random_matrikel_no, max_length=8, unique=True),
),
]
...@@ -19,17 +19,6 @@ from django.db.models import (BooleanField, Case, Count, F, IntegerField, Q, ...@@ -19,17 +19,6 @@ from django.db.models import (BooleanField, Case, Count, F, IntegerField, Q,
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
def random_slug(slug_length: int = 16) -> str:
"""Used for all the slug fields in the application instead of relying on
the primary keys. They are not cryptographically secure since random is
used.
Returns:
str: a random string of lowercase ACSII letter
"""
return ''.join(sample(ascii_lowercase, slug_length))
def random_matrikel_no() -> str: def random_matrikel_no() -> str:
"""Use as a default value for student's matriculation number. """Use as a default value for student's matriculation number.
...@@ -100,8 +89,6 @@ class SubmissionType(models.Model): ...@@ -100,8 +89,6 @@ class SubmissionType(models.Model):
name : CharField name : CharField
The original title of the exam. This is wildly used as an identifier by The original title of the exam. This is wildly used as an identifier by
the preprocessing scripts. the preprocessing scripts.
slug : SlugField
unique TODO: is this needed?
solution : TextField solution : TextField
A sample solution or a correction guideline A sample solution or a correction guideline
""" """
...@@ -109,8 +96,6 @@ class SubmissionType(models.Model): ...@@ -109,8 +96,6 @@ class SubmissionType(models.Model):
full_score = models.PositiveIntegerField(default=0) full_score = models.PositiveIntegerField(default=0)
description = models.TextField() description = models.TextField()
solution = models.TextField() solution = models.TextField()
slug = models.SlugField(
editable=False, unique=True, default=random_slug)
def __str__(self) -> str: def __str__(self) -> str:
return self.name return self.name
...@@ -221,10 +206,10 @@ class Student(models.Model): ...@@ -221,10 +206,10 @@ class Student(models.Model):
s.type: s.feedback.score if hasattr(s, 'feedback') else 0 s.type: s.feedback.score if hasattr(s, 'feedback') else 0
for s in self.submissions.all() for s in self.submissions.all()
}) })
else:
return OrderedDict({ return OrderedDict({
t.name: 0 for t in SubmissionType.objects.all() t.name: 0 for t in SubmissionType.objects.all()
}) })
@classmethod @classmethod
def get_overall_score_annotated_submission_list(cls): def get_overall_score_annotated_submission_list(cls):
...@@ -313,8 +298,6 @@ class Submission(models.Model): ...@@ -313,8 +298,6 @@ class Submission(models.Model):
---------- ----------
seen_by_student : BooleanField seen_by_student : BooleanField
True if the student saw his accepted feedback. True if the student saw his accepted feedback.
slug : SlugField
Slug for identification in domains
student : OneToOneField student : OneToOneField
The student how cause all of this The student how cause all of this
text : TextField text : TextField
...@@ -324,10 +307,6 @@ class Submission(models.Model): ...@@ -324,10 +307,6 @@ class Submission(models.Model):
""" """
seen_by_student = models.BooleanField(default=False) seen_by_student = models.BooleanField(default=False)
text = models.TextField(blank=True) text = models.TextField(blank=True)
slug = models.SlugField(
editable=False,
unique=True,
default=random_slug)
type = models.ForeignKey( type = models.ForeignKey(
SubmissionType, SubmissionType,
on_delete=models.PROTECT, on_delete=models.PROTECT,
...@@ -429,8 +408,6 @@ class Feedback(models.Model): ...@@ -429,8 +408,6 @@ class Feedback(models.Model):
score : PositiveIntegerField score : PositiveIntegerField
A score that has been assigned to he submission. Is final if it was A score that has been assigned to he submission. Is final if it was
accepted. accepted.
slug : SlugField
The slug for identification in urls
STATUS : The status determines STATUS : The status determines
Description Description
status : PositiveIntegerField status : PositiveIntegerField
...@@ -449,10 +426,6 @@ class Feedback(models.Model): ...@@ -449,10 +426,6 @@ class Feedback(models.Model):
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True) modified = models.DateTimeField(auto_now=True)
slug = models.SlugField(
editable=False,
unique=True,
default=random_slug)
of_submission = models.OneToOneField( of_submission = models.OneToOneField(
Submission, Submission,
on_delete=models.CASCADE, on_delete=models.CASCADE,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment