Skip to content

Commit 574fe29

Browse files
committed
Accept only one column layout when importing registrations
Recognizing several spellings of each header, falling back to reading the columns positionally, and accepting five date formats made the code - and the error messages - far bigger than the flexibility was worth. The file must now have the columns `username, name, card_number, date`, in that order, and dates must be written as YYYY-MM-DD.
1 parent 612189e commit 574fe29

8 files changed

Lines changed: 204 additions & 198 deletions

File tree

-689 Bytes
Binary file not shown.

src/locale/nb/LC_MESSAGES/django.po

Lines changed: 92 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ msgid ""
33
msgstr ""
44
"Project-Id-Version: MAKE NTNU website\n"
55
"Report-Msgid-Bugs-To: \n"
6-
"POT-Creation-Date: 2026-08-31 10:32+0200\n"
6+
"POT-Creation-Date: 2026-08-31 10:52+0200\n"
77
"PO-Revision-Date: 2018-10-09 14:05+0200\n"
88
"Last-Translator: Sindre Stephansen <sindre@sindrestephansen.com>\n"
99
"Language-Team: Norwegian Bokmål <dev@makentnu.no>\n"
@@ -146,7 +146,7 @@ msgstr "Endre kunngjøring"
146146
#: src/checkin/models.py:133
147147
#: src/internal/templates/internal/member_list.html:306
148148
#: src/make_queue/templates/make_queue/course/printer_3d_course_list.html:102
149-
#: src/make_queue/views/course.py:225
149+
#: src/make_queue/views/course.py:231
150150
msgid "card number"
151151
msgstr "kortnummer"
152152

@@ -972,7 +972,7 @@ msgstr "kontekst"
972972

973973
#: src/internal/models.py:381
974974
#: src/make_queue/templates/make_queue/course/printer_3d_course_list.html:103
975-
#: src/make_queue/views/course.py:226
975+
#: src/make_queue/views/course.py:232
976976
#: src/news/templates/news/event/event_list_contents.html:26
977977
#: src/web/templates/web/forms/widgets/semantic_date.html:11
978978
#: src/web/templates/web/forms/widgets/semantic_datetime.html:11
@@ -1104,9 +1104,9 @@ msgstr "Filtrer komiteer"
11041104
#: src/internal/templates/internal/member_list.html:132
11051105
#: src/internal/templates/internal/member_list.html:268
11061106
#: src/make_queue/models/course.py:23 src/make_queue/models/machine.py:144
1107-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:56
1107+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:54
11081108
#: src/make_queue/templates/make_queue/course/printer_3d_course_list.html:100
1109-
#: src/make_queue/views/course.py:223
1109+
#: src/make_queue/views/course.py:229
11101110
msgid "name"
11111111
msgstr "navn"
11121112

@@ -1323,23 +1323,20 @@ msgstr ""
13231323
msgid "Cannot delete reservation when it has already ended."
13241324
msgstr "Kan ikke slette reservasjonen når den allerede er over."
13251325

1326-
#: src/make_queue/course_import.py:61
1326+
#: src/make_queue/course_import.py:46
13271327
msgid "(no name)"
13281328
msgstr "(uten navn)"
13291329

1330-
#: src/make_queue/course_import.py:95
1330+
#: src/make_queue/course_import.py:80
13311331
msgid "The file is empty."
13321332
msgstr "Filen er tom."
13331333

1334-
#: src/make_queue/course_import.py:107
1335-
msgid ""
1336-
"Found no column with usernames. Name one of the columns “username” (or "
1337-
"“brukernavn”), or remove the header row."
1338-
msgstr ""
1339-
"Fant ingen kolonne med brukernavn. Gi en av kolonnene navnet "
1340-
"«brukernavn» (eller «username»), eller fjern overskriftsraden."
1334+
#: src/make_queue/course_import.py:85
1335+
#, python-format
1336+
msgid "The first row of the file must name the columns: %(header_row)s"
1337+
msgstr "Den første raden i filen må navngi kolonnene: %(header_row)s"
13411338

1342-
#: src/make_queue/course_import.py:114
1339+
#: src/make_queue/course_import.py:93
13431340
#, python-format
13441341
msgid ""
13451342
"The file has %(num_rows)d rows, but at most %(max_num_rows)d can be imported "
@@ -1348,28 +1345,28 @@ msgstr ""
13481345
"Filen har %(num_rows)d rader, men maksimalt %(max_num_rows)d kan importeres "
13491346
"om gangen."
13501347

