Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: my_activity.py

Issue 1176243002: my_activity.py: update to use oauth for projecthosting (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« auth.py ('K') | « auth.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: my_activity.py
diff --git a/my_activity.py b/my_activity.py
index 8468772cf978f41bdc275cdbf935e781b260e203..444851b3f9f9716ca533c758675a6495b0447de2 100755
--- a/my_activity.py
+++ b/my_activity.py
@@ -42,6 +42,9 @@ import gerrit_util
import rietveld
from third_party import upload
+import auth
+from third_party import httplib2
+
try:
from dateutil.relativedelta import relativedelta # pylint: disable=F0401
except ImportError:
@@ -461,107 +464,51 @@ class MyActivity(object):
})
return ret
- def google_code_issue_search(self, instance):
- time_format = '%Y-%m-%dT%T'
- # See http://code.google.com/p/support/wiki/IssueTrackerAPI
- # q=<owner>@chromium.org does a full text search for <owner>@chromium.org.
- # This will accept the issue if owner is the owner or in the cc list. Might
- # have some false positives, though.
-
- # Don't filter normally on modified_before because it can filter out things
- # that were modified in the time period and then modified again after it.
- gcode_url = ('https://code.google.com/feeds/issues/p/%s/issues/full' %
- instance['name'])
-
- gcode_data = urllib.urlencode({
- 'alt': 'json',
- 'max-results': '100000',
- 'q': '%s' % self.user,
- 'published-max': self.modified_before.strftime(time_format),
- 'updated-min': self.modified_after.strftime(time_format),
- })
-
- opener = urllib2.build_opener()
- if self.google_code_auth_token:
- opener.addheaders = [('Authorization', 'GoogleLogin auth=%s' %
- self.google_code_auth_token)]
- gcode_json = None
- try:
- gcode_get = opener.open(gcode_url + '?' + gcode_data)
- gcode_json = json.load(gcode_get)
- gcode_get.close()
- except urllib2.HTTPError, _:
- print 'Unable to access ' + instance['name'] + ' issue tracker.'
-
- if not gcode_json or 'entry' not in gcode_json['feed']:
- return []
-
- issues = gcode_json['feed']['entry']
- issues = map(partial(self.process_google_code_issue, instance), issues)
- issues = filter(self.filter_issue, issues)
- issues = sorted(issues, key=lambda i: i['modified'], reverse=True)
- return issues
-
- def process_google_code_issue(self, project, issue):
- ret = {}
- ret['created'] = datetime_from_google_code(issue['published']['$t'])
- ret['modified'] = datetime_from_google_code(issue['updated']['$t'])
-
- ret['owner'] = ''
- if 'issues$owner' in issue:
- ret['owner'] = issue['issues$owner']['issues$username']['$t']
- ret['author'] = issue['author'][0]['name']['$t']
-
- if 'shorturl' in project:
- issue_id = issue['id']['$t']
- issue_id = issue_id[issue_id.rfind('/') + 1:]
- ret['url'] = 'http://%s/%d' % (project['shorturl'], int(issue_id))
- else:
- issue_url = issue['link'][1]
- if issue_url['rel'] != 'alternate':
- raise RuntimeError
- ret['url'] = issue_url['href']
- ret['header'] = issue['title']['$t']
-
- ret['replies'] = self.get_google_code_issue_replies(issue)
- return ret
-
- def get_google_code_issue_replies(self, issue):
- """Get all the comments on the issue."""
- replies_url = issue['link'][0]
- if replies_url['rel'] != 'replies':
- raise RuntimeError
-
- replies_data = urllib.urlencode({
- 'alt': 'json',
- 'fields': 'entry(published,author,content)',
+ def project_hosting_issue_search(self, instance):
+ auth_config = auth.extract_auth_config_from_options(self.options)
+ authenticator = auth.get_authenticator_for_host(
+ "https://code.google.com", auth_config)
Vadim Sh. 2015/06/11 01:37:32 just "code.google.com" here should work too
seanmccullough 2015/06/11 02:05:22 Done.
+ http = authenticator.authorize(httplib2.Http())
+ url = "https://www.googleapis.com/projecthosting/v2/projects/%s/issues" % (
+ instance["name"])
+ epoch = datetime.utcfromtimestamp(0)
+ user_str = '%s@chromium.org' % self.user
+
+ query_data = urllib.urlencode({
+ 'maxResults': 10000,
+ 'q': '%s' % user_str,
Vadim Sh. 2015/06/11 01:37:31 'q': user_str
seanmccullough 2015/06/11 02:05:22 Done.
+ 'publishedMax': '%d' % (self.modified_before - epoch).total_seconds(),
+ 'updatedMin': '%d' % (self.modified_after - epoch).total_seconds(),
})
-
- opener = urllib2.build_opener()
- opener.addheaders = [('Authorization', 'GoogleLogin auth=%s' %
- self.google_code_auth_token)]
- try:
- replies_get = opener.open(replies_url['href'] + '?' + replies_data)
- except urllib2.HTTPError, _:
+ url = url + '?' + query_data
+ _, body = http.request(url)
Vadim Sh. 2015/06/11 01:37:31 this thing will raise auth.AuthenticationError if
seanmccullough 2015/06/11 02:05:22 Done.
+ content = json.loads(body)
+ if not content:
+ print "Unable to parse %s response from projecthosting." % (
+ instance["name"])
return []
- replies_json = json.load(replies_get)
- replies_get.close()
- return self.process_google_code_issue_replies(replies_json)
+ issues = []
+ if 'items' in content:
+ items = content['items']
+ for item in items:
+ issue = {
+ "header": item["title"],
+ "created": item["published"],
+ "modified": item["updated"],
+ "author": item["author"]["name"],
+ "url": "https://code.google.com/p/%s/issues/detail?id=%s" % (
+ instance["name"], item["id"]),
+ "comments": []
+ }
+ if 'owner' in item:
+ issue['owner'] = item['owner']['name']
+ else:
+ issue['owner'] = 'None'
+ if issue['owner'] == user_str or issue['author'] == user_str:
+ issues.append(issue)
- @staticmethod
- def process_google_code_issue_replies(replies):
- if 'entry' not in replies['feed']:
- return []
-
- ret = []
- for entry in replies['feed']['entry']:
- e = {}
- e['created'] = datetime_from_google_code(entry['published']['$t'])
- e['content'] = entry['content']['$t']
- e['author'] = entry['author'][0]['name']['$t']
- ret.append(e)
- return ret
+ return issues
def print_heading(self, heading):
print
@@ -682,7 +629,7 @@ class MyActivity(object):
def get_issues(self):
for project in google_code_projects:
- self.issues += self.google_code_issue_search(project)
+ self.issues += self.project_hosting_issue_search(project)
def print_issues(self):
if self.issues:
« auth.py ('K') | « auth.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698