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/11/14 18:36:53 UTC

[32/43] git commit: [#6656] ticket:437 Use OAuth token for github api calls

[#6656] ticket:437 Use OAuth token for github api calls


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

Branch: refs/heads/cj/6836
Commit: d396c9e6db9e45c07465d5d73375068787c3c594
Parents: 2c6339a
Author: Igor Bondarenko <je...@gmail.com>
Authored: Fri Oct 25 11:15:52 2013 +0300
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Nov 13 20:43:45 2013 +0000

----------------------------------------------------------------------
 .../forgeimporters/github/__init__.py           | 19 +++++++++++++--
 .../tests/github/test_extractor.py              | 25 +++++++++++++++++++-
 2 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d396c9e6/ForgeImporters/forgeimporters/github/__init__.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/github/__init__.py b/ForgeImporters/forgeimporters/github/__init__.py
index 2963067..5726326 100644
--- a/ForgeImporters/forgeimporters/github/__init__.py
+++ b/ForgeImporters/forgeimporters/github/__init__.py
@@ -18,8 +18,6 @@
 import re
 import logging
 import json
-import urllib
-import urllib2
 
 from forgeimporters import base
 
@@ -36,6 +34,23 @@ class GitHubProjectExtractor(base.ProjectExtractor):
     SUPPORTED_ISSUE_EVENTS = ('closed', 'reopened', 'assigned')
     NEXT_PAGE_URL_RE = re.compile(r'<([^>]*)>; rel="next"')
 
+    def __init__(self, *args, **kw):
+        self.token = None
+        user = kw.pop('user', None)
+        if user:
+            self.token = user.get_tool_data('GitHubProjectExtractor', 'token')
+        super(GitHubProjectExtractor, self).__init__(*args, **kw)
+
+    def add_token(self, url):
+        if self.token:
+            glue = '&' if '?' in url else '?'
+            url += glue + 'access_token=' + self.token
+        return url
+
+    def urlopen(self, url, **kw):
+        url = self.add_token(url)
+        return super(GitHubProjectExtractor, self).urlopen(url, **kw)
+
     def get_next_page_url(self, link):
         if not link:
             return

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/d396c9e6/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 11601a5..a26438a 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_extractor.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_extractor.py
@@ -18,6 +18,8 @@
 import json
 from unittest import TestCase
 
+from mock import patch, Mock
+
 from ... import github
 
 # Can't use cStringIO here, because we cannot set attributes or subclass it,
@@ -84,6 +86,7 @@ class TestGitHubProjectExtractor(TestCase):
     def setUp(self):
         self.extractor = github.GitHubProjectExtractor('test_project')
         self.extractor.urlopen = self.mocked_urlopen
+
     def test_get_next_page_url(self):
         self.assertIsNone(self.extractor.get_next_page_url(None))
         self.assertIsNone(self.extractor.get_next_page_url(''))
@@ -97,7 +100,7 @@ class TestGitHubProjectExtractor(TestCase):
 
         link = '<https://api.github.com/repositories/8560576/issues?state=open&page=1>; rel="prev"'
         self.assertIsNone(self.extractor.get_next_page_url(link))
-        
+
     def test_get_summary(self):
         self.assertEqual(self.extractor.get_summary(), 'project description')
 
@@ -126,3 +129,23 @@ class TestGitHubProjectExtractor(TestCase):
 
     def test_get_wiki_url(self):
         self.assertEqual(self.extractor.get_page_url('wiki_url'), 'https://github.com/test_project.wiki')
+
+    @patch('forgeimporters.base.h.urlopen')
+    def test_urlopen(self, urlopen):
+        e = github.GitHubProjectExtractor('test_project')
+        url = 'https://github.com/u/p/'
+        e.urlopen(url)
+        request = urlopen.call_args[0][0]
+        self.assertEqual(request.get_full_url(), url)
+
+        user = Mock()
+        user.get_tool_data.return_value = 'abc'
+        e = github.GitHubProjectExtractor('test_project', user=user)
+        e.urlopen(url)
+        request = urlopen.call_args[0][0]
+        self.assertEqual(request.get_full_url(), url + '?access_token=abc')
+
+        url = 'https://github.com/u/p/?p=1'
+        e.urlopen(url)
+        request = urlopen.call_args[0][0]
+        self.assertEqual(request.get_full_url(), url + '&access_token=abc')