You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/09/24 19:08:05 UTC

[26/50] git commit: [#6535] ticket:424 Fetch issue events from github

[#6535] ticket:424 Fetch issue events from github


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/2c831e31
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/2c831e31
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/2c831e31

Branch: refs/heads/cj/6422
Commit: 2c831e3156c91d135156c4d219952d7af4757522
Parents: 961b141
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 17 14:03:52 2013 +0300
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Thu Sep 19 14:46:51 2013 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/github/__init__.py  |  8 ++++++++
 .../forgeimporters/tests/github/test_extractor.py | 18 ++++++++++++++++++
 2 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2c831e31/ForgeImporters/forgeimporters/github/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/__init__.py b/ForgeImporters/forgeimporters/github/__init__.py
index 35bbff7..3d3caac 100644
--- a/ForgeImporters/forgeimporters/github/__init__.py
+++ b/ForgeImporters/forgeimporters/github/__init__.py
@@ -32,6 +32,7 @@ class GitHubProjectExtractor(base.ProjectExtractor):
             'issues': 'https://api.github.com/repos/{project_name}/issues',
         }
     POSSIBLE_STATES = ('opened', 'closed')
+    SUPPORTED_ISSUE_EVENTS = ('closed', 'reopened', 'assigned')
     NEXT_PAGE_URL_RE = re.compile(r'<([^>]*)>; rel="next"')
 
     def get_next_page_url(self, link):
@@ -83,3 +84,10 @@ class GitHubProjectExtractor(base.ProjectExtractor):
         comments = self.get_page(comments_url)
         for comment in comments:
             yield comment
+
+    def iter_events(self, issue):
+        events_url = issue['events_url']
+        events = self.get_page(events_url)
+        for event in events:
+            if event.get('event') in self.SUPPORTED_ISSUE_EVENTS:
+                yield event

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2c831e31/ForgeImporters/forgeimporters/tests/github/test_extractor.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/github/test_extractor.py b/ForgeImporters/forgeimporters/tests/github/test_extractor.py
index c7734fa..e29a533 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_extractor.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_extractor.py
@@ -46,6 +46,14 @@ class TestGitHubProjectExtractor(TestCase):
     ]
     ISSUE_COMMENTS = [u'hello', u'mocked_comment']
     ISSUE_COMMENTS_PAGE2 = [u'hello2', u'mocked_comment2']
+    ISSUE_EVENTS = [
+        {u'event': u'closed'},
+        {u'event': u'reopened'},
+    ]
+    ISSUE_EVENTS_PAGE2 = [
+        {u'event': u'assigned'},
+        {u'event': u'not-supported-event'},
+    ]
 
     def mocked_urlopen(self, url):
         headers = {}
@@ -63,6 +71,11 @@ class TestGitHubProjectExtractor(TestCase):
             headers = {'Link': '</comments?page=2>; rel="next"'}
         elif url.endswith('/comments?page=2'):
             response = StringIO(json.dumps(self.ISSUE_COMMENTS_PAGE2))
+        elif url.endswith('/events'):
+            response = StringIO(json.dumps(self.ISSUE_EVENTS))
+            headers = {'Link': '</events?page=2>; rel="next"'}
+        elif url.endswith('/events?page=2'):
+            response = StringIO(json.dumps(self.ISSUE_EVENTS_PAGE2))
 
         response.info = lambda: headers
         return response
@@ -95,3 +108,8 @@ class TestGitHubProjectExtractor(TestCase):
         mock_issue = {'comments_url': '/issues/1/comments'}
         comments = list(self.extractor.iter_comments(mock_issue))
         self.assertEqual(comments, self.ISSUE_COMMENTS + self.ISSUE_COMMENTS_PAGE2)
+
+    def test_iter_events(self):
+        mock_issue = {'events_url': '/issues/1/events'}
+        events = list(self.extractor.iter_events(mock_issue))
+        self.assertEqual(events, self.ISSUE_EVENTS + self.ISSUE_EVENTS_PAGE2[:1])