1351-
#: src/make_queue/course_import.py:140
1348+
#: src/make_queue/course_import.py:115
13521349
msgid "The file contains no rows with data."
13531350
msgstr "Filen inneholder ingen rader med data."
13541351

1355-
#: src/make_queue/course_import.py:195
1352+
#: src/make_queue/course_import.py:174
13561353
msgid "Missing username"
13571354
msgstr "Mangler brukernavn"
13581355

1359-
#: src/make_queue/course_import.py:198
1356+
#: src/make_queue/course_import.py:177
13601357
msgid "The username appears multiple times in the file"
13611358
msgstr "Brukernavnet forekommer flere ganger i filen"
13621359

1363-
#: src/make_queue/course_import.py:204
1360+
#: src/make_queue/course_import.py:183
13641361
msgid "Already registered"
13651362
msgstr "Allerede registrert"
13661363

1367-
#: src/make_queue/course_import.py:213
1364+
#: src/make_queue/course_import.py:192
13681365
#, python-format
13691366
msgid "Invalid date: “%(date)s”"
13701367
msgstr "Ugyldig dato: «%(date)s»"
13711368

1372-
#: src/make_queue/course_import.py:234 src/make_queue/models/course.py:34
1369+
#: src/make_queue/course_import.py:213 src/make_queue/models/course.py:34
13731370
msgid "Registered"
13741371
msgstr "Registrert"
13751372

@@ -1394,39 +1391,35 @@ msgstr "Fil"
13941391

13951392
#: src/make_queue/forms/course.py:112
13961393
msgid ""
1397-
"A CSV or XLSX file with one course participant per row. The columns are "
1398-
"recognized by their header, which means that a file downloaded from the "
1399-
"course registration list can be edited and uploaded back."
1400-
msgstr ""
1401-
"En CSV- eller XLSX-fil med én kursdeltaker per rad. Kolonnene gjenkjennes ut "
1402-
"fra overskriften, som gjør at en fil lastet ned fra kursregistreringslisten "
1403-
"kan redigeres og lastes opp igjen."
1394+
"A CSV or XLSX file with one course participant per row, and the columns "
1395+
"named by a header row."
1396+
msgstr "En CSV- eller XLSX-fil med én kursdeltaker per rad, og kolonnene navngitt av en overskriftsrad."
14041397

1405-
#: src/make_queue/forms/course.py:119
1398+
#: src/make_queue/forms/course.py:118
14061399
msgid "default course date"
14071400
msgstr "standard kursdato"
14081401

1409-
#: src/make_queue/forms/course.py:120
1402+
#: src/make_queue/forms/course.py:119
14101403
msgid "Used for the rows that have no course date of their own."
14111404
msgstr "Brukes for radene som ikke har sin egen kursdato."
14121405

1413-
#: src/make_queue/forms/course.py:140
1406+
#: src/make_queue/forms/course.py:139
14141407
msgid "Skip participants that are already registered"
14151408
msgstr "Hopp over deltakere som allerede er registrert"
14161409

1417-
#: src/make_queue/forms/course.py:142
1410+
#: src/make_queue/forms/course.py:141
14181411
msgid ""
14191412
"When unchecked, an already registered username is counted as an error "
14201413
"instead of being silently skipped."
14211414
msgstr ""
14221415
"Når denne ikke er huket av, telles et allerede registrert brukernavn som en "
14231416
"feil i stedet for å bli hoppet over."
14241417

1425-
#: src/make_queue/forms/course.py:148
1418+
#: src/make_queue/forms/course.py:147
14261419
msgid "Import the valid rows even if some rows have errors"
14271420
msgstr "Importer de gyldige radene selv om noen rader har feil"
14281421

1429-
#: src/make_queue/forms/course.py:150
1422+
#: src/make_queue/forms/course.py:149
14301423
msgid ""
14311424
"When unchecked, nothing is imported unless every row is valid, which makes "
14321425
"it safe to upload the same file again after fixing the errors."
@@ -1435,7 +1428,7 @@ msgstr ""
14351428
"gyldige, som gjør det trygt å laste opp den samme filen igjen etter at "
14361429
"feilene er rettet."
14371430

1438-
#: src/make_queue/forms/course.py:172
1431+
#: src/make_queue/forms/course.py:171
14391432
#, python-format
14401433
msgid "The file is too big; the maximum size is %(max_size)d MB."
14411434
msgstr "Filen er for stor; maksimal størrelse er %(max_size)d MB."
@@ -1530,9 +1523,9 @@ msgid "Access granted"
15301523
msgstr "Tilgang gitt"
15311524

