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()
|