Merge pull request #382 from doctoryes/master

Add ability to check combined status.
This commit is contained in:
Jimmy Zelinskie
2016-01-25 21:49:04 -05:00
5 changed files with 195 additions and 0 deletions
+12
View File
@@ -31,6 +31,7 @@ import github.PaginatedList
import github.GitCommit
import github.NamedUser
import github.CommitStatus
import github.CommitCombinedStatus
import github.File
import github.CommitStats
import github.CommitComment
@@ -203,6 +204,17 @@ class Commit(github.GithubObject.CompletableGithubObject):
None
)
def get_combined_status(self):
"""
:calls: `GET /repos/:owner/:repo/commits/:ref/status/ <http://developer.github.com/v3/repos/statuses>`_
:rtype: :class:`github.CommitCombinedStatus.CommitCombinedStatus`
"""
headers, data = self._requester.requestJsonAndCheck(
"GET",
self.url + "/status"
)
return github.CommitCombinedStatus.CommitCombinedStatus(self._requester, headers, data, completed=True)
@property
def _identity(self):
return self.sha
+110
View File
@@ -0,0 +1,110 @@
# -*- coding: utf-8 -*-
# ########################## Copyrights and license ############################
# #
# Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2012 Zearin <zearin@gonk.net> #
# Copyright 2013 AKFish <akfish@gmail.com> #
# Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net> #
# #
# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #
# #
# PyGithub is free software: you can redistribute it and/or modify it under #
# the terms of the GNU Lesser General Public License as published by the Free #
# Software Foundation, either version 3 of the License, or (at your option) #
# any later version. #
# #
# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
# details. #
# #
# You should have received a copy of the GNU Lesser General Public License #
# along with PyGithub. If not, see <http://www.gnu.org/licenses/>. #
# #
# ##############################################################################
import github.GithubObject
import github.CommitStatus
import github.Repository
class CommitCombinedStatus(github.GithubObject.NonCompletableGithubObject):
"""
This class represents CommitCombinedStatus as returned for example by https://developer.github.com/v3/repos/statuses/
"""
@property
def state(self):
"""
:type: string
"""
return self._state.value
@property
def sha(self):
"""
:type: string
"""
return self._sha.value
@property
def total_count(self):
"""
:type: integer
"""
return self._total_count.value
@property
def commit_url(self):
"""
:type: string
"""
return self._commit_url.value
@property
def url(self):
"""
:type: string
"""
return self._url.value
@property
def repository(self):
"""
:type: :class:`github.Repository.Repository`
"""
return self._repository.value
@property
def statuses(self):
"""
:type: list of :class:`CommitStatus`
"""
return self._statuses.value
def _initAttributes(self):
self._state = github.GithubObject.NotSet
self._sha = github.GithubObject.NotSet
self._total_count = github.GithubObject.NotSet
self._commit_url = github.GithubObject.NotSet
self._url = github.GithubObject.NotSet
self._repository = github.GithubObject.NotSet
self._statuses = github.GithubObject.NotSet
def _useAttributes(self, attributes):
if "state" in attributes: # pragma no branch
self._state = self._makeStringAttribute(attributes["state"])
if "sha" in attributes: # pragma no branch
self._sha = self._makeStringAttribute(attributes["sha"])
if "total_count" in attributes: # pragma no branch
self._total_count = self._makeIntAttribute(attributes["total_count"])
if "commit_url" in attributes: # pragma no branch
self._commit_url = self._makeStringAttribute(attributes["commit_url"])
if "url" in attributes: # pragma no branch
self._url = self._makeStringAttribute(attributes["url"])
if "repository" in attributes: # pragma no branch
self._repository = self._makeClassAttribute(github.Repository.Repository, attributes["repository"])
if "statuses" in attributes: # pragma no branch
self._statuses = self._makeListOfClassesAttribute(github.CommitStatus.CommitStatus, attributes["statuses"])
+1
View File
@@ -29,6 +29,7 @@ from Authentication import *
from Authorization import *
from Branch import *
from Commit import *
from CommitCombinedStatus import *
from CommitComment import *
from CommitStatus import *
from ContentFile import *
+50
View File
@@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
# ########################## Copyrights and license ############################
# #
# Copyright 2012 Vincent Jacques <vincent@vincent-jacques.net> #
# Copyright 2012 Zearin <zearin@gonk.net> #
# Copyright 2013 Vincent Jacques <vincent@vincent-jacques.net> #
# #
# This file is part of PyGithub. http://jacquev6.github.com/PyGithub/ #
# #
# PyGithub is free software: you can redistribute it and/or modify it under #
# the terms of the GNU Lesser General Public License as published by the Free #
# Software Foundation, either version 3 of the License, or (at your option) #
# any later version. #
# #
# PyGithub is distributed in the hope that it will be useful, but WITHOUT ANY #
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more #
# details. #
# #
# You should have received a copy of the GNU Lesser General Public License #
# along with PyGithub. If not, see <http://www.gnu.org/licenses/>. #
# #
# ##############################################################################
import Framework
import datetime
class CommitCombinedStatus(Framework.TestCase):
def setUp(self):
Framework.TestCase.setUp(self)
self.combined_status = self.g.get_repo("edx/edx-platform").get_commit("74e70119a23fa3ffb3db19d4590eccfebd72b659").get_combined_status()
def testAttributes(self):
self.assertEqual(self.combined_status.state, "success")
self.assertEqual(self.combined_status.statuses[0].url, "https://api.github.com/repos/edx/edx-platform/statuses/74e70119a23fa3ffb3db19d4590eccfebd72b659")
self.assertEqual(self.combined_status.statuses[1].id, 390603044)
self.assertEqual(self.combined_status.statuses[2].state, "success")
self.assertEqual(self.combined_status.statuses[3].description, "Build finished.")
self.assertEqual(self.combined_status.statuses[4].target_url, "https://build.testeng.edx.org/job/edx-platform-python-unittests-pr/10504/")
self.assertEqual(self.combined_status.statuses[4].created_at, datetime.datetime(2015, 12, 14, 13, 24, 18))
self.assertEqual(self.combined_status.statuses[3].updated_at, datetime.datetime(2015, 12, 14, 13, 23, 35))
self.assertEqual(self.combined_status.sha, "74e70119a23fa3ffb3db19d4590eccfebd72b659")
self.assertEqual(self.combined_status.total_count, 6)
self.assertEqual(self.combined_status.repository.id, 10391073)
self.assertEqual(self.combined_status.repository.full_name, "edx/edx-platform")
self.assertEqual(self.combined_status.commit_url, "https://api.github.com/repos/edx/edx-platform/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659")
self.assertEqual(self.combined_status.url, "https://api.github.com/repos/edx/edx-platform/commits/74e70119a23fa3ffb3db19d4590eccfebd72b659/status")
File diff suppressed because one or more lines are too long