15321525
#: src/make_queue/models/course.py:48
1533-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:57
1526+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:55
15341527
#: src/make_queue/templates/make_queue/course/printer_3d_course_list.html:101
1535-
#: src/make_queue/views/course.py:224
1528+
#: src/make_queue/views/course.py:230
15361529
msgid "username"
15371530
msgstr "brukernavn"
15381531

@@ -1843,46 +1836,36 @@ msgid "Expected file format"
18431836
msgstr "Forventet filformat"
18441837

18451838
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:19
1846-
msgid "One participant per row, in a CSV or XLSX file."
1847-
msgstr "Én deltaker per rad, i en CSV- eller XLSX-fil."
1839+
msgid "A CSV or XLSX file, with one course participant per row."
1840+
msgstr "En CSV- eller XLSX-fil, med én kursdeltaker per rad."
18481841

18491842
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:24
1850-
msgid ""
1851-
"The first row should name the columns; recognized names are “name”, "
1852-
"“username”, “card number” and “date” (or “navn”, “brukernavn”, “kortnummer” "
1853-
"and “dato”). Only the username column is required."
1854-
msgstr ""
1855-
"Den første raden bør navngi kolonnene; gjenkjente navn er «name», "
1856-
"«username», «card number» og «date» (eller «navn», «brukernavn», "
1857-
"«kortnummer» og «dato»). Bare kolonnen med brukernavn er påkrevd."
1843+
msgid "The first row must name the columns, exactly like this:"
1844+
msgstr "Den første raden må navngi kolonnene, nøyaktig slik:"
18581845

1859-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:32
1846+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:30
18601847
msgid ""
1861-
"Without a header row, the columns are read in the order name, username, card "
1862-
"number, date - except in a file with only one column, which is read as "
1863-
"usernames."
1864-
msgstr ""
1865-
"Uten en overskriftsrad leses kolonnene i rekkefølgen navn, brukernavn, "
1866-
"kortnummer, dato - bortsett fra i en fil med bare én kolonne, som leses som "
1867-
"brukernavn."
1848+
"Only the username has to be filled in; the other cells can be left empty. "
1849+
"Rows without a date get the default course date selected below."
1850+
msgstr "Bare brukernavnet må fylles inn; de andre cellene kan stå tomme. Rader uten dato får standard kursdato valgt nedenfor."
18681851

1869-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:39
1870-
msgid "Rows without a date get the default course date selected below."
1871-
msgstr "Rader uten dato får standard kursdato valgt nedenfor."
1852+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:37
1853+
msgid "Dates must be written as YYYY-MM-DD - for example 2026-08-25."
1854+
msgstr "Datoer må skrives som ÅÅÅÅ-MM-DD - for eksempel 2026-08-25."
18721855

1873-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:50
1856+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:48
18741857
msgid "Result"
18751858
msgstr "Resultat"
18761859

1877-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:55
1860+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:53
18781861
msgid "row"
18791862
msgstr "rad"
18801863

1881-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:58
1864+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:56
18821865
msgid "result"
18831866
msgstr "resultat"
18841867

1885-
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:87
1868+
#: src/make_queue/templates/make_queue/course/printer_3d_course_import.html:85
18861869
msgid "Valid, but not imported"
18871870
msgstr "Gyldig, men ikke importert"
18881871

@@ -2276,31 +2259,31 @@ msgstr "Maskinen har status «{status}»."
22762259
msgid "You have reached the maximum number of future reservations."
22772260
msgstr "Du har nådd maksimalt antall framtidige reservasjoner."
22782261

2279-
#: src/make_queue/views/course.py:52
2262+
#: src/make_queue/views/course.py:56
22802263
msgid "Registration of course participation successful"
22812264
msgstr "Registrering av kursdeltakelse vellykket"
22822265

2283-
#: src/make_queue/views/course.py:66
2266+
#: src/make_queue/views/course.py:70
22842267
msgid "Course registrations"
22852268
msgstr "Kursregistreringer"
22862269

2287-
#: src/make_queue/views/course.py:67
2270+
#: src/make_queue/views/course.py:71
22882271
msgid "Import Course Registrations"
22892272
msgstr "Importer kursregistreringer"
22902273

2291-
#: src/make_queue/views/course.py:68
2274+
#: src/make_queue/views/course.py:72
22922275
msgid "Import"
22932276
msgstr "Importer"
22942277

2295-
#: src/make_queue/views/course.py:71
2278+
#: src/make_queue/views/course.py:75
22962279
msgid "Values given to all the imported registrations"
22972280
msgstr "Verdier som gis til alle de importerte registreringene"
22982281

2299-
#: src/make_queue/views/course.py:74
2282+
#: src/make_queue/views/course.py:78
23002283
msgid "Options"
23012284
msgstr "Valg"
23022285

2303-
#: src/make_queue/views/course.py:108
2286+
#: src/make_queue/views/course.py:114
23042287
#, python-format
23052288
msgid ""
23062289
"Nothing was imported, as %(num_failed)d of the %(num_read)d rows have "
@@ -2311,7 +2294,7 @@ msgstr ""
23112294
"har feil. Rett feilene og last opp filen igjen, eller huk av «Importer de "
23122295
"gyldige radene selv om noen rader har feil»."
23132296

2314-
#: src/make_queue/views/course.py:118
2297+
#: src/make_queue/views/course.py:124
23152298
#, python-format
23162299
msgid ""
23172300
"Registered %(num_created)d of the %(num_read)d rows (%(num_skipped)d "
@@ -2320,7 +2303,7 @@ msgstr ""
23202303
"Registrerte %(num_created)d av de %(num_read)d radene (%(num_skipped)d "
23212304
"hoppet over, %(num_failed)d med feil)."
23222305

2323-
#: src/make_queue/views/course.py:127
2306+
#: src/make_queue/views/course.py:133
23242307
#, python-format
23252308
msgid ""
23262309
"No registrations were created; all the %(num_read)d rows were either skipped "
@@ -2329,7 +2312,7 @@ msgstr ""
23292312
"Ingen registreringer ble opprettet; alle de %(num_read)d radene ble enten "
23302313
"hoppet over eller har feil."
23312314

2332-
#: src/make_queue/views/course.py:189 src/make_queue/views/course.py:249
2315+
#: src/make_queue/views/course.py:195 src/make_queue/views/course.py:255
23332316
msgid "Course participants"
23342317
msgstr "Kursdeltakere"
23352318

@@ -3479,6 +3462,43 @@ msgstr "Velg verdi"
34793462
msgid "Search places"
34803463
msgstr "Søk etter steder"
34813464

3465+
#~ msgid ""
3466+
#~ "Found no column with usernames. Name one of the columns “username” (or "
3467+
#~ "“brukernavn”), or remove the header row."
3468+
#~ msgstr ""
3469+
#~ "Fant ingen kolonne med brukernavn. Gi en av kolonnene navnet "
3470+
#~ "«brukernavn» (eller «username»), eller fjern overskriftsraden."
3471+
3472+
#~ msgid ""
3473+
#~ "A CSV or XLSX file with one course participant per row. The columns are "
3474+
#~ "recognized by their header, which means that a file downloaded from the "
3475+
#~ "course registration list can be edited and uploaded back."
3476+
#~ msgstr ""
3477+
#~ "En CSV- eller XLSX-fil med én kursdeltaker per rad. Kolonnene gjenkjennes "
3478+
#~ "ut fra overskriften, som gjør at en fil lastet ned fra "
3479+
#~ "kursregistreringslisten kan redigeres og lastes opp igjen."
3480+
3481+
#~ msgid "One participant per row, in a CSV or XLSX file."
3482+
#~ msgstr "Én deltaker per rad, i en CSV- eller XLSX-fil."
3483+
3484+
#~ msgid ""
3485+
#~ "The first row should name the columns; recognized names are “name”, "
3486+
#~ "“username”, “card number” and “date” (or “navn”, “brukernavn”, "
3487+
#~ "“kortnummer” and “dato”). Only the username column is required."
3488+
#~ msgstr ""
3489+
#~ "Den første raden bør navngi kolonnene; gjenkjente navn er «name», "
3490+
#~ "«username», «card number» og «date» (eller «navn», «brukernavn», "
3491+
#~ "«kortnummer» og «dato»). Bare kolonnen med brukernavn er påkrevd."
3492+
3493+
#~ msgid ""
3494+
#~ "Without a header row, the columns are read in the order name, username, "
3495+
#~ "card number, date - except in a file with only one column, which is read "
3496+
#~ "as usernames."
3497+
#~ msgstr ""
3498+
#~ "Uten en overskriftsrad leses kolonnene i rekkefølgen navn, brukernavn, "
3499+
#~ "kortnummer, dato - bortsett fra i en fil med bare én kolonne, som leses "
3500+
#~ "som brukernavn."
3501+
34823502
#~ msgid "You have completed the Raise3D printer course"
34833503
#~ msgstr "Du har fullført Raise3D-printerkurset"
34843504

0 commit comments

Comments
 (0)