caellion-python-commons
reports.py
Go to the documentation of this file.
1 import json
2 import re
3 
4 
6 
7  issues_all = {"_class": "io.jenkins.plugins.analysis.core.restapi.ReportApi", "issues": [], "size": 0}
8 
9  def __init__(self):
10  self.issues_all = {"_class": "io.jenkins.plugins.analysis.core.restapi.ReportApi", "issues": [], "size": 0}
11 
12  # def extract_basename(self, path):
13  # """Extracts basename of a given path (either dir or file). Should Work with any OS Path on any OS"""
14  # basename = re.search(r'[^\\/]+(?=[\\/]?$)', path)
15  # if basename:
16  # return basename.group(0)
17 
18  def extract_basename_file(self, path):
19  """Extracts basename of a given path (only files). Should Work with any OS Path on any OS"""
20  basename = re.search(r"[^\\/]+(?![\\/])$", path)
21  if basename:
22  return basename.group(0)
23 
24  def addIssue(self, path, severity, message, lineStart=-1, lineEnd=-1, columnStart=-1, columnEnd=-1, category=None, type=None, description=None, packageName=None, moduleName=None, additionalProperties=None):
25 
26  lineStart = int(lineStart)
27  lineEnd = int(lineEnd)
28  columnStart = int(columnStart)
29  columnEnd = int(columnEnd)
30 
31  filename = self.extract_basename_file(path)
32  severity = severity.upper()
33  if filename is None or filename == "":
34  raise Exception("Path is not a file path!")
35  if severity not in ["LOW", "NORMAL", "HIGH", "CRITICAL", "ERROR"]:
36  raise Exception("Path is not a file path!")
37  if message is None or message == "":
38  raise Exception("Message must not be empty!")
39  dirname = path.replace(filename, "")
40 
41  issue = {"fileName": path, "directory": dirname, "severity": severity, "message": message}
42 
43  if lineStart > -1:
44  issue.update({"lineStart": lineStart})
45 
46  if lineStart > -1 and lineEnd > -1: # requires start to have end
47  issue.update({"lineEnd": lineEnd})
48 
49  if columnStart > -1:
50  issue.update({"columnStart": columnStart})
51 
52  if columnStart > -1 and columnEnd > -1: # requires start to have end
53  issue.update({"columnEnd": columnEnd})
54 
55  if category is not None:
56  issue.update({"category": category})
57 
58  if type is not None:
59  issue.update({"type": type})
60 
61  if description is not None:
62  issue.update({"description": description})
63 
64  if packageName is not None:
65  issue.update({"packageName": packageName})
66 
67  if moduleName is not None:
68  issue.update({"moduleName": moduleName})
69 
70  if additionalProperties is not None:
71  issue.update({"additionalProperties": additionalProperties})
72 
73  if issue not in self.issues_all["issues"]:
74  self.issues_all["issues"].append(issue)
75 
76  def generateReport(self):
77  self.issues_all["size"] = len(self.issues_all["issues"])
78  return json.dumps(self.issues_all)
def addIssue(self, path, severity, message, lineStart=-1, lineEnd=-1, columnStart=-1, columnEnd=-1, category=None, type=None, description=None, packageName=None, moduleName=None, additionalProperties=None)
Definition: reports.py:24