From ec429f152cf1d32a86f5783ed87453b42f7ef190 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 20 Aug 2018 23:28:00 +0200 Subject: o Better STM32 setup. --- stm32/__init__.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 stm32/__init__.py (limited to 'stm32/__init__.py') diff --git a/stm32/__init__.py b/stm32/__init__.py new file mode 100644 index 0000000..ee5b63a --- /dev/null +++ b/stm32/__init__.py @@ -0,0 +1,87 @@ +import csv +import os +import owlready2 as owl +import types +import urllib +from openpyxl import load_workbook + +BASE_URL = "https://trygvis.io/owl/stm32" +SHARED_URL = "{}/shared.owl".format(BASE_URL) + +def xlsx_to_csv(xlsx_path, csv_path): + wb = load_workbook(filename=xlsx_path) + ws = wb.active + + header = [cell.value.strip() for cell in ws[6]] + + with open(csv_path, "w", newline="") as f: + w = csv.writer(f, lineterminator=os.linesep) + w.writerow(header) + for row in ws.iter_rows(min_row=7): + w.writerow([cell.value.strip() for cell in row]) + +def csv_to_owl(csv_path, owl_path): + data = [] + with open(csv_path, "r") as f: + def fixup(s): + return s.replace(u"\u00b5", "u").\ + replace(u"\u00b0", "o") + for row in csv.reader(f): + data.append([fixup(cell) for cell in row]) + + header = data[0] + chips = data[1:] + + line = owl_path.name[0:-4] + url = "{}/{}.owl".format(BASE_URL, urllib.parse.quote(line)) + onto = owl.get_ontology(url) + shared = onto.get_namespace(SHARED_URL) + + class Chip(owl.Thing): + namespace = shared + Chip.label = "Chip" + + class ChipLine(owl.Thing): + namespace = shared + ChipLine.label = "ChipLine" + + class HasChipLine(owl.ObjectProperty): + namespace = shared + domain = [Chip] + range = [ChipLine] + python_name = "chip_line" + HasChipLine.label = "Has Chip Line" + + with onto: + chip_line = ChipLine(urllib.parse.quote(line)) + chip_line.label = line + properties = [] + for field in header: + class_name = field + class_name = class_name.lower() + class_name = class_name.replace(" ", "-") + class_name = class_name.replace("/", "") + class_name = class_name.replace("(", "") + class_name = class_name.replace(")", "") + class_name = urllib.parse.quote(class_name) + cls = types.new_class(class_name, (owl.DataProperty,)) + cls.label = "Has {}".format(field) + cls.domain = [Chip] + cls.namespace = onto + python_name = class_name + python_name = python_name.replace(" ", "_") + python_name = python_name.replace("-", "_") + cls.python_name = python_name + properties.append(cls) + + for row in chips: + chip = Chip(row[0]) + chip.label = row[0] + chip.chip_line = [chip_line] + + for idx, value in enumerate(row): + prop = properties[idx] + chip.__setattr__(prop.python_name, [value]) + + with open(owl_path, "wb") as f: + onto.save(f) -- cgit v1.2.3