Skip to content

Commit

Permalink
move _timeDeltaToHumanReadable to buildbot.util.human_readable_delta
Browse files Browse the repository at this point in the history
* there's an overlap between human_readable_delta and formatInterval
  • Loading branch information
Mikhail Sobolev committed Jan 31, 2015
1 parent 667749e commit 5e802fa
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 62 deletions.
31 changes: 2 additions & 29 deletions master/buildbot/status/github.py
Expand Up @@ -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',
Expand All @@ -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.
Expand Down Expand Up @@ -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({
Expand Down
32 changes: 0 additions & 32 deletions master/buildbot/test/unit/test_status_github.py
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
34 changes: 34 additions & 0 deletions master/buildbot/test/unit/test_util.py
Expand Up @@ -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):
Expand Down
32 changes: 31 additions & 1 deletion master/buildbot/util/__init__.py
Expand Up @@ -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]
Expand Down Expand Up @@ -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']

0 comments on commit 5e802fa

Please sign in to comment.