Skip to content

Commit

Permalink
Integrate travis stuff and payload globals extractor into APIProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
wafflespeanut committed May 29, 2016
1 parent a536322 commit 398afd9
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 40 deletions.
4 changes: 2 additions & 2 deletions eventhandler.py
Expand Up @@ -46,8 +46,8 @@ def warn(self, msg):
_warnings += [msg]

def is_open_pr(self, payload):
return (payload['issue']['state'] == 'open' and
'pull_request' in payload['issue'])
return ('pull_request' in payload['issue'] and
payload['issue']['state'] == 'open')


def reset_test_state():
Expand Down
2 changes: 1 addition & 1 deletion handlers/status_update/__init__.py
Expand Up @@ -46,7 +46,7 @@ def on_pr_closed(self, api, payload):
api.remove_label("S-awaiting-merge")

def on_build_status(self, api, payload):
if payload['context'] == 'continuous-integration/travis-ci/pr':
if 'travis' in payload['context']:
if payload['state'] == 'failure' or payload['state'] == 'error':
api.add_label("S-needs-code-changes")

Expand Down
3 changes: 3 additions & 0 deletions handlers/status_update/tests/api.travis-ci.org/build.json
@@ -0,0 +1,3 @@
{
"compare_url": "https://github.com/servo/servo/pull/11000"
}
2 changes: 1 addition & 1 deletion handlers/status_update/tests/build_status.json
Expand Up @@ -8,7 +8,7 @@
"labels": []
},
"payload": {
"target_url": "https://travis-ci.org/servo/servo/builds/120670455",
"target_url": "handlers/status_update/tests/travis-ci.org/build.json",
"context": "continuous-integration/travis-ci/pr",
"repository": {
"owner": {
Expand Down
45 changes: 24 additions & 21 deletions newpr.py
Expand Up @@ -8,25 +8,40 @@
import ConfigParser
import contextlib
import gzip
import re
try:
import simplejson as json
except:
import json
from StringIO import StringIO
import urllib2

from travisciapiprovider import TravisCiApiProvider
import eventhandler


class APIProvider(object):
def __init__(self, payload, user):
(owner, repo, issue) = extract_globals_from_payload(payload)
(owner, repo, issue) = self._extract_globals(payload)
self.owner = owner
self.repo = repo
self.issue = issue
self.user = user

def _extract_globals(self, payload):
if 'context' in payload:
owner = payload['repository']['owner']['login']
repo = payload['repository']['name']
issue = self.get_pr_number_from_travis_payload(payload['target_url'])
elif payload['action'] == 'created' or payload['action'] == 'labeled':
owner = payload['repository']['owner']['login']
repo = payload['repository']['name']
issue = str(payload['issue']['number'])
else:
owner = payload['pull_request']['base']['repo']['owner']['login']
repo = payload['pull_request']['base']['repo']['name']
issue = str(payload["number"])
return (owner, repo, issue)

def is_new_contributor(self, username):
raise NotImplementedError

Expand Down Expand Up @@ -54,6 +69,13 @@ def get_pull(self):
def get_page_content(self, url):
raise NotImplementedError

def get_pr_number_from_travis_payload(self, target_url):
regex = r'(.*)(travis-ci.org/).*(build.*)'
build_url = re.sub(regex, r'\1api.\2\3', str(target_url))
build_data = self.get_page_content(build_url)
build_json = json.loads(build_data)
return int(build_json['compare_url'].split('/')[-1])


class GithubAPIProvider(APIProvider):
BASE_URL = "https://api.github.com/repos/"
Expand Down Expand Up @@ -215,25 +237,6 @@ def get_page_content(self, url):
warning_summary = warning_header + '\n\n%s'


def extract_globals_from_payload(payload):
if 'context' in payload:
owner = payload['repository']['owner']['login']
repo = payload['repository']['name']
travis = TravisCiApiProvider()
build_number = payload['target_url'].split('/')[-1]
build = travis.get_build(build_number)
issue = travis.get_pull_request_number(build)
elif payload['action'] == 'created' or payload['action'] == 'labeled':
owner = payload['repository']['owner']['login']
repo = payload['repository']['name']
issue = str(payload['issue']['number'])
else:
owner = payload['pull_request']['base']['repo']['owner']['login']
repo = payload['pull_request']['base']['repo']['name']
issue = str(payload["number"])
return (owner, repo, issue)


def handle_payload(api, payload, handlers=None):
if not handlers:
modules, handlers = eventhandler.get_handlers()
Expand Down
15 changes: 0 additions & 15 deletions travisciapiprovider.py

This file was deleted.

0 comments on commit 398afd9

Please sign in to comment.