~mabac/launchpad-work-items-tracker/fix-none-whiteboard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python

import datetime
import optparse
import random

import report_tools

optparser = optparse.OptionParser()
optparser.add_option('-d', '--database',
    help='Path to database', dest='database', metavar='PATH')

(opts, args) = optparser.parse_args()
if not opts.database:
    optparser.error('No database given')

store = report_tools.get_store(opts.database)

result = store.execute('SELECT max(date) FROM work_items')
(last_date,) = result.get_one()

result = store.execute('SELECT w.description, w.spec, w.status, w.assignee, w.milestone FROM work_items w WHERE date = ?', (last_date,))
workitems = {}
for desc, spec, status, assignee, milestone in result:
    workitems[desc] = dict(spec=spec, status=status, assignee=assignee, milestone=milestone)

def date_db_to_python(date):
    year, month, day = map(int, date.split('-'))
    return datetime.date(year, month, day)

def date_python_to_db(d):
    '''Turn an ordinal date into a string'''
    return d.strftime('%Y-%m-%d')

def change_status(status):
    if status == "todo":
        return random.choice(["inprogress", "done", "postponed", "blocked"])
    if status == "inprogress":
        return random.choice(["done", "postponed", "blocked"])
    if status == "blocked":
        return random.choice(["done", "inprogress", "postponed"])
    return status

def complete_some_items(workitems):
    for desc in workitems:
        if random.random() < 0.02:
            workitems[desc]["status"] = change_status(workitems[desc]["status"])


def save_workitems(workitems, date):
    for desc, info in workitems.items():
        result = store.execute('INSERT INTO work_items VALUES (?, ?, ?, ?, ?, ?)',
                (desc, info["spec"], info["status"], info["assignee"],
                    info["milestone"], date_python_to_db(date)))

new_date = date_db_to_python(last_date)
for i in range(20):
    new_date = new_date + datetime.timedelta(days=1)
    complete_some_items(workitems)
    print new_date
    save_workitems(workitems, new_date)

db.commit()