Index: chromite/lib/tracker_access.py |
diff --git a/chromite/lib/tracker_access.py b/chromite/lib/tracker_access.py |
deleted file mode 100644 |
index 18d17ad87c6d0a21c720bb985dff4820f63f68ed..0000000000000000000000000000000000000000 |
--- a/chromite/lib/tracker_access.py |
+++ /dev/null |
@@ -1,166 +0,0 @@ |
-#!/usr/bin/python |
- |
-# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Helper functions for accessing the issue tracker in a pythonic way.""" |
- |
-import os.path |
-import pprint |
-import sys |
- |
-# import the GData libraries |
-import gdata.client |
-import gdata.projecthosting.client |
- |
-DEFAULT_TRACKER_SOURCE = "chromite-tracker-access-1.0" |
-VERBOSE = True # Set to True to get extra debug info... |
- |
-class TrackerAccess(object): |
- """Class for accessing the tracker on code.google.com.""" |
- |
- def __init__(self, email="", password="", |
- tracker_source=DEFAULT_TRACKER_SOURCE): |
- """TrackerAccess constructor. |
- |
- Args: |
- email: The email address to Login with; may be "" for anonymous access. |
- password: The password that goes with the email address; may be "" if |
- the email is "". |
- tracker_source: A string describing this program. This can be anything |
- you like but should should give some indication of which |
- app is making the request. |
- """ |
- # Save parameters... |
- self._email = email |
- self._password = password |
- self._tracker_source = tracker_source |
- |
- # This will be initted on first login... |
- self._tracker_client = None |
- |
- def Login(self): |
- """Login, if needed. This may be safely called more than once. |
- |
- Commands will call this function as their first line, so the client |
- of this class need not call it themselves unless trying to debug login |
- problems. |
- |
- This function should be called even if we're accessing anonymously. |
- """ |
- # Bail immediately if we've already logged in... |
- if self._tracker_client is not None: |
- return |
- |
- self._tracker_client = gdata.projecthosting.client.ProjectHostingClient() |
- if self._email and self._password: |
- self._tracker_client.client_login(self._email, self._password, |
- source=self._tracker_source, |
- service="code", account_type='GOOGLE') |
- |
- def GetKeyedLabels(self, project_name, issue_id): |
- """Get labels of the form "Key-Value" attached to the given issue. |
- |
- Any labels that don't have a dash in them are ignored. |
- |
- Args: |
- project_name: The tracker project to query. |
- issue_id: The ID of the issue to query; should be an int but a string |
- will probably work too. |
- |
- Returns: |
- A dictionary mapping key/value pairs from the issue's labels, like: |
- |
- {'Area': 'Build', |
- 'Iteration': '15', |
- 'Mstone': 'R9.x', |
- 'Pri': '1', |
- 'Type': 'Bug'} |
- """ |
- # Login if needed... |
- self.Login() |
- |
- # Construct the query... |
- query = gdata.projecthosting.client.Query(issue_id=issue_id) |
- try: |
- feed = self._tracker_client.get_issues(project_name, query=query) |
- except gdata.client.RequestError, e: |
- if VERBOSE: |
- print >>sys.stderr, "ERROR: Unable to access bug %s:%s: %s" % ( |
- project_name, issue_id, str(e)) |
- return {} |
- |
- # There should be exactly one result... |
- assert len(feed.entry) == 1, "Expected exactly 1 result" |
- (entry,) = feed.entry |
- |
- # We only care about labels that look like: Key-Value |
- # We'll return a dictionary of those. |
- keyed_labels = {} |
- for label in entry.label: |
- if "-" in label.text: |
- label_key, label_val = label.text.split("-", 1) |
- keyed_labels[label_key] = label_val |
- |
- return keyed_labels |
- |
- |
-def _TestGetKeyedLabels(project_name, email, passwordFile, *bug_ids): |
- """Test code for GetKeyedLabels(). |
- |
- Args: |
- project_name: The name of the project we're looking at. |
- email: The email address to use to login. May be "" |
- passwordFile: A file containing the password for the email address. |
- May be "" if email is "" for anon access. |
- bug_ids: A list of bug IDs to query. |
- """ |
- # If password was specified as a file, read it. |
- if passwordFile: |
- password = open(passwordFile, "r").read().strip() |
- else: |
- password = "" |
- |
- ta = TrackerAccess(email, password) |
- |
- if not bug_ids: |
- print "No bugs were specified" |
- else: |
- for bug_id in bug_ids: |
- print bug_id, ta.GetKeyedLabels(project_name, int(bug_id)) |
- |
- |
-def _DoHelp(commands, *args): |
- """Print help for the script.""" |
- |
- if len(args) >= 2 and args[0] == "help" and args[1] in commands: |
- # If called with arguments 'help' and 'command', show that commands's doc. |
- command_name = args[1] |
- print commands[command_name].__doc__ |
- else: |
- # Something else: show generic help... |
- print ( |
- "Usage %s <command> <command args>\n" |
- "\n" |
- "Known commands: \n" |
- " %s\n" |
- ) % (sys.argv[0], pprint.pformat(["help"] + sorted(commands))) |
- |
- |
-def main(): |
- """Main function of the script.""" |
- |
- commands = { |
- "TestGetKeyedLabels": _TestGetKeyedLabels, |
- } |
- |
- if len(sys.argv) <= 1 or sys.argv[1] not in commands: |
- # Argument 1 isn't in list of commands; show help and pass all arguments... |
- _DoHelp(commands, *sys.argv[1:]) |
- else: |
- command_name = sys.argv[1] |
- commands[command_name](*sys.argv[2:]) |
- |
-if __name__ == "__main__": |
- main() |