From 39cd9dc0536817b34ed4798cc6b834fe73b887f8 Mon Sep 17 00:00:00 2001
From: laurentheirendt <laurent.heirendt@uni.lu>
Date: Wed, 14 Sep 2022 13:06:58 +0200
Subject: [PATCH] add extraction of metadata from yml

---
 .ci/generateIndex.py | 67 +++++++++++++++++++++++++++++---------------
 1 file changed, 44 insertions(+), 23 deletions(-)

diff --git a/.ci/generateIndex.py b/.ci/generateIndex.py
index 0baa8da5..0b4912e2 100644
--- a/.ci/generateIndex.py
+++ b/.ci/generateIndex.py
@@ -2,6 +2,7 @@ import os, re
 from os import path
 from natsort import natsorted
 from pathlib import Path
+import yaml
 
 def line_prepender(filename, line):
     with open(filename, 'r+') as f:
@@ -77,12 +78,23 @@ def save_tag(localroot, root, filename, tag):
 
     length_tag = len(tag)
 
-    with open(filename, 'r') as f:
-        for line in f:
-            # check for the start of the section
-            if line[0:length_tag+1] == tag + ":":
-                return_tag = line[length_tag+2:]
-                break
+    if "yml" in filename:
+        with open(filename, "r") as stream:
+            try:
+                metadata = list(yaml.load_all(stream, Loader=yaml.FullLoader))
+            except yaml.YAMLError as exc:
+                print(exc)
+
+        return_tag = metadata[0][tag]
+
+    else:
+        with open(filename, 'r') as f:
+            for line in f:
+                # check for the start of the section
+                if line[0:length_tag+1] == tag + ":":
+                    return_tag = line[length_tag+2:]
+                    return_tag = return_tag.replace('"', '')
+                    break
 
     # change back to the local root
     os.chdir(localroot)
@@ -211,6 +223,10 @@ def generate_header(folder, permalink, shortcut, order, legacy_from, title, desc
     else:
         header += "---"
 
+    # add title for QMS documents
+    if "qms" in shortcut:
+        header += "\n# " + title
+
     return header
 
 def generate_whitelist_entry(folder, permalink, shortcut):
@@ -291,6 +307,10 @@ for folder in cardDirs:
                                 title = save_tag(localroot, root, file, "title")
                                 description = save_tag(localroot, root, file, "description")
 
+                                # extract the title from the QMS metadata
+                                if "qms" in root:
+                                    title = save_tag(localroot, root, file[:-3] + ".yml", "title")
+
                                 # remove the previous header
                                 n = remove_header(localroot, root, file)
 
@@ -332,23 +352,24 @@ for folder in cardDirs:
                                 line_prepender(fileName, header)
 
                                 # open file and get the title after the header
-                                count = 0
-                                title = ""
-                                bp = n + 1
-
-                                with open(fileName, 'r') as f:
-                                    for line in f:
-                                        count += 1
-                                        if count == bp:
-                                            if len(line) > 2:
-                                                title = line
-                                                break
-                                            else:
-                                                bp += 1
-
-                                # remove first and last chars
-                                title = title.rstrip("\n\r")
-                                title = title[2:]
+                                if "qms" not in root:
+                                    count = 0
+                                    title = ""
+                                    bp = n + 1
+
+                                    with open(fileName, 'r') as f:
+                                        for line in f:
+                                            count += 1
+                                            if count == bp:
+                                                if len(line) > 2:
+                                                    title = line
+                                                    break
+                                                else:
+                                                    bp += 1
+
+                                    # remove first and last chars
+                                    title = title.rstrip("\n\r")
+                                    title = title[2:]
 
                                 localIndexArr[indexS].append(build_link(title, root))
 
-- 
GitLab