def createSubmissionFile(): with NamedTemporaryFile(mode="wt", delete=False, prefix=settings.MEDIA_ROOT) as tmpfile: # Submission file tmpfile.write("The quick brown fox jumps over the lazy dog.") tmpfile.close() sf = SubmissionFile(attachment=DjangoFile(tmpfile.name)) sf.save() # os.remove(tmpfile.name) # Test results val_result = SubmissionTestResult() val_result.submission_file = sf val_result.kind = SubmissionTestResult.VALIDITY_TEST val_result.result = "Validation test result for student" val_result.result_tutor = "Validation test result for tutor" val_result.machine = machine val_result.save() full_result = SubmissionTestResult() full_result.submission_file = sf full_result.kind = SubmissionTestResult.FULL_TEST full_result.result_tutor = "Full test result for tutor" full_result.machine = machine full_result.save() return sf
def createNoArchiveSubmissionFile( self, relpath="/opensubmit/tests/submfiles/noarchive.txt"): fname = relpath[relpath.rfind(os.sep) + 1:] shutil.copyfile(rootdir + relpath, settings.MEDIA_ROOT + fname) sf = SubmissionFile( attachment=DjangoFile(open(settings.MEDIA_ROOT + fname), unicode(fname))) sf.save() return sf
def createSubmissionFile( self, relpath="/opensubmit/tests/submfiles/working_withsubdir.zip"): fname = relpath[relpath.rfind(os.sep) + 1:] shutil.copyfile(rootdir + relpath, settings.MEDIA_ROOT + fname) sf = SubmissionFile( attachment=DjangoFile(open(rootdir + relpath), unicode(fname))) sf.save() return sf
def createCompileBrokenSubmissionFile( self, relpath="/opensubmit/tests/submfiles/reverse_submission.zip"): fname = relpath[relpath.rfind(os.sep) + 1:] shutil.copyfile(rootdir + relpath, settings.MEDIA_ROOT + fname) sf = SubmissionFile( attachment=DjangoFile(open(settings.MEDIA_ROOT + fname), unicode(fname))) sf.save() return sf
def create_submission_file(relpath="/submfiles/validation/1000ttt/packed.tgz"): ''' Several test cases assume a packed submission with subdirs, so the default above is intentional. ''' with open(rootdir + relpath, 'rb') as subfile: sf = SubmissionFile( attachment=DjangoFile(subfile, str(datetime.datetime.now())), original_filename=os.path.basename(relpath) ) sf.save() return sf
def testPreviewBrokenView(self): ''' Test proper handling of archives containing files with invalid unicode. ''' sub1 = self.createValidatedSubmission(self.current_user) for fname in [u'broken_preview.gz', u'broken_preview2.gz', u'broken_preview.zip']: f=File(open(u"opensubmit/tests/submfiles/"+fname), fname) subfile = SubmissionFile() subfile.attachment=f subfile.save() sub1.file_upload=subfile sub1.save() response=self.c.get('/preview/%u/'%sub1.pk) self.assertEquals(response.status_code, 200)
def form_valid(self, form): upload_file = self.request.FILES['attachment'] new_file = SubmissionFile(attachment=form.files['attachment'], original_filename=upload_file.name) new_file.save() # fix status of old uploaded file self.object.file_upload.replaced_by = new_file self.object.file_upload.save() # store new file for submissions self.object.file_upload = new_file self.object.state = self.object.get_initial_state() self.object.notes = form.data['notes'] self.object.save() messages.info(self.request, 'Submission files successfully updated.') return super().form_valid(form)
def post(self, request, *args, **kwargs): # we need to fill all forms here, # so that they can be rendered on validation errors submissionForm = self.SubmissionForm(request.user, self.ass, request.POST, request.FILES) if submissionForm.is_valid(): # commit=False to set submitter in the instance submission = submissionForm.save(commit=False) submission.submitter = request.user submission.assignment = self.ass submission.state = submission.get_initial_state() # take uploaded file from extra field if self.ass.has_attachment: upload_file = request.FILES['attachment'] submissionFile = SubmissionFile( attachment=submissionForm.cleaned_data['attachment'], original_filename=upload_file.name) submissionFile.save() submission.file_upload = submissionFile submission.save() # because of commit=False, we first need to add # the form-given authors submissionForm.save_m2m() submission.save() messages.info(request, "New submission saved.") if submission.state == Submission.SUBMITTED: # Initial state is SUBMITTED, # which means that there is no validation if not submission.assignment.is_graded(): # No validation, no grading. We are done. submission.state = Submission.CLOSED submission.save() return redirect(self.redirect_on_success) else: messages.error(request, "Please correct your submission information.") return render(request, self.template_name, { 'submissionForm': submissionForm, 'assignment': self.ass })
def createSubmissionFile(self): from django.core.files import File as DjangoFile sf = SubmissionFile(attachment=DjangoFile(open(rootdir+"/opensubmit/tests/submfiles/working_withsubdir.zip"), unicode("working_withsubdir.zip"))) sf.save() return sf