Skip to content

Commit

Permalink
extract two non-methods into private functions
Browse files Browse the repository at this point in the history
* _getGitHubState
* _timeDeltaToHumanReadable
  • Loading branch information
Mikhail Sobolev committed Jan 31, 2015
1 parent 61b5f85 commit 681ed13
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 63 deletions.
91 changes: 45 additions & 46 deletions master/buildbot/status/github.py
Expand Up @@ -31,6 +31,49 @@
from buildbot.status.builder import FAILURE
from buildbot.status.builder import SUCCESS

_STATE_MAP = {
SUCCESS: 'success',
FAILURE: 'failure',
}


def _getGitHubState(results):
"""
Convert Buildbot states into GitHub states.
"""
# GitHub defines `success`, `failure` and `error` states.
# We explicitly map success and failure. Any other BuildBot status
# is converted to `error`.
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):
"""
Expand Down Expand Up @@ -128,9 +171,9 @@ def _sendFinishStatus(self, builderName, build, results):
if not status:
defer.returnValue(None)

state = self._getGitHubState(results)
state = _getGitHubState(results)
(startTime, endTime) = build.getTimes()
duration = self._timeDeltaToHumanReadable(startTime, endTime)
duration = _timeDeltaToHumanReadable(startTime, endTime)
description = yield build.render(self._endDescription)

status.update({
Expand All @@ -145,33 +188,6 @@ def _sendFinishStatus(self, builderName, build, results):
result = yield self._sendGitHubStatus(status)
defer.returnValue(result)

def _timeDeltaToHumanReadable(self, 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,))
result = ', '.join(result)
if not result:
return 'super fast'
else:
return result

@defer.inlineCallbacks
def _getGitHubRepoProperties(self, build):
"""
Expand Down Expand Up @@ -199,23 +215,6 @@ def _getGitHubRepoProperties(self, build):
}
defer.returnValue(result)

def _getGitHubState(self, results):
"""
Convert Buildbot states into GitHub states.
"""
# GitHub defines `success`, `failure` and `error` states.
# We explicitly map success and failure. Any other BuildBot status
# is converted to `error`.
state_map = {
SUCCESS: 'success',
FAILURE: 'failure',
}

try:
return state_map[results]
except KeyError:
return 'error'

def _sendGitHubStatus(self, status):
"""
Send status to GitHub API.
Expand Down
31 changes: 14 additions & 17 deletions master/buildbot/test/unit/test_status_github.py
Expand Up @@ -35,6 +35,8 @@
txgithub = None
else:
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
from buildbot.test.util import logging
Expand Down Expand Up @@ -330,31 +332,31 @@ def test_timeDeltaToHumanReadable(self):
"""
It will return a human readable time difference.
"""
result = self.status._timeDeltaToHumanReadable(1, 1)
result = _timeDeltaToHumanReadable(1, 1)
self.assertEqual('super fast', result)

result = self.status._timeDeltaToHumanReadable(1, 2)
result = _timeDeltaToHumanReadable(1, 2)
self.assertEqual('1 seconds', result)

result = self.status._timeDeltaToHumanReadable(1, 61)
result = _timeDeltaToHumanReadable(1, 61)
self.assertEqual('1 minutes', result)

result = self.status._timeDeltaToHumanReadable(1, 62)
result = _timeDeltaToHumanReadable(1, 62)
self.assertEqual('1 minutes, 1 seconds', result)

result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 1)
result = _timeDeltaToHumanReadable(1, 60 * 60 + 1)
self.assertEqual('1 hours', result)

result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 61)
result = _timeDeltaToHumanReadable(1, 60 * 60 + 61)
self.assertEqual('1 hours, 1 minutes', result)

result = self.status._timeDeltaToHumanReadable(1, 60 * 60 + 62)
result = _timeDeltaToHumanReadable(1, 60 * 60 + 62)
self.assertEqual('1 hours, 1 minutes, 1 seconds', result)

result = self.status._timeDeltaToHumanReadable(1, 24 * 60 * 60 + 1)
result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 1)
self.assertEqual('1 days', result)

result = self.status._timeDeltaToHumanReadable(1, 24 * 60 * 60 + 2)
result = _timeDeltaToHumanReadable(1, 24 * 60 * 60 + 2)
self.assertEqual('1 days, 1 seconds', result)

def test_getGitHubRepoProperties_skip_no_sha(self):
Expand Down Expand Up @@ -421,14 +423,9 @@ def test_getGitHubState(self):
_getGitHubState will try to translate BuildBot status into GitHub
status. For unknown values will fallback to 'error'.
"""
self.assertEqual(
'success', self.status._getGitHubState(SUCCESS))

self.assertEqual(
'failure', self.status._getGitHubState(FAILURE))

self.assertEqual(
'error', self.status._getGitHubState('anything-else'))
self.assertEqual('success', _getGitHubState(SUCCESS))
self.assertEqual('failure', _getGitHubState(FAILURE))
self.assertEqual('error', _getGitHubState('anything-else'))

def test_sendGitHubStatus_success(self):
"""
Expand Down

0 comments on commit 681ed13

Please sign in to comment.