~elopio/ubuntuone-launchpad-scripts/count-tags

1 by Joshua Hoover
Initial import
1
#!/usr/bin/env python
2
from __future__ import with_statement
3
4
import sys
5
6
from BeautifulSoup import BeautifulSoup
7
from ClientCookie import Cookie
8
from ClientCookie import CookieJar
9
from launchpadlib.credentials import Credentials
10
from launchpadlib.launchpad import EDGE_SERVICE_ROOT
11
from launchpadlib.launchpad import Launchpad
12
from launchpadlib.launchpad import STAGING_SERVICE_ROOT
13
from mechanize import Browser
14
from mechanize import FormNotFoundError
15
import os
16
from urlparse import urljoin
17
try:
18
    from xml.etree import ElementTree
19
except ImportError:
20
    from elementtree import ElementTree
21
import gdata.spreadsheet.service
22
import gdata.service
23
import atom.service
24
import gdata.spreadsheet
25
import atom
26
import gdata.spreadsheet.service
27
28
SERVICE_ROOT = EDGE_SERVICE_ROOT
29
#SERVICE_ROOT = STAGING_SERVICE_ROOT
30
31
home = os.path.expanduser("~")
32
cachedir = os.path.join(home, ".launchpadlib/cache/")
33
credentialfile = os.path.join(home, ".launchpadlib/credentials")
34
35
if os.path.exists(credentialfile):
36
    credentials = Credentials()
37
    with file(credentialfile) as f:
38
        credentials.load(f)
39
    launchpad = Launchpad(credentials, SERVICE_ROOT)
40
else:
41
    launchpad = Launchpad.get_token_and_login('joshuahoover-taskstatus', SERVICE_ROOT, cachedir)
42
    launchpad.credentials.save(file(credentialfile, "w"))
43
44
me = launchpad.me
45
print "Hello %s, lets get started." % me.name
46
47
# This means that we search across the whole ubuntuone project
48
# suite, including all sub projects.
49
ubunet = launchpad.projects['ubuntuone']
50
counter = 1
51
52
TEST_SPREADSHEET_KEY = 'riXzoej2Qo9VVokUoXpKxaA'
53
WHOS_WORKING_ON_WHAT_KEY = 'p-Ix7K2HxhBAVFobBY53YQg'
54
SPREADSHEET_KEY = WHOS_WORKING_ON_WHAT_KEY
55
56
def authenticate_to_google_spreadsheet():
57
    """Get an authenticated  google data client object."""
58
    gd_client = gdata.spreadsheet.service.SpreadsheetsService()
59
    # A multi session token
60
    gd_client.SetAuthSubToken('CN2z5oKlCRCfqfig-v____8B')
61
    return gd_client
62
63
def get_auth_sub_url():
64
    """Generate a URL that will return a temp auth token to localhost."""
65
    next = 'http://localhost'
66
    scope = 'http://spreadsheets.google.com/feeds/'
67
    domain = 'canonical.com'
68
    secure = False
69
    session = True
70
    gd_client = gdata.spreadsheet.service.SpreadsheetsService()
71
    return gd_client.GenerateAuthSubURL(next, scope, secure, session, domain);
72
73
def delete_row(feed, index):
74
    gd_client.DeleteRow(feed.entry[index])
75
    print 'Deleted row: ' + str(index)
76
77
def insert_task_status_rows(tasks, spreadsheet_key, worksheet_id, spreadsheet_list):
78
    for task in tasks:
79
        task_name, status, username, importance, milestone = '', '', '', '', ''
80
        row_data = {}
2 by Joshua Hoover
Cleaned up kanban.py to run unattended
81
        task_name = unicode(task.title)
82
        status = unicode(task.status)
83
        importance = unicode(task.importance)
1 by Joshua Hoover
Initial import
84
        # Remove spaces for Google to accept as column label
85
        status = status.replace(' ', '').lower()
86
87
        if task.assignee:
88
            username = str(task.assignee.name)
89
        else:
90
            username = 'Unassigned'
91
92
        if task.milestone:
93
            milestone = str(task.milestone.title)
94
95
        task_name = importance + ' - ' + task_name
96
            
97
        row_data['name'] = username
98
        row_data['storyid'] = ''
99
        row_data[status] = task_name
100
        row_data['milestone'] = milestone
101
102
        entry = gd_client.InsertRow(row_data, spreadsheet_key, worksheet_id)
103
        if isinstance(entry, spreadsheet_list):
104
            print '\n***************************************'
105
            print row_data
106
            print '***************************************'
107
108
def get_this_spreadsheet_worksheet_id(feed, sheet_name):
109
    for i, entry in enumerate(feed.entry):
110
        if entry.title.text == sheet_name:
111
            return entry.id.text.rsplit('/', 1)[1]
112
113
gd_client = authenticate_to_google_spreadsheet()
114
115
# get the list of worksheets
116
feed = gd_client.GetWorksheetsFeed(SPREADSHEET_KEY)
117
118
# get worksheet id's for task status tab
119
task_status_tab = get_this_spreadsheet_worksheet_id(feed, 'Task Status')
120
if task_status_tab is None:
121
    print "Error finding the test data tab in the spreadsheet."
122
task_worksheet = gd_client.GetListFeed(SPREADSHEET_KEY, task_status_tab)
123
2 by Joshua Hoover
Cleaned up kanban.py to run unattended
124
feed = gd_client.GetListFeed(SPREADSHEET_KEY, task_status_tab)
125
for i, entry in enumerate(feed.entry):
126
    if i > 0:
127
        delete_row(feed, i)
1 by Joshua Hoover
Initial import
128
2 by Joshua Hoover
Cleaned up kanban.py to run unattended
129
tag = 'ubuntuone-karmic' 
130
tasks = ubunet.searchTasks(tags=tag)
1 by Joshua Hoover
Initial import
131
insert_task_status_rows(tasks, SPREADSHEET_KEY, task_status_tab, gdata.spreadsheet.SpreadsheetsList)