From 9e688b27bf32fc770e9dd56795920dc5fe58f31e Mon Sep 17 00:00:00 2001
From: Thomas Bock <thomas.bock@ptb.de>
Date: Wed, 10 Mar 2021 15:58:26 +0100
Subject: [PATCH] dcc software

---
 cal/trans.py |  4 +---
 cal/utils.py | 43 ++++++++++++++++++++++++++++++++++---------
 2 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/cal/trans.py b/cal/trans.py
index f2d19e9..804109a 100644
--- a/cal/trans.py
+++ b/cal/trans.py
@@ -206,9 +206,7 @@ class Trans:
                     "respPerson":[utils.dcc_resp_person(cal_docs, maintainers),
                                   utils.dcc_meas_maintainer(cal_docs, maintainers)]},
                 "customer": utils.dcc_customer(cal_docs, countries),
-                "dccSoftware":[utils.dcc_analysis_software(cal_docs),
-                               utils.dcc_result_software(cal_docs),
-                               utils.dcc_cal_software(cal_docs),]},
+                "dccSoftware":utils.dcc_software(cal_docs)},
             "measurementResults":{
                 "usedMethods":{"usedMethod": utils.dcc_used_methodes(cal_docs, secs)},
                 "influenceConditions": utils.dcc_influence_cond(cal_docs,
diff --git a/cal/utils.py b/cal/utils.py
index b6b75c9..ee1c8d9 100644
--- a/cal/utils.py
+++ b/cal/utils.py
@@ -449,23 +449,40 @@ def dcc_meas_maintainer(cal_docs, maintainers):
 
 def dcc_device_class(cal_docs):
     doc = cal_docs[-1]
-
     return {"lang":get_lang(doc),
             "content":[get_customerobject_type(doc)]}
 
+
+def dcc_software(cal_docs):
+
+    ret = []
+    ana = dcc_analysis_software(cal_docs)
+    res = dcc_result_software(cal_docs)
+    cal = dcc_cal_software(cal_docs)
+
+    if cal:
+        ret.append(cal)
+    if ana:
+        ret.append(ana)
+    if res:
+        ret.append(res)
+    return ret
+
 def dcc_analysis_software(cal_docs):
     doc = cal_docs[-1]
     name, release = get_analysis_software(doc)
-    return {"name":[{"lang":"en",
-                     "content": [name]}],
-            "release":release}
+    if name:
+        return {"name":[{"lang":"en",
+                        "content": [name]}],
+                "release":release}
 
 def dcc_result_software(cal_docs):
     doc = cal_docs[-1]
     name, release = get_result_software(doc)
-    return {"name":[{"lang":"en",
-                     "content": [name]}],
-            "release":release}
+    if name:
+        return {"name":[{"lang":"en",
+                        "content": [name]}],
+                "release":release}
 
 def dcc_cal_software(cal_docs):
     doc = cal_docs[-1]
@@ -528,11 +545,19 @@ def should_skipped(doc):
 
 def get_analysis_software(doc):
     aux = doc.get("Calibration", {}).get("Analysis").get("AuxValues")
-    return "{} (calculation of analysis)".format(aux.get("AnalysisProgram")), aux.get("AnalysisGitHash")
+    name = aux.get("AnalysisProgram")
+    if name:
+        return "{} (calculation of analysis)".format(name), aux.get("AnalysisGitHash")
+    else:
+        return None, None
 
 def get_result_software(doc):
     aux = doc.get("Calibration", {}).get("Result").get("AuxValues")
-    return "{} (calculation of result)".format(aux.get("AnalysisProgram")), aux.get("AnalysisGitHash")
+    name = aux.get("AnalysisProgram")
+    if name:
+        return "{} (calculation of result)".format(name), aux.get("AnalysisGitHash")
+    else:
+        return None, None
 
 def get_customerobject_type(doc):
     return doc.get("Calibration", {}).get("CustomerObject").get("Type")
-- 
GitLab