{"action":"created","comment":{"url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/comments/31392140","id":31392140,"diff_hunk":"@@ -0,0 +1,401 @@\n+###\n+# Copyright (c) 2012, James Scott\n+# All rights reserved.\n+#   \n+# Redistribution and use in source and binary forms, with or without\n+# modification, are permitted provided that the following conditions are met:\n+#\n+#   * Redistributions of source code must retain the above copyright notice,\n+#     this list of conditions, and the following disclaimer.\n+#   * Redistributions in binary form must reproduce the above copyright notice,\n+#     this list of conditions, and the following disclaimer in the\n+#     documentation and/or other materials provided with the distribution.\n+#   * Neither the name of the author of this software nor the name of\n+#     contributors to this software may be used to endorse or promote products\n+#     derived from this software without specific prior written consent.\n+#\n+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n+# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n+# POSSIBILITY OF SUCH DAMAGE.\n+\n+###\n+import supybot.utils as utils\n+from supybot.commands import *\n+import supybot.plugins as plugins\n+import supybot.ircutils as ircutils\n+import supybot.ircmsgs as ircmsgs\n+import supybot.schedule as schedule\n+import supybot.callbacks as callbacks\n+\n+from random import randint\n+\n+import operator \n+\n+from cah import Game\n+\n+import time\n+\n+class Cah(callbacks.Plugin):\n+    \"\"\"Add the help for \"@plugin help Cah\" here\n+    This should describe *how* to use this plugin.\"\"\"\n+    threaded = True\n+\n+    def __init__(self, irc):\n+        self.__parent = super(Cah, self)\n+        self.__parent.__init__(irc)\n+        self.games = {}\n+\n+    class CahGame(object):\n+        \"\"\"docstring for Game\"\"\"\n+        def __init__(self, irc, channel, numrounds = 5):\n+            self.irc = irc\n+            self.channel = channel\n+            self.game = None\n+            self.canStart = False\n+            self.voting = False\n+            self.canStart = False\n+            self.roundRunning = False\n+            self.running =  False\n+            self.rounds = numrounds\n+            self.maxPlayers= 5\n+            self.players = []\n+            self.acceptingWhiteCards = False\n+            self.cardsPlayed = {}\n+        \n+        def initGame(self):\n+            schedule.addEvent(self.startgame, time.time() + 60, \"start_game_%s\" % self.channel)\n+\n+        ###### UTIL METHODS ##########\n+      \n+        def _msg(self, recip, msg):\n+            self.irc.queueMsg(ircmsgs.privmsg(recip,msg))\n+        \n+        def _printBlackCard(self, recip):\n+            response = \"Question: %s\"\n+            cah = self.game\n+            self._msg(recip, ircutils.mircColor(response % cah.question.text, bg=\"black\", fg=\"white\"))\n+\n+        def _msgHandToPlayer(self, nick):\n+            response = \"Your cards: %s  Please respond with @playcard [channel if in pm] <number> [number]\"\n+            enumeratedHand = []\n+            cah = self.game\n+            for position, card in enumerate(cah.players[nick].card_list):\n+                enumeratedHand.append(\"%s: %s \" % (position + 1, ircutils.bold(card.text)))\n+            self._printBlackCard(nick)\n+            self._msg(nick, ircutils.mircColor(response % ', '.join(enumeratedHand), bg=\"white\", fg=\"black\"))\n+\n+        def _displayPlayedCards(self):\n+            channel = self.channel\n+            responseTemplate = \"%s: (%s)\"\n+            responses = []\n+            response = \"%s\"\n+            for count, nick in enumerate(self.cardsPlayed.keys()):\n+                cardText = []\n+                cards = \", \".join([ircutils.bold(card.text) for card in self.cardsPlayed[nick]])\n+                responses.append(responseTemplate % (count + 1, cards))\n+            response = \";  \".join(responses)\n+            self._msg(channel, \"Played White cards: %s\" % response)\n+\n+        def _findHighScore(self, scores):\n+            highscore = []\n+            for nick, score in scores.iteritems():\n+                if len(highscore) == 0:\n+                    highscore.append([nick, score])\n+                elif highscore[0][1] < score:\n+                    highscore = []\n+                    highscore.append([nick, score])\n+                elif highscore[0][1] == score:\n+                    highscore.append([nick, score])\n+            if len(highscore) > 0:\n+                return (highscore[randint(0, len(highscore) -1)], True)\n+            else:\n+                return (highscore[0], False)\n+\n+\n+        def _tallyVotes(self, votes):\n+            ties = []\n+            winningCanidate = []\n+            canidatesById = []\n+            for nick in self.cardsPlayed.keys():\n+                canidatesById.append(nick)\n+\n+            for canidateNumber, count in votes.iteritems():\n+                canidate = canidatesById[int(canidateNumber)]\n+                count = int(count)\n+                if len(winningCanidate) == 0:\n+                    winningCanidate.append((canidate, count))\n+                elif winningCanidate[0][1] < count:\n+                    winningCanidate = []\n+                    winningCanidate.append((canidate, count))\n+                elif winningCanidate[0][1] == count:\n+                    winningCanidate.append((canidate, count))\n+\n+            if len(winningCanidate) > 1:\n+                return (winningCanidate[randint(0, len(winningCanidate) -1)], True)\n+            return (winningCanidate[0], False)\n+                \n+\n+        ###### END UTIL METHODS #######\n+\n+        ###### PRE GAME LOGIC ########\n+\n+        def startgame(self):\n+            #heh fix this\n+            game = self \n+            if game.canStart:\n+                if len(game.players) < 2:\n+                    self._msg(channel, \"I need more players.\")\n+                else:\n+                    game.canStart = False\n+                    game.running = True\n+                    game.game = Game(game.players, game.rounds)\n+                    #start game logic\n+                    self.nextround()        \n+\n+        ###### END PRE GAME LOGIC ######\n+\n+        ###### START GAME LOGIC ########\n+\n+        def playcard(self, nick, cardNumbers):\n+            game = self \n+            cah = game.game\n+            cardlist = []\n+            cards = cah.players[nick].card_list\n+            for cardNum in cardNumbers:\n+                cardlist.append(cards[int(cardNum) - 1])\n+            self.cardsPlayed[nick] = cardlist\n+            if len(self.cardsPlayed) == len(self.players):\n+                try:\n+                    schedule.removeEvent(\"round_%s\" % self.channel)\n+                except:\n+                    pass\n+                self.endround()\n+\n+        def nextround(self):\n+            channel = self.channel\n+            game = self\n+            cah = game.game\n+            try:\n+                self.cardsPlayed = {}\n+                cah.next_round()\n+                #Print Black Card to channel.\n+                self._printBlackCard(self.channel)\n+                for nick in self.players:\n+                    self._msgHandToPlayer(nick)\n+                self._msg(channel, \"The white cards have been PMed to the players, you have 60 seconds to choose.\")\n+                self.acceptingWhiteCards = True\n+                #TODO: do we need a round flag?\n+                schedule.addEvent(self.endround, time.time() + 60, \"round_%s\" % channel)\n+            except Exception:\n+                #TODO: add no more round logic\n+                \n+                #playerScores = sorted(cah.score.iteritems(), key=operator.itemgetter(1), reverse=True)\n+                #scores = []\n+                winner = None\n+                formattedScores = []\n+                print cah.score\n+                winner = self._findHighScore(cah.score)\n+                for name, score in cah.score.iteritems():\n+                    formattedScores.append(\"%s: %d\" % (name, score))\n+                self._msg(channel, \"Game Over! %s is the Winner!  Scores: %s \" % (winner[0][0], \", \".join(formattedScores)))\n+\n+\n+        def endround(self):\n+            channel = self.channel\n+            try:\n+                game = self\n+                if game.acceptingWhiteCards:\n+                    game.acceptingWhiteCards = False\n+                    self._msg(channel, \"Card Submittion Completed.\")\n+                    self._printBlackCard(channel)\n+                    self._displayPlayedCards()\n+                    self.startcardvote()\n+                else:\n+                    self_msg(channel, \"No round active.\")\n+            except KeyError:\n+                self_msg(channel, \"A Game is not running.\")\n+\n+        ###### END GAME LOGIC #########\n+\n+        ###### VOTING ##############\n+\n+        def startcardvote(self):\n+            channel = self.channel\n+          \n+            game = self\n+            game.votes = {}\n+            game.voted = []\n+            game.voting = True\n+            self._msg(channel, \"Please Vote on your favorite. @votecard <number> to vote, the entire channel can vote.\")\n+            schedule.addEvent(self.stopcardvote, time.time() + 60, \"vote_%s\" % channel)\n+            \n+\n+\n+\n+        def stopcardvote(self):\n+            \n+            #TODO: NOt quite done here\n+            if self.voting:\n+                game = self\n+                game.voting = False\n+                winner = self._tallyVotes(game.votes)\n+                print winner\n+                game.game.end_round(winner[0][0], self.cardsPlayed)\n+                game.voted = []\n+                game._msg(self.channel, \"%s wins the round!\" % ircutils.bold(winner[0][0]))\n+                #game._msg(self.channel, \"%s wins the round with %s\" % (ircutils.bold(winner[0][0]), ircutils.bold(filledCard)))\n+                game.nextround()\n+         \n+        ###### END VOTING LOGIC ######\n+\n+        def close(self):\n+            try:\n+                schedule.removeEvent(\"round_%s\" % self.channel)\n+            except:\n+                pass\n+            try:\n+                schedule.removeEvent(\"vote_%s\" % self.channel)\n+            except:\n+                pass\n+            try:        \n+                schedule.removeEvent(\"start_game_%s\" % self.channel)\n+            except:\n+                pass  \n+    Class = CahGame\n+\n+    ###### CHANNEL COMMANDS ######\n+    def forcestartgame(self, irc, msg, args):\n+        channel = ircutils.toLower(msg.args[0])\n+        if channel in self.games:\n+            try:        \n+                schedule.removeEvent(\"start_game_%s\" % self.channel)\n+            except:\n+                pass                \n+            self.games[channel].startgame()\n+        else:\n+            irc.reply(\"Game not running.\")\n+\n+    def playing(self, irc, msg, args):\n+        channel = ircutils.toLower(msg.args[0])\n+        nick = msg.nick\n+\n+        if channel in self.games:\n+            game = self.games[channel]\n+\n+            if game.running == False:\n+                if nick in game.players:\n+                    irc.reply(\"You already are playing.\")\n+                else:\n+                    if len(game.players) < game.maxPlayers:\n+                        game.players.append(nick)\n+                        irc.reply(\"Added, Spots left %d/%d.  Current Players %s\" % (game.maxPlayers - len(game.players), game.maxPlayers, ', '.join(game.players)))\n+                    else:\n+                        irc.reply(\"Too many players\")\n+                if len(game.players) > 1:\n+                    game.canStart = True\n+        else:\n+            irc.reply(\"Game not running.\")\n+\n+    def cah(self, irc, msg, args):\n+        \"\"\"Starts a cards against humanity game, takes\n+        an optional arguement of number of rounds\"\"\"\n+        channel = ircutils.toLower(msg.args[0])\n+        #TODO: this is prob needs fixing. \n+        if len(args) < 1:\n+            numrounds = 5\n+        else:\n+            numrounds = int(args[0])\n+\n+        if channel in self.games:\n+            irc.reply(\"There is a game running currently.\")\n+        else:\n+            irc.reply(\"Who wants to play IRC Aganst Humanity? To play reply with: @playing\", prefixNick=False)\n+            self.games[channel] = self.CahGame(irc, channel, numrounds)\n+            self.games[channel].initGame()\n+            \n+\n+\n+    def scah(self, irc, msg, args):","path":"plugin.py","position":326,"original_position":326,"commit_id":"38c3fa3970dbf608b0d4d3bb31504084915181c9","original_commit_id":"38c3fa3970dbf608b0d4d3bb31504084915181c9","user":{"login":"betterdiff","id":11888905,"avatar_url":"https://avatars.githubusercontent.com/u/11888905?v=3","gravatar_id":"","url":"https://api.github.com/users/betterdiff","html_url":"https://github.com/betterdiff","followers_url":"https://api.github.com/users/betterdiff/followers","following_url":"https://api.github.com/users/betterdiff/following{/other_user}","gists_url":"https://api.github.com/users/betterdiff/gists{/gist_id}","starred_url":"https://api.github.com/users/betterdiff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/betterdiff/subscriptions","organizations_url":"https://api.github.com/users/betterdiff/orgs","repos_url":"https://api.github.com/users/betterdiff/repos","events_url":"https://api.github.com/users/betterdiff/events{/privacy}","received_events_url":"https://api.github.com/users/betterdiff/received_events","type":"User","site_admin":false},"body":"* E303 too many blank lines (3)\n","created_at":"2015-05-31T16:58:14Z","updated_at":"2015-05-31T16:58:14Z","html_url":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2#discussion_r31392140","pull_request_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/comments/31392140"},"html":{"href":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2#discussion_r31392140"},"pull_request":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2","id":11651943,"html_url":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2","diff_url":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2.diff","patch_url":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2.patch","issue_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/2","number":2,"state":"open","locked":false,"title":"Bad PR including terrible python code from another project.","user":{"login":"scottjab","id":1759664,"avatar_url":"https://avatars.githubusercontent.com/u/1759664?v=3","gravatar_id":"","url":"https://api.github.com/users/scottjab","html_url":"https://github.com/scottjab","followers_url":"https://api.github.com/users/scottjab/followers","following_url":"https://api.github.com/users/scottjab/following{/other_user}","gists_url":"https://api.github.com/users/scottjab/gists{/gist_id}","starred_url":"https://api.github.com/users/scottjab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scottjab/subscriptions","organizations_url":"https://api.github.com/users/scottjab/orgs","repos_url":"https://api.github.com/users/scottjab/repos","events_url":"https://api.github.com/users/scottjab/events{/privacy}","received_events_url":"https://api.github.com/users/scottjab/received_events","type":"User","site_admin":false},"body":"","created_at":"2014-01-18T22:29:23Z","updated_at":"2015-05-31T16:58:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f6d0b0552490ea256ba767258011d5db5f3e3c8","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2/commits","review_comments_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2/comments","review_comment_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/comments{/number}","comments_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/2/comments","statuses_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/statuses/38c3fa3970dbf608b0d4d3bb31504084915181c9","head":{"label":"scottjab:big-pr","ref":"big-pr","sha":"38c3fa3970dbf608b0d4d3bb31504084915181c9","user":{"login":"scottjab","id":1759664,"avatar_url":"https://avatars.githubusercontent.com/u/1759664?v=3","gravatar_id":"","url":"https://api.github.com/users/scottjab","html_url":"https://github.com/scottjab","followers_url":"https://api.github.com/users/scottjab/followers","following_url":"https://api.github.com/users/scottjab/following{/other_user}","gists_url":"https://api.github.com/users/scottjab/gists{/gist_id}","starred_url":"https://api.github.com/users/scottjab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scottjab/subscriptions","organizations_url":"https://api.github.com/users/scottjab/orgs","repos_url":"https://api.github.com/users/scottjab/repos","events_url":"https://api.github.com/users/scottjab/events{/privacy}","received_events_url":"https://api.github.com/users/scottjab/received_events","type":"User","site_admin":false},"repo":{"id":16034977,"name":"sacrificial-integration-tests","full_name":"scottjab/sacrificial-integration-tests","owner":{"login":"scottjab","id":1759664,"avatar_url":"https://avatars.githubusercontent.com/u/1759664?v=3","gravatar_id":"","url":"https://api.github.com/users/scottjab","html_url":"https://github.com/scottjab","followers_url":"https://api.github.com/users/scottjab/followers","following_url":"https://api.github.com/users/scottjab/following{/other_user}","gists_url":"https://api.github.com/users/scottjab/gists{/gist_id}","starred_url":"https://api.github.com/users/scottjab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scottjab/subscriptions","organizations_url":"https://api.github.com/users/scottjab/orgs","repos_url":"https://api.github.com/users/scottjab/repos","events_url":"https://api.github.com/users/scottjab/events{/privacy}","received_events_url":"https://api.github.com/users/scottjab/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/scottjab/sacrificial-integration-tests","description":"Integration testing destination for imhotep.","fork":true,"url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests","forks_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/forks","keys_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/teams","hooks_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/hooks","issue_events_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/issues/events{/number}","events_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/events","assignees_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/assignees{/user}","branches_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/branches{/branch}","tags_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/tags","blobs_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/git/refs{/sha}","trees_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/statuses/{sha}","languages_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/languages","stargazers_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/stargazers","contributors_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/contributors","subscribers_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/subscribers","subscription_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/subscription","commits_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/commits{/sha}","git_commits_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/git/commits{/sha}","comments_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/comments{/number}","issue_comment_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/issues/comments{/number}","contents_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/contents/{+path}","compare_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/merges","archive_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/downloads","issues_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/issues{/number}","pulls_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/pulls{/number}","milestones_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/milestones{/number}","notifications_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/labels{/name}","releases_url":"https://api.github.com/repos/scottjab/sacrificial-integration-tests/releases{/id}","created_at":"2014-01-18T22:05:29Z","updated_at":"2014-01-18T22:29:23Z","pushed_at":"2014-01-18T22:28:51Z","git_url":"git://github.com/scottjab/sacrificial-integration-tests.git","ssh_url":"git@github.com:scottjab/sacrificial-integration-tests.git","clone_url":"https://github.com/scottjab/sacrificial-integration-tests.git","svn_url":"https://github.com/scottjab/sacrificial-integration-tests","homepage":null,"size":101,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"imhotepbot:master","ref":"master","sha":"4243fc3cd45edf4c04fd0d44a95931095e296ff9","user":{"login":"imhotepbot","id":3060316,"avatar_url":"https://avatars.githubusercontent.com/u/3060316?v=3","gravatar_id":"","url":"https://api.github.com/users/imhotepbot","html_url":"https://github.com/imhotepbot","followers_url":"https://api.github.com/users/imhotepbot/followers","following_url":"https://api.github.com/users/imhotepbot/following{/other_user}","gists_url":"https://api.github.com/users/imhotepbot/gists{/gist_id}","starred_url":"https://api.github.com/users/imhotepbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imhotepbot/subscriptions","organizations_url":"https://api.github.com/users/imhotepbot/orgs","repos_url":"https://api.github.com/users/imhotepbot/repos","events_url":"https://api.github.com/users/imhotepbot/events{/privacy}","received_events_url":"https://api.github.com/users/imhotepbot/received_events","type":"User","site_admin":false},"repo":{"id":15828799,"name":"sacrificial-integration-tests","full_name":"imhotepbot/sacrificial-integration-tests","owner":{"login":"imhotepbot","id":3060316,"avatar_url":"https://avatars.githubusercontent.com/u/3060316?v=3","gravatar_id":"","url":"https://api.github.com/users/imhotepbot","html_url":"https://github.com/imhotepbot","followers_url":"https://api.github.com/users/imhotepbot/followers","following_url":"https://api.github.com/users/imhotepbot/following{/other_user}","gists_url":"https://api.github.com/users/imhotepbot/gists{/gist_id}","starred_url":"https://api.github.com/users/imhotepbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/imhotepbot/subscriptions","organizations_url":"https://api.github.com/users/imhotepbot/orgs","repos_url":"https://api.github.com/users/imhotepbot/repos","events_url":"https://api.github.com/users/imhotepbot/events{/privacy}","received_events_url":"https://api.github.com/users/imhotepbot/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/imhotepbot/sacrificial-integration-tests","description":"Integration testing destination for imhotep.","fork":false,"url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests","forks_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/forks","keys_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/keys{/key_id}","collaborators_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/teams","hooks_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/hooks","issue_events_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/events{/number}","events_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/events","assignees_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/assignees{/user}","branches_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/branches{/branch}","tags_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/tags","blobs_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/git/refs{/sha}","trees_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/git/trees{/sha}","statuses_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/statuses/{sha}","languages_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/languages","stargazers_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/stargazers","contributors_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/contributors","subscribers_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/subscribers","subscription_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/subscription","commits_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/commits{/sha}","git_commits_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/git/commits{/sha}","comments_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/comments{/number}","issue_comment_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/comments{/number}","contents_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/contents/{+path}","compare_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/compare/{base}...{head}","merges_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/merges","archive_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/downloads","issues_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues{/number}","pulls_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls{/number}","milestones_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/milestones{/number}","notifications_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/labels{/name}","releases_url":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/releases{/id}","created_at":"2014-01-11T19:11:39Z","updated_at":"2014-01-11T21:48:37Z","pushed_at":"2014-01-11T21:38:07Z","git_url":"git://github.com/imhotepbot/sacrificial-integration-tests.git","ssh_url":"git@github.com:imhotepbot/sacrificial-integration-tests.git","clone_url":"https://github.com/imhotepbot/sacrificial-integration-tests.git","svn_url":"https://github.com/imhotepbot/sacrificial-integration-tests","homepage":null,"size":140,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":2,"forks":2,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2"},"html":{"href":"https://github.com/imhotepbot/sacrificial-integration-tests/pull/2"},"issue":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/2"},"comments":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/imhotepbot/sacrificial-integration-tests/statuses/38c3fa3970dbf608b0d4d3bb31504084915181c9"}}}}