spotbugsSummary.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env python3
  2. import argparse
  3. import defusedxml.ElementTree as ET
  4. def get_counts(tree):
  5. category_counts = {}
  6. category_names = {}
  7. for child in tree.getroot():
  8. if child.tag == "BugInstance":
  9. category = child.attrib['category']
  10. if category in category_counts:
  11. category_counts[category] = category_counts[category] + 1
  12. else:
  13. category_counts[category] = 1
  14. elif child.tag == "BugCategory":
  15. category = child.attrib['category']
  16. category_names[category] = child[0].text
  17. summary = {}
  18. for category in category_counts.keys():
  19. summary[category_names[category]] = category_counts[category]
  20. return summary
  21. def print_html(summary):
  22. output = "<table><tr><th>Category</th><th>Count</th></tr>"
  23. categories = sorted(summary.keys())
  24. for category in categories:
  25. output += "<tr>"
  26. output += f"<td>{category}</td>"
  27. output += f"<td>{summary[category]}</td>"
  28. output += "</tr>"
  29. output += "<tr>"
  30. output += "<td><b>Total</b></td>"
  31. output += f"<td><b>{sum(summary.values())}</b></td>"
  32. output += "</tr>"
  33. output += "</table>"
  34. print(output)
  35. def print_total(summary):
  36. print(sum(summary.values()))
  37. if __name__ == "__main__":
  38. parser = argparse.ArgumentParser()
  39. parser.add_argument("--total", help="print total count instead of summary HTML",
  40. action="store_true")
  41. parser.add_argument("--file", help="file to parse", default="app/build/reports/spotbugs/gplayDebug.xml")
  42. args = parser.parse_args()
  43. tree = ET.parse(args.file)
  44. summary = get_counts(tree)
  45. if args.total:
  46. print_total(summary)
  47. else:
  48. print_html(summary)