From fb884991978b094f1223930e4443de0c27215df0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 20 May 2024 15:09:56 +0500 Subject: [PATCH] ifc5d - check for mandatory fields in csv header --- src/ifc5d/ifc5d/csv2ifc.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ifc5d/ifc5d/csv2ifc.py b/src/ifc5d/ifc5d/csv2ifc.py index 776f40d4a6..8483d34dd4 100644 --- a/src/ifc5d/ifc5d/csv2ifc.py +++ b/src/ifc5d/ifc5d/csv2ifc.py @@ -50,6 +50,7 @@ class Csv2Ifc: for row in reader: if not row[0]: continue + # parse header if row[0] == "Hierarchy": self.has_categories = True for i, col in enumerate(row): @@ -58,6 +59,17 @@ class Csv2Ifc: if col == "Value": self.has_categories = False self.headers[col] = i + + # validate header + mandatory_fields = {"Name", "Quantity", "Unit"} + if not self.is_schedule_of_rates: + mandatory_fields.update({"Property", "Query"}) + available_fields = set(self.headers.keys()) + if not mandatory_fields.issubset(available_fields): + raise Exception( + f"Missing mandatory fields in CSV header: {', '.join(mandatory_fields-available_fields)}" + ) + continue cost_data = self.get_row_cost_data(row) hierarchy_key = int(row[0])