summary.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. class SummaryItem(object):
  2. def __init__(self, data):
  3. self.line = data.get('line', None)
  4. self.repository = data.get('repository', None)
  5. self.commit_id = data.get('commit', None)
  6. self.exc = data.get('exc', None)
  7. self.image_id = data.get('id', None)
  8. self.source = data.get('source', None)
  9. self.tag = data.get('tag', None)
  10. class Summary(object):
  11. def __init__(self):
  12. self._summary = {}
  13. self._has_exc = False
  14. def _add_data(self, image, linestr, data):
  15. linestr = linestr.strip('\n')
  16. parts = linestr.split(':', 1)
  17. data.tag = parts[0]
  18. data.source = parts[1]
  19. if image not in self._summary:
  20. self._summary[image] = {linestr: data}
  21. else:
  22. self._summary[image][linestr] = data
  23. def add_exception(self, image, line, exc, commit=None):
  24. lineno, linestr = line
  25. self._add_data(image, linestr, SummaryItem({
  26. 'line': lineno,
  27. 'exc': str(exc),
  28. 'repository': image,
  29. 'commit': commit
  30. }))
  31. self._has_exc = True
  32. def add_success(self, image, line, img_id, commit=None):
  33. lineno, linestr = line
  34. self._add_data(image, linestr, SummaryItem({
  35. 'line': lineno,
  36. 'id': img_id,
  37. 'repository': image,
  38. 'commit': commit
  39. }))
  40. def print_summary(self, logger=None):
  41. linesep = ''.center(61, '-') + '\n'
  42. s = 'BREW BUILD SUMMARY\n' + linesep
  43. success = 'OVERALL SUCCESS: {}\n'.format(not self._has_exc)
  44. details = linesep
  45. for image, lines in self._summary.iteritems():
  46. details = details + '{}\n{}'.format(image, linesep)
  47. for linestr, data in lines.iteritems():
  48. details = details + '{0:2} | {1} | {2:50}\n'.format(
  49. data.line,
  50. 'KO' if data.exc else 'OK',
  51. data.exc or data.image_id
  52. )
  53. details = details + linesep
  54. if logger is not None:
  55. logger.info(s + success + details)
  56. else:
  57. print s, success, details
  58. def exit_code(self):
  59. return 1 if self._has_exc else 0
  60. def items(self):
  61. for lines in self._summary.itervalues():
  62. for item in lines.itervalues():
  63. yield item