From 928abf8d2c5bc5567431f90f9cae883e0275e360 Mon Sep 17 00:00:00 2001 From: George Kinnear <30723394+georgekinnear@users.noreply.github.com> Date: Mon, 27 Apr 2020 07:59:24 +0100 Subject: [PATCH] Tweaks to data fields, including parsing the submission time Also adding some new data fields to the struct that can be added to by the ingest script (LateSubmission, ExtraTime, ExamNumber, OutputFile) --- parselearn.go | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/parselearn.go b/parselearn.go index 05c73cb..2ba64e7 100644 --- a/parselearn.go +++ b/parselearn.go @@ -4,16 +4,20 @@ import ( "bufio" "os" "strings" + "regexp" + "time" "github.com/gocarina/gocsv" ) type Submission struct { - FirstName string `csv:"FirstName"` - LastName string `csv:"LastName"` - Matriculation string `csv:"Matriculation"` + StudentName string `csv:"StudentName"` + UUN string `csv:"UUN"` Assignment string `csv:"Assignment"` + DateSubmittedRaw string `csv:"DateSubmittedRaw"` DateSubmitted string `csv:"DateSubmitted"` + LateSubmission string `csv:"LateSubmission"` + ExtraTime int `csv:"ExtraTime"` SubmissionField string `csv:"SubmissionField"` Comments string `csv:"Comments"` OriginalFilename string `csv:"OriginalFilename"` @@ -26,6 +30,11 @@ type Submission struct { NumberOfPages string `csv:"NumberOfPages"` FilesizeMB float64 `csv:"FilesizeMB"` NumberOfFiles int `csv:"NumberOfFiles"` + OutputFile string `csv:"OutputFile"` +} + +func BlankSubmission() (Submission) { + return Submission{} } func ParseLearnReceipt(inputPath string) (Submission, error) { @@ -71,25 +80,17 @@ SCAN: sub.NumberOfFiles = 0 - // we will take the first file as the one we expect to see renamed - gotOriginal := false - gotNew := false - for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) switch { case strings.HasPrefix(line, "Original filename:"): - if !gotOriginal { - processOriginalFilename(line, &sub) - gotOriginal = true - } + + processOriginalFilename(line, &sub) sub.NumberOfFiles++ case strings.HasPrefix(line, "Filename:"): - if !gotNew { - processFilename(line, &sub) - gotNew = true - } + + processFilename(line, &sub) default: continue } @@ -109,9 +110,8 @@ func processName(line string, sub *Submission) { name := strings.TrimSpace(line[m+1 : n]) matric := strings.TrimSpace(line[n+1 : p]) - sub.FirstName = "-" - sub.LastName = name - sub.Matriculation = matric + sub.StudentName = name + sub.UUN = strings.ToUpper(matric) } //Assignment: Practice Exam Drop Box @@ -125,7 +125,9 @@ func processAssignment(line string, sub *Submission) { func processDateSubmitted(line string, sub *Submission) { line = strings.TrimSpace(line) line = strings.TrimPrefix(line, "Date Submitted:") - sub.DateSubmitted = strings.TrimSpace(line) + sub.DateSubmittedRaw = strings.TrimSpace(line) + sub_time, _ := time.Parse("Monday, _2 January 2006 15:04:05 o'clock MST", sub.DateSubmittedRaw) + sub.DateSubmitted = sub_time.Format("2006-01-02-15-04-05") } //Submission Field: @@ -153,6 +155,11 @@ func processFilename(line string, sub *Submission) { line = strings.TrimSpace(line) line = strings.TrimPrefix(line, "Filename:") sub.Filename = strings.TrimSpace(line) + // check if the submitted file has .pdf (or .PDF) extension + matched, _ := regexp.MatchString(`(?i)\.pdf$`, sub.Filename) + if(!matched) { + sub.FiletypeError = "Not PDF" + } } func WriteSubmissionsToCSV(subs []Submission, outputPath string) error {