forked from krakowski/ilias-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck.py
More file actions
executable file
·120 lines (106 loc) · 4.33 KB
/
Copy pathcheck.py
File metadata and controls
executable file
·120 lines (106 loc) · 4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python3
import ast
import os
import sys
def main():
check_working_directory()
check_corrections()
print("Alle Checks durchgelaufen")
def check_corrections():
for directory, _, _ in os.walk("."):
if directory != ".":
errors = {
'korrekturpdf_missing': 0,
'korrekturyml_missing': 0,
'abgabepdf_notdeleted': 0,
'corrected': 0,
'nanvalue_in_points': 0,
'negative_sum': 0,
'invalid_sum': 0,
'zu_viele_teilaufgaben': 0,
'corrected_is_false': 0,
'no_points_given': 0,
'one_error_per_abgabe': 1
}
check_correction(directory, errors)
def check_correction(directory, errors):
try:
open(os.path.join(directory, "Korrektur.pdf"))
except IOError:
errors["korrekturpdf_missing"] = 1
try:
f = open(os.path.join(directory, "Korrektur.yml"))
lines = f.readlines()
check_corrected_and_points_given(directory, lines, errors)
except IOError:
errors["korrekturyml_missing"] = 1
if os.path.isfile(os.path.join(directory, "Abgabe.pdf")):
errors["abgabepdf_notdeleted"] = 1
print_errors(errors, directory)
def check_corrected_and_points_given(directory, lines, errors):
corrected = False
points_given = []
for line in lines:
if "corrected: true" in line:
corrected = True
if "points:" in line:
try:
points_given = ast.literal_eval(line.split(" ")[-1])
except ValueError:
errors["nanvalue_in_points"] = 1
if sum(points_given) < 0:
errors["negative_sum"] = 1
if "erreichbare" in line:
points_possible = [int(point) for point in line.split(" ")[-1].split("+")]
aufgabe = 0
for given, possible in zip(points_given, points_possible):
aufgabe = aufgabe + 1
if not (0 <= given <= possible) or (int(given) != given):
errors["invalid_sum"] = aufgabe
if len(points_given) != len(points_possible):
if len(points_given) == len(points_possible) + 1:
if points_given[-1] > 0:
errors["zu_viele_teilaufgaben"] = 1
else:
errors["zu_viele_teilaufgaben"] = 1
if not corrected:
errors["corrected_is_false"] = 1
if not points_given:
errors["no_points_given"] = 1
def check_working_directory():
try:
open("workspace.yml")
except IOError:
print("workspace.yml nicht gefunden. Bist du im richtigen Arbeitsverzeichnis?")
sys.exit(1)
def print_errors(errors, directory):
ein_fehler_pro_blatt = errors['one_error_per_abgabe']
if errors['korrekturpdf_missing'] == 1:
print(f"{directory} Fehler: Keine Korrektur.pdf vorhanden")
if ein_fehler_pro_blatt == 1: return
if errors['korrekturyml_missing'] == 1:
print(f"{directory} Fehler: Keine Korrektur.yml vorhanden")
if ein_fehler_pro_blatt == 1: return
if errors['abgabepdf_notdeleted'] == 1:
print(f"{directory} Fehler: Bitte Abgabe.pdf entfernen")
if ein_fehler_pro_blatt == 1: return
if errors['nanvalue_in_points'] == 1:
print(f"{directory} Fehler: Ungültige Punkteeingabe (TODO vergessen?)")
if ein_fehler_pro_blatt == 1: return
if errors['negative_sum'] == 1:
print(f"{directory} Fehler: Summe der Punkte ist negativ")
if ein_fehler_pro_blatt == 1: return
if errors['invalid_sum'] > 0:
print("{} Fehler: Erreichte Punktzahl in Aufgabe {} zu hoch".format(directory, errors['invalid_sum']))
if ein_fehler_pro_blatt == 1: return
if errors['zu_viele_teilaufgaben'] == 1:
print(f"{directory} Fehler: Zu viele Teilaufgaben")
if ein_fehler_pro_blatt == 1: return
if errors['corrected_is_false'] == 1:
print(f"{directory} Fehler: In Korrektur.yml nicht als korrigiert markiert")
if ein_fehler_pro_blatt == 1: return
if errors['no_points_given'] == 1:
print(f"{directory} Fehler: Keine Punkte eingetragen")
if ein_fehler_pro_blatt == 1: return
if __name__ == '__main__':
main()