about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--parse_data.py65
1 files changed, 52 insertions, 13 deletions
diff --git a/parse_data.py b/parse_data.py
index 92fa038..16b7bd9 100644
--- a/parse_data.py
+++ b/parse_data.py
@@ -1,24 +1,63 @@
+import csv
 
-class Category:
-    failed = False
-    tests = []
+class Test:
+    def __init__(self, number: int, description: str):
+        self.number: int = number
+        self.description: str = description
+        self.failed: bool = False
+        self.logs: list[str, str, str] = [] # log_type, timestamp, message
+        
+    def add_log(self, log_type: str, timestamp: str, fail_message: str):
+        if log_type == "FAIL":
+            self.failed = True
+            
+        new_log = {
+            "log_type": log_type,
+            "timestamp": timestamp,
+            "fail_message": fail_message
+        }
+        self.logs.append(new_log)
 
+class Category:
     def __init__(self, name: str):
-        self.name = name
+        self.name: str = name
+        self.failed: bool = False
+        self.tests: list[Test] = []
         
     def is_number_in_tests(self, number: int) -> bool:
-        return self.tests[-1] == number
+        return self.tests and self.tests[-1].number == number
     
     def add_test(self, log_type: str, number: int, timestamp: str, description: str, fail_message: str):
-        # TODO
-        # adds the test to the tests-list. if the test is a fail, the whole category also fails.
-        # if the test number is already registered (as a fail), add this fail_message to the messages of that test
-        pass
+        if log_type == "FAIL":
+            self.failed = True
+            
+        if not self.is_number_in_tests(number):
+            new_test = Test(number, description)
+            self.tests.append(new_test)
+
+        self.tests[-1].add_log(log_type, timestamp, fail_message)
 
 def find_category_in_data(name: str, data: list[Category]) -> int:
-    # TODO
-    # returns the index of the category with the same name in data
-    # return -1, if the category cannot be found
+    for index, category in enumerate(data):
+        if category.name == name:
+            return index
     return -1 
 
-data = [] # List of Category objects
\ No newline at end of file
+data = [] # List of Category objects
+
+# Define the CSV filename
+csv_filename = "data.csv"
+
+with open(csv_filename, mode="r", encoding="utf-8") as file:
+    csv_reader = csv.DictReader(file)  # Reads as a dictionary
+    for row in csv_reader:
+        log_type, timestamp, category_name, number, test_description, fail_message = row.values()
+
+        index = find_category_in_data(category_name, data)
+        if index == -1:
+            category = Category(category_name)
+            data.append(category)
+        else:
+            category = data[index]
+
+        category.add_test(log_type, number, timestamp, test_description, fail_message)
\ No newline at end of file