4
4
import os
5
5
import logging
6
6
import warnings
7
+ import typing
8
+ from pathlib import Path
7
9
8
10
from traitlets .config import LoggingConfigurable , Config , get_config
9
11
from traitlets import Instance , Enum , Unicode , observe
@@ -123,7 +125,7 @@ def gradebook(self):
123
125
"""
124
126
return Gradebook (self .coursedir .db_url , self .course_id )
125
127
126
- def get_source_assignments (self ):
128
+ def get_source_assignments (self ) -> typing . Set [ str ] :
127
129
"""Get the names of all assignments in the `source` directory.
128
130
129
131
Returns
@@ -132,29 +134,14 @@ def get_source_assignments(self):
132
134
A set of assignment names
133
135
134
136
"""
135
- filenames = glob .glob (self .coursedir .format_path (
136
- self .coursedir .source_directory ,
137
- student_id = '.' ,
138
- assignment_id = '*' ))
139
-
140
- assignments = set ([])
141
- for filename in filenames :
142
- # skip files that aren't directories
143
- if not os .path .isdir (filename ):
144
- continue
145
137
146
- # parse out the assignment name
147
- regex = self .coursedir .format_path (
148
- self .coursedir .source_directory ,
149
- student_id = '.' ,
150
- assignment_id = '(?P<assignment_id>.*)' ,
151
- escape = True )
152
-
153
- matches = re .match (regex , filename )
154
- if matches :
155
- assignments .add (matches .groupdict ()['assignment_id' ])
156
-
157
- return assignments
138
+ return {
139
+ entry ['assignment_id' ] for entry in
140
+ self .coursedir .find_assignments (
141
+ nbgrader_step = self .coursedir .source_directory ,
142
+ student_id = "." ,
143
+ )
144
+ }
158
145
159
146
def get_released_assignments (self ):
160
147
"""Get the names of all assignments that have been released to the
@@ -194,32 +181,14 @@ def get_submitted_students(self, assignment_id):
194
181
A set of student ids
195
182
196
183
"""
197
- # get the names of all student submissions in the `submitted` directory
198
- filenames = glob .glob (self .coursedir .format_path (
199
- self .coursedir .submitted_directory ,
200
- student_id = '*' ,
201
- assignment_id = assignment_id ))
202
184
203
- students = set ([])
204
- for filename in filenames :
205
- # skip files that aren't directories
206
- if not os .path .isdir (filename ):
207
- continue
208
-
209
- # parse out the student id
210
- if assignment_id == "*" :
211
- assignment_id = ".*"
212
- regex = self .coursedir .format_path (
213
- self .coursedir .submitted_directory ,
214
- student_id = '(?P<student_id>.*)' ,
215
- assignment_id = assignment_id ,
216
- escape = True )
217
-
218
- matches = re .match (regex , filename )
219
- if matches :
220
- students .add (matches .groupdict ()['student_id' ])
221
-
222
- return students
185
+ return {
186
+ entry ['student_id' ] for entry in
187
+ self .coursedir .find_assignments (
188
+ nbgrader_step = self .coursedir .submitted_directory ,
189
+ assignment_id = assignment_id
190
+ )
191
+ }
223
192
224
193
def get_submitted_timestamp (self , assignment_id , student_id ):
225
194
"""Gets the timestamp of a submitted assignment.
@@ -243,10 +212,7 @@ def get_submitted_timestamp(self, assignment_id, student_id):
243
212
student_id ,
244
213
assignment_id ))
245
214
246
- timestamp_pth = os .path .join (assignment_dir , 'timestamp.txt' )
247
- if os .path .exists (timestamp_pth ):
248
- with open (timestamp_pth , 'r' ) as fh :
249
- return parse_utc (fh .read ().strip ())
215
+ return self .coursedir .get_existing_timestamp (assignment_dir )
250
216
251
217
def get_autograded_students (self , assignment_id ):
252
218
"""Get the ids of students whose submission for a given assignment
@@ -439,21 +405,14 @@ def get_notebooks(self, assignment_id):
439
405
440
406
# if it doesn't exist in the database
441
407
else :
442
- sourcedir = self .coursedir .format_path (
443
- self .coursedir .source_directory ,
444
- student_id = '.' ,
445
- assignment_id = assignment_id )
446
- escaped_sourcedir = self .coursedir .format_path (
408
+ sourcedir = Path (self .coursedir .format_path (
447
409
self .coursedir .source_directory ,
448
410
student_id = '.' ,
449
- assignment_id = assignment_id ,
450
- escape = True )
411
+ assignment_id = assignment_id ))
451
412
452
413
notebooks = []
453
- for filename in glob .glob (os .path .join (sourcedir , "*.ipynb" )):
454
- regex = re .escape (os .path .sep ).join ([escaped_sourcedir , "(?P<notebook_id>.*).ipynb" ])
455
- matches = re .match (regex , filename )
456
- notebook_id = matches .groupdict ()['notebook_id' ]
414
+ for filename in sourcedir .glob ("*.ipynb" ):
415
+ notebook_id = filename .stem
457
416
notebooks .append ({
458
417
"name" : notebook_id ,
459
418
"id" : None ,
0 commit comments