Skip to content

Commit 2cc3e51

Browse files
committed
Integrate travis stuff and payload globals extractor into APIProvider
1 parent a536322 commit 2cc3e51

File tree

6 files changed

+31
-40
lines changed

6 files changed

+31
-40
lines changed

eventhandler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ def warn(self, msg):
4646
_warnings += [msg]
4747

4848
def is_open_pr(self, payload):
49-
return (payload['issue']['state'] == 'open' and
50-
'pull_request' in payload['issue'])
49+
return ('pull_request' in payload['issue'] and
50+
payload['issue']['state'] == 'open')
5151

5252

5353
def reset_test_state():

handlers/status_update/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def on_pr_closed(self, api, payload):
4646
api.remove_label("S-awaiting-merge")
4747

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"compare_url": "https://github.com/servo/servo/pull/11000"
3+
}

handlers/status_update/tests/build_status.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"labels": []
99
},
1010
"payload": {
11-
"target_url": "https://travis-ci.org/servo/servo/builds/120670455",
11+
"target_url": "handlers/status_update/tests/travis-ci.org/build.json",
1212
"context": "continuous-integration/travis-ci/pr",
1313
"repository": {
1414
"owner": {

newpr.py

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,40 @@
88
import ConfigParser
99
import contextlib
1010
import gzip
11+
import re
1112
try:
1213
import simplejson as json
1314
except:
1415
import json
1516
from StringIO import StringIO
1617
import urllib2
1718

18-
from travisciapiprovider import TravisCiApiProvider
1919
import eventhandler
2020

2121

2222
class APIProvider(object):
2323
def __init__(self, payload, user):
24-
(owner, repo, issue) = extract_globals_from_payload(payload)
24+
(owner, repo, issue) = self._extract_globals(payload)
2525
self.owner = owner
2626
self.repo = repo
2727
self.issue = issue
2828
self.user = user
2929

30+
def _extract_globals(self, payload):
31+
if 'context' in payload:
32+
owner = payload['repository']['owner']['login']
33+
repo = payload['repository']['name']
34+
issue = self.get_pull_number_from_travis(payload['target_url'])
35+
elif payload['action'] == 'created' or payload['action'] == 'labeled':
36+
owner = payload['repository']['owner']['login']
37+
repo = payload['repository']['name']
38+
issue = str(payload['issue']['number'])
39+
else:
40+
owner = payload['pull_request']['base']['repo']['owner']['login']
41+
repo = payload['pull_request']['base']['repo']['name']
42+
issue = str(payload["number"])
43+
return (owner, repo, issue)
44+
3045
def is_new_contributor(self, username):
3146
raise NotImplementedError
3247

@@ -54,6 +69,13 @@ def get_pull(self):
5469
def get_page_content(self, url):
5570
raise NotImplementedError
5671

72+
def get_pull_number_from_travis(self, target_url):
73+
regex = r'(.*)(travis-ci.org/).*(build.*)'
74+
build_url = re.sub(regex, r'\1api.\2\3', str(target_url))
75+
build_data = self.get_page_content(build_url)
76+
build_json = json.loads(build_data)
77+
return int(build_json['compare_url'].split('/')[-1])
78+
5779

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

217239

218-
def extract_globals_from_payload(payload):
219-
if 'context' in payload:
220-
owner = payload['repository']['owner']['login']
221-
repo = payload['repository']['name']
222-
travis = TravisCiApiProvider()
223-
build_number = payload['target_url'].split('/')[-1]
224-
build = travis.get_build(build_number)
225-
issue = travis.get_pull_request_number(build)
226-
elif payload['action'] == 'created' or payload['action'] == 'labeled':
227-
owner = payload['repository']['owner']['login']
228-
repo = payload['repository']['name']
229-
issue = str(payload['issue']['number'])
230-
else:
231-
owner = payload['pull_request']['base']['repo']['owner']['login']
232-
repo = payload['pull_request']['base']['repo']['name']
233-
issue = str(payload["number"])
234-
return (owner, repo, issue)
235-
236-
237240
def handle_payload(api, payload, handlers=None):
238241
if not handlers:
239242
modules, handlers = eventhandler.get_handlers()

travisciapiprovider.py

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)