|
8 | 8 | import ConfigParser
|
9 | 9 | import contextlib
|
10 | 10 | import gzip
|
| 11 | +import re |
11 | 12 | try:
|
12 | 13 | import simplejson as json
|
13 | 14 | except:
|
14 | 15 | import json
|
15 | 16 | from StringIO import StringIO
|
16 | 17 | import urllib2
|
17 | 18 |
|
18 |
| -from travisciapiprovider import TravisCiApiProvider |
19 | 19 | import eventhandler
|
20 | 20 |
|
21 | 21 |
|
22 | 22 | class APIProvider(object):
|
23 | 23 | def __init__(self, payload, user):
|
24 |
| - (owner, repo, issue) = extract_globals_from_payload(payload) |
| 24 | + (owner, repo, issue) = self._extract_globals(payload) |
25 | 25 | self.owner = owner
|
26 | 26 | self.repo = repo
|
27 | 27 | self.issue = issue
|
28 | 28 | self.user = user
|
29 | 29 |
|
| 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 | + |
30 | 45 | def is_new_contributor(self, username):
|
31 | 46 | raise NotImplementedError
|
32 | 47 |
|
@@ -54,6 +69,13 @@ def get_pull(self):
|
54 | 69 | def get_page_content(self, url):
|
55 | 70 | raise NotImplementedError
|
56 | 71 |
|
| 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 | + |
57 | 79 |
|
58 | 80 | class GithubAPIProvider(APIProvider):
|
59 | 81 | BASE_URL = "https://api.github.com/repos/"
|
@@ -215,25 +237,6 @@ def get_page_content(self, url):
|
215 | 237 | warning_summary = warning_header + '\n\n%s'
|
216 | 238 |
|
217 | 239 |
|
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 |
| - |
237 | 240 | def handle_payload(api, payload, handlers=None):
|
238 | 241 | if not handlers:
|
239 | 242 | modules, handlers = eventhandler.get_handlers()
|
|
0 commit comments