@@ -28,12 +28,12 @@ class Folder(models.Model):
28
28
def __str__ (self ):
29
29
return self .name
30
30
31
- def __repr__ (self ):
32
- return self .name
33
-
34
31
def get_absolute_url (self ):
35
32
return reverse ("assignments:show_folder" , args = [self .course .id , self .id ])
36
33
34
+ def __repr__ (self ):
35
+ return self .name
36
+
37
37
38
38
class AssignmentQuerySet (models .query .QuerySet ):
39
39
def filter_visible (self , user ):
@@ -54,14 +54,12 @@ def filter_editable(self, user):
54
54
def upload_grader_file_path (assignment , _ ): # pylint: disable=unused-argument
55
55
assert assignment .id is not None
56
56
if assignment .language == "P" :
57
- return "assignment-{}/grader.py" . format ( assignment . id )
57
+ return f "assignment-{ assignment . id } /grader.py"
58
58
else :
59
- return "assignment-{}/Grader.java" . format ( assignment . id )
59
+ return f "assignment-{ assignment . id } /Grader.java"
60
60
61
61
62
62
class Assignment (models .Model ):
63
- objects = AssignmentQuerySet .as_manager ()
64
-
65
63
name = models .CharField (max_length = 50 )
66
64
folder = models .ForeignKey (
67
65
Folder ,
@@ -126,15 +124,17 @@ class Assignment(models.Model):
126
124
127
125
last_action_output = models .CharField (max_length = 16 * 1024 , default = "" , null = False , blank = True )
128
126
129
- def __str__ (self ):
130
- return self .name
127
+ objects = AssignmentQuerySet .as_manager ()
131
128
132
- def __repr__ (self ):
129
+ def __str__ (self ):
133
130
return self .name
134
131
135
132
def get_absolute_url (self ):
136
133
return reverse ("assignments:show" , args = (self .id ,))
137
134
135
+ def __repr__ (self ):
136
+ return self .name
137
+
138
138
def make_assignment_dir (self ) -> None :
139
139
assignment_path = os .path .join (settings .MEDIA_ROOT , f"assignment-{ self .id } " )
140
140
os .makedirs (assignment_path , exist_ok = True )
@@ -169,7 +169,7 @@ def save_grader_file(self, grader_text: str) -> None:
169
169
stdout = subprocess .DEVNULL ,
170
170
stderr = subprocess .PIPE ,
171
171
encoding = "utf-8" ,
172
- universal_newlines = True ,
172
+ text = True ,
173
173
check = True ,
174
174
)
175
175
except FileNotFoundError as e :
@@ -203,7 +203,7 @@ def list_files(self) -> List[Tuple[int, str, str, int, datetime.datetime]]:
203
203
def save_file (self , file_text : str , file_name : str ) -> None :
204
204
self .make_assignment_dir ()
205
205
206
- fpath = os .path .join (settings .MEDIA_ROOT , "assignment-{}" . format ( self .id ) , file_name )
206
+ fpath = os .path .join (settings .MEDIA_ROOT , f "assignment-{ self .id } " , file_name )
207
207
208
208
os .makedirs (os .path .dirname (fpath ), exist_ok = True )
209
209
@@ -220,7 +220,7 @@ def save_file(self, file_text: str, file_name: str) -> None:
220
220
stdout = subprocess .DEVNULL ,
221
221
stderr = subprocess .PIPE ,
222
222
encoding = "utf-8" ,
223
- universal_newlines = True ,
223
+ text = True ,
224
224
check = True ,
225
225
)
226
226
except FileNotFoundError as e :
@@ -349,12 +349,12 @@ class Meta:
349
349
def __str__ (self ):
350
350
return f"Quiz for { self .assignment } "
351
351
352
- def __repr__ (self ):
353
- return f"Quiz for { self .assignment } "
354
-
355
352
def get_absolute_url (self ):
356
353
return reverse ("assignments:show" , args = (self .assignment .id ,))
357
354
355
+ def __repr__ (self ):
356
+ return f"Quiz for { self .assignment } "
357
+
358
358
def issues_for_student (self , student ):
359
359
return (
360
360
sum (lm .severity for lm in self .log_messages .filter (student = student ))
@@ -387,14 +387,14 @@ class LogMessage(models.Model):
387
387
def __str__ (self ):
388
388
return f"{ self .content } for { self .quiz } "
389
389
390
- def __repr__ (self ):
391
- return f"{ self .content } for { self .quiz } "
392
-
393
390
def get_absolute_url (self ):
394
391
return reverse (
395
392
"assignments:student_submission" , args = (self .quiz .assignment .id , self .student .id )
396
393
)
397
394
395
+ def __repr__ (self ):
396
+ return f"{ self .content } for { self .quiz } "
397
+
398
398
399
399
def moss_base_file_path (obj , _ ): # pylint: disable=unused-argument
400
400
assert obj .assignment .id is not None
@@ -452,6 +452,9 @@ class MossResult(models.Model):
452
452
url = models .URLField (max_length = 200 , null = True , blank = True )
453
453
status = models .CharField (max_length = 1024 , default = "" , null = False , blank = True )
454
454
455
+ def __str__ (self ):
456
+ return f"Moss result for { self .assignment } "
457
+
455
458
@property
456
459
def extension (self ):
457
460
return "java" if self .language == "java" else "py"
@@ -460,9 +463,6 @@ def extension(self):
460
463
def download_folder (self ):
461
464
return os .path .join (settings .MEDIA_ROOT , "moss-runs" , f"moss-{ self .id } " )
462
465
463
- def __str__ (self ):
464
- return f"Moss result for { self .assignment } "
465
-
466
466
def __repr__ (self ):
467
467
return f"Moss result for { self .assignment } "
468
468
@@ -476,7 +476,7 @@ def run_action(command: List[str]) -> str:
476
476
stdout = subprocess .PIPE ,
477
477
stderr = subprocess .STDOUT ,
478
478
encoding = "utf-8" ,
479
- universal_newlines = True ,
479
+ text = True ,
480
480
)
481
481
except FileNotFoundError as e :
482
482
logger .error ("File not found: %s" , e )
0 commit comments