1 Commits

Author SHA1 Message Date
lars 3c85bbe9bf bug fix 2019-08-02 18:09:46 +02:00
5 changed files with 18 additions and 82 deletions
+5 -19
View File
@@ -1,20 +1,8 @@
import subject import subject
import user_IO import user_IO
import serializer
import encryption
import os
subjects = [] subjects = []
filepath = "/data/user.grades"
try: try:
password = user_IO.password()
if os.path.isfile(filepath):
with open(filepath, 'r') as file:
string = encryption.decrypt(password, file.read())
serializer.deserialize(string)
while True: while True:
user_input = user_IO.user_input() user_input = user_IO.user_input()
input_or_output = user_input[0] input_or_output = user_input[0]
@@ -41,13 +29,11 @@ try:
elif input_or_output == "output": elif input_or_output == "output":
_subject = user_input[1] _subject = user_input[1]
subject_get = subject.get_subject(subjects, _subject) subject_get = subject.get_subject(subjects, _subject)
user_IO.user_output(subject_get.return_average_subject) user_IO.user_output(subject_get.name, subject_get.return_grade_categories(),
elif input_or_output == "exit": [subject_get.return_average_of_category(i) for i in subject_get.return_grade_categories()],
break subject_get.return_average_of_subject())
with open(filepath, 'w') as file: raise SystemError
_list = [serializer.serialize(_subject) for _subject in subjects]
string = encryption.encrypt(password, str(_list))
file.write(string)
except Exception as e: except Exception as e:
print('ERROR' + str(e)) print('ERROR' + str(e))
raise
+5 -48
View File
@@ -1,49 +1,6 @@
import json def serialize(subject):
import subject string = subject.__dict__
for category in string["grades"]:
for counter, grade in enumerate(string["grades"][category][0]):
class TempSubjectSerialize: string["grades"][category][0][counter] = grade.__dict__
def __init__(self, _subject):
self.name = _subject.name
self.main_subject = str(_subject.main_subject)
self.oral_exam = str(_subject.oral_exam)
self.grades = {}
for category in _subject.grades:
self.grades[category] = {}
for counter, grade in enumerate(_subject.grades[category][0]):
self.grades[category][str(counter)] = {
"grade": str(grade.grade),
"name": str(grade.name),
"date": str(grade.date)
}
self.grades[category]["rating"] = _subject.grades[category][1]
def get_string(self):
string = self.__dict__
string = str(string)
string = string.replace("'", '"')
return string
class TempSubjectDeserialize:
def __init__(self, string):
self.__dict__ = json.loads(string)
def serialize(_subject):
ser = TempSubjectSerialize(_subject)
string = ser.get_string()
return str(string) return str(string)
def deserialize(string):
temp = TempSubjectDeserialize(string)
_subject = subject.Subject(temp.name, bool(temp.main_subject), bool(temp.oral_exam))
for category in temp.grades:
_subject.add_grade_category(category, temp.grades[category]['rating'])
for grade in temp.grades[category]:
if grade != "rating":
_subject.add_grade(category, subject.Grade(float(temp.grades[category][grade]["grade"]), # the grade
temp.grades[category][grade]["name"], # the name of grade
temp.grades[category][grade]["date"])) # the date of grade
return _subject
+4 -3
View File
@@ -18,17 +18,18 @@ class Subject:
return self.grades[category][0] return self.grades[category][0]
def return_grade_categories(self): # Return all categories def return_grade_categories(self): # Return all categories
return [i for i in self.grades] return self.grades
def return_average_of_category(self, category): # Return average of one categorie def return_average_of_category(self, category): # Return average of one categorie
return sum(self.grades[category][0]) / len(self.grades[category][0]) _list = [int(i.grade) for i in self.grades[category][0]]
return sum(_list) / len(self.grades[category][0])
def return_average_of_subject(self): def return_average_of_subject(self):
rating_sum = 0 rating_sum = 0
grade_sum = 0 grade_sum = 0
for i in self.grades: for i in self.grades:
rating_sum += self.grades[i][1] rating_sum += self.grades[i][1]
grade_sum += self.return_average_of_category(i) grade_sum += self.return_average_of_category(i)*self.grades[i][1]
return grade_sum / rating_sum return grade_sum / rating_sum
-1
View File
@@ -1 +0,0 @@
{"name": "Deutsch", "main_subject": "False", "oral_exam": "True", "grades": {"schriftlich": {"0": {"grade": "13", "name": "KA1", "date": "2019-08-04 08:25:17.797803"}, "1": {"grade": "9", "name": "KA2", "date": "2019-08-04 08:25:17.797803"}, "rating": 2}, "mündlich": {"0": {"grade": "12", "name": "mündl 1. HJ", "date": "2019-08-04 08:25:17.797803"}, "rating": 1}}}
+3 -10
View File
@@ -1,5 +1,5 @@
def user_input(): def user_input():
todo = input("Ok, do you want to see them or to edit them [see/edit/exit]?\n") todo = input("Ok, do you want to see them or to edit them [see/edit]?\n")
if todo == "see": if todo == "see":
print("Which subject do you want to know the information?") print("Which subject do you want to know the information?")
subject = input() subject = input()
@@ -31,8 +31,6 @@ def user_input():
grade = input("Grade? \n") grade = input("Grade? \n")
grade_name = input("What's the name of the grade? \n") grade_name = input("What's the name of the grade? \n")
return "input", "grade", subject, category, grade, grade_name return "input", "grade", subject, category, grade, grade_name
elif todo == "exit":
return "exit"
def user_output(subject, categories, average, average_subject): def user_output(subject, categories, average, average_subject):
@@ -40,12 +38,7 @@ def user_output(subject, categories, average, average_subject):
for counter, category in enumerate(categories): for counter, category in enumerate(categories):
print("The average in {} is {} with these grades:".format(category, average[counter])) print("The average in {} is {} with these grades:".format(category, average[counter]))
string = "" string = ""
for grade in categories[category]: for grade in categories[category][0]:
string += str(grade) + ", " string += str(grade.grade) + ", "
print(string + "\n") print(string + "\n")
print("The average of {} is {}.".format(subject, average_subject)) print("The average of {} is {}.".format(subject, average_subject))
def password():
print("What is your password?")
return input()