PAL: Add processing of PPS and CPS tests
[csit.git] / resources / tools / presentation / specification_parser.py
index 62e9442..5a88a7b 100644 (file)
@@ -307,14 +307,15 @@ class Specification:
         else:
             raise PresentationError(f"Not supported build type: {build_type}")
         if ret_code != 0:
-            raise PresentationError(u"Not possible to get the number of the "
-                                    u"build number.")
+            raise PresentationError(
+                f"Not possible to get the build number of {job}."
+            )
         try:
             build_nr = int(build_nr)
             return build_nr
         except ValueError as err:
             raise PresentationError(
-                f"Not possible to get the number of the build number. Reason:\n"
+                f"Not possible to get the build number of {job}. Reason:\n"
                 f"{repr(err)}"
             )
 
@@ -528,14 +529,18 @@ class Specification:
                     continue
                 if isinstance(builds, dict):
                     build_end = builds.get(u"end", None)
+                    max_builds = builds.get(u"max-builds", None)
+                    reverse = builds.get(u"reverse", False)
                     try:
                         build_end = int(build_end)
                     except ValueError:
                         # defined as a range <start, build_type>
                         build_end = self._get_build_number(job, build_end)
-                    builds = [x for x in range(builds[u"start"],
-                                               build_end + 1)
-                              if x not in builds.get(u"skip", list())]
+                    builds = list(range(builds[u"start"], build_end + 1))
+                    if max_builds and max_builds < len(builds):
+                        builds = builds[-max_builds:]
+                    if reverse:
+                        builds.reverse()
                     self.configuration[u"data-sets"][set_name][job] = builds
                 elif isinstance(builds, list):
                     for idx, item in enumerate(builds):
@@ -590,14 +595,23 @@ class Specification:
                 if builds:
                     if isinstance(builds, dict):
                         build_end = builds.get(u"end", None)
+                        max_builds = builds.get(u"max-builds", None)
+                        reverse = bool(builds.get(u"reverse", False))
                         try:
                             build_end = int(build_end)
                         except ValueError:
                             # defined as a range <start, build_type>
+                            if build_end in (u"lastCompletedBuild",
+                                             u"lastSuccessfulBuild"):
+                                reverse = True
                             build_end = self._get_build_number(job, build_end)
                         builds = [x for x in range(builds[u"start"],
                                                    build_end + 1)
                                   if x not in builds.get(u"skip", list())]
+                        if reverse:
+                            builds.reverse()
+                        if max_builds and max_builds < len(builds):
+                            builds = builds[:max_builds]
                     self._specification[u"input"][u"builds"][job] = list()
                     for build in builds:
                         self._specification[u"input"][u"builds"][job]. \
@@ -608,6 +622,7 @@ class Specification:
                         f"No build is defined for the job {job}. Trying to "
                         f"continue without it."
                     )
+
         except KeyError:
             raise PresentationError(u"No data to process.")
 
@@ -697,9 +712,9 @@ class Specification:
 
             if table.get(u"columns", None):
                 for i in range(len(table[u"columns"])):
-                    data_set = table[u"columns"][i].get(u"data", None)
+                    data_set = table[u"columns"][i].get(u"data-set", None)
                     if isinstance(data_set, str):
-                        table[u"columns"][i][u"data"] = \
+                        table[u"columns"][i][u"data-set"] = \
                             self.configuration[u"data-sets"][data_set]
                     data_set = table[u"columns"][i].get(
                         u"data-replacement", None)