-
Notifications
You must be signed in to change notification settings - Fork 24
/
examiner.py
52 lines (42 loc) · 1.7 KB
/
examiner.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
from django.db.models import Q
from devilry.apps.core.models import Assignment
from devilry.simplified import (SimplifiedModelApi, simplified_modelapi,
FieldSpec, PermissionDenied, FilterSpecs,
FilterSpec)
from ..models import Config, FeedbackDraft
@simplified_modelapi
class SimplifiedConfig(SimplifiedModelApi):
class Meta:
model = Config
resultfields = FieldSpec('id', 'gradeeditorid', 'assignment', 'config')
searchfields = FieldSpec()
methods = ('read',)
@classmethod
def read_authorize(cls, user, obj):
try:
Assignment.objects.get(Assignment.q_is_examiner(user) & Q(id=obj.id))
except Assignment.DoesNotExist:
raise PermissionDenied()
@simplified_modelapi
class SimplifiedFeedbackDraft(SimplifiedModelApi):
class Meta:
model = FeedbackDraft
resultfields = FieldSpec('id', 'delivery', 'saved_by', 'save_timestamp', 'draft', 'published', 'staticfeedback')
searchfields = FieldSpec()
filters = FilterSpecs(FilterSpec('delivery'))
methods = ('create', 'read', 'search')
editablefields = ('delivery', 'draft', 'published')
@classmethod
def create_searchqryset(self, user):
return self._meta.model.objects.filter(saved_by=user)
@classmethod
def read_authorize(cls, user, obj):
if not obj.saved_by == user:
raise PermissionDenied()
@classmethod
def write_authorize(cls, user, obj):
if not obj.delivery.deadline.assignment_group.is_examiner(user):
raise PermissionDenied()
@classmethod
def pre_full_clean(cls, user, obj):
obj.saved_by = user