From 5e802fa1e2a9a9c0e9331bbab407296fba26de5d Mon Sep 17 00:00:00 2001 From: Mikhail Sobolev Date: Sat, 17 Jan 2015 17:32:58 +0200 Subject: [PATCH] move _timeDeltaToHumanReadable to buildbot.util.human_readable_delta * there's an overlap between human_readable_delta and formatInterval --- master/buildbot/status/github.py | 31 ++--------------- .../buildbot/test/unit/test_status_github.py | 32 ----------------- master/buildbot/test/unit/test_util.py | 34 +++++++++++++++++++ master/buildbot/util/__init__.py | 32 ++++++++++++++++- 4 files changed, 67 insertions(+), 62 deletions(-) diff --git a/master/buildbot/status/github.py b/master/buildbot/status/github.py index 6d05bef90b5..07668b859c9 100644 --- a/master/buildbot/status/github.py +++ b/master/buildbot/status/github.py @@ -30,6 +30,7 @@ from buildbot.status.base import StatusReceiverMultiService from buildbot.status.builder import FAILURE from buildbot.status.builder import SUCCESS +from buildbot.util import human_readable_delta _STATE_MAP = { SUCCESS: 'success', @@ -47,34 +48,6 @@ def _getGitHubState(results): return _STATE_MAP.get(results, 'error') -def _timeDeltaToHumanReadable(start, end): - """ - Return a string of human readable time delta. - """ - start_date = datetime.fromtimestamp(start) - end_date = datetime.fromtimestamp(end) - delta = end_date - start_date - - result = [] - if delta.days > 0: - result.append('%d days' % (delta.days,)) - if delta.seconds > 0: - hours = delta.seconds / 3600 - if hours > 0: - result.append('%d hours' % (hours,)) - minutes = (delta.seconds - hours * 3600) / 60 - if minutes: - result.append('%d minutes' % (minutes,)) - seconds = delta.seconds % 60 - if seconds > 0: - result.append('%d seconds' % (seconds,)) - - if result: - return ', '.join(result) - else: - return 'super fast' - - class GitHubStatus(StatusReceiverMultiService): """ Send build status to GitHub. @@ -173,7 +146,7 @@ def _sendFinishStatus(self, builderName, build, results): state = _getGitHubState(results) (startTime, endTime) = build.getTimes() - duration = _timeDeltaToHumanReadable(startTime, endTime) + duration = human_readable_delta(startTime, endTime) description = yield build.render(self._endDescription) status.update({ diff --git a/master/buildbot/test/unit/test_status_github.py b/master/buildbot/test/unit/test_status_github.py index 6404864be85..ae1446d4f9b 100644 --- a/master/buildbot/test/unit/test_status_github.py +++ b/master/buildbot/test/unit/test_status_github.py @@ -40,7 +40,6 @@ buildbot.status.github from buildbot.status.github import GitHubStatus - from buildbot.status.github import _timeDeltaToHumanReadable from buildbot.status.github import _getGitHubState from buildbot.test.fake.fakebuild import FakeBuild @@ -356,37 +355,6 @@ def test_sendFinishStatus_ok(self): 'duration': '2 seconds', }) - def test_timeDeltaToHumanReadable(self): - """ - It will return a human readable time difference. - """ - result = _timeDeltaToHumanReadable(1, 1) - self.assertEqual('super fast', result) - - result = _timeDeltaToHumanReadable(1, 2) - self.assertEqual('1 seconds', result) - - result = _timeDeltaToHumanReadable(1, 61) - self.assertEqual('1 minutes', result) - - result = _timeDeltaToHumanReadable(1, 62) - self.assertEqual('1 minutes, 1 seconds', result) - - result = _timeDeltaToHumanReadable(1, 60 * 60 + 1) - self.assertEqual('1 hours', result) - - result = _timeDeltaToHumanReadable(1, 60 * 60 + 61) - self.assertEqual('1 hours, 1 minutes', result) - - result = _timeDeltaToHumanReadable(1, 60 * 60 + 62) - self.assertEqual('1 hours, 1 minutes, 1 seconds', result) - - result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 1) - self.assertEqual('1 days', result) - - result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 2) - self.assertEqual('1 days, 1 seconds', result) - def test_getGitHubRepoProperties_skip_no_sha(self): """ An empty dict is returned when any of the repo name, owner and sha diff --git a/master/buildbot/test/unit/test_util.py b/master/buildbot/test/unit/test_util.py index 5f68146896e..7c05e45c966 100644 --- a/master/buildbot/test/unit/test_util.py +++ b/master/buildbot/test/unit/test_util.py @@ -60,6 +60,40 @@ def test_mixed(self): self.assertEqual(util.formatInterval(7392), "2 hrs, 3 mins, 12 secs") +class TestHumanReadableDelta(unittest.TestCase): + + def test_timeDeltaToHumanReadable(self): + """ + It will return a human readable time difference. + """ + result = util.human_readable_delta(1, 1) + self.assertEqual('super fast', result) + + result = util.human_readable_delta(1, 2) + self.assertEqual('1 seconds', result) + + result = util.human_readable_delta(1, 61) + self.assertEqual('1 minutes', result) + + result = util.human_readable_delta(1, 62) + self.assertEqual('1 minutes, 1 seconds', result) + + result = util.human_readable_delta(1, 60 * 60 + 1) + self.assertEqual('1 hours', result) + + result = util.human_readable_delta(1, 60 * 60 + 61) + self.assertEqual('1 hours, 1 minutes', result) + + result = util.human_readable_delta(1, 60 * 60 + 62) + self.assertEqual('1 hours, 1 minutes, 1 seconds', result) + + result = util.human_readable_delta(1, 24 * 60 * 60 + 1) + self.assertEqual('1 days', result) + + result = util.human_readable_delta(1, 24 * 60 * 60 + 2) + self.assertEqual('1 days, 1 seconds', result) + + class safeTranslate(unittest.TestCase): def test_str_good(self): diff --git a/master/buildbot/util/__init__.py b/master/buildbot/util/__init__.py index 85aad01c808..55ef96ebf63 100644 --- a/master/buildbot/util/__init__.py +++ b/master/buildbot/util/__init__.py @@ -202,6 +202,35 @@ def datetime2epoch(dt): return calendar.timegm(dt.utctimetuple()) +# TODO: maybe "merge" with formatInterval? +def human_readable_delta(start, end): + """ + Return a string of human readable time delta. + """ + start_date = datetime.datetime.fromtimestamp(start) + end_date = datetime.datetime.fromtimestamp(end) + delta = end_date - start_date + + result = [] + if delta.days > 0: + result.append('%d days' % (delta.days,)) + if delta.seconds > 0: + hours = delta.seconds / 3600 + if hours > 0: + result.append('%d hours' % (hours,)) + minutes = (delta.seconds - hours * 3600) / 60 + if minutes: + result.append('%d minutes' % (minutes,)) + seconds = delta.seconds % 60 + if seconds > 0: + result.append('%d seconds' % (seconds,)) + + if result: + return ', '.join(result) + else: + return 'super fast' + + def makeList(input): if isinstance(input, basestring): return [input] @@ -258,4 +287,5 @@ def check_functional_environment(config): 'naturalSort', 'now', 'formatInterval', 'ComparableMixin', 'json', 'safeTranslate', 'none_or_str', 'NotABranch', 'deferredLocked', 'SerializedInvocation', 'UTC', - 'diffSets', 'makeList', 'in_reactor', 'check_functional_environment'] + 'diffSets', 'makeList', 'in_reactor', 'check_functional_environment', + 'human_readable_delta']