1
# -*- coding: UTF-8 -*-
5
@author: Aurélien Gâteau <aurelien.gateau@free.fr>
11
from completers import ProjectCompleter
13
SEVERITY_PROPERTY_NAME = "severity"
14
LIKELIHOOD_PROPERTY_NAME = "likelihood"
15
BUG_PROPERTY_NAME = "bug"
16
PROPERTY_NAMES = SEVERITY_PROPERTY_NAME, LIKELIHOOD_PROPERTY_NAME, BUG_PROPERTY_NAME
21
(3, "Aesthetic issues"),
22
(4, "Balancing: Enables degenerate usage strategies that harm the experience"),
23
(5, "Minor usability: Impairs usability in secondary scenarios"),
24
(6, "Major usability: Impairs usability in key scenarios"),
25
(7, "Crash: Bug causes crash or data loss. Asserts in the Debug release"),
29
(1, "Will affect almost no one"),
30
(2, "Will only affect a few users"),
31
(3, "Will affect average number of users"),
32
(4, "Will affect most users"),
33
(5, "Will affect all users"),
36
def computeUrgency(keywordDict):
37
likelihood = keywordDict[LIKELIHOOD_PROPERTY_NAME]
38
severity = keywordDict[SEVERITY_PROPERTY_NAME]
39
maxUrgency = LIKELIHOOD_LIST[-1][0] * SEVERITY_LIST[-1][0]
40
return 100 * likelihood * severity / maxUrgency
43
def editBugKeywords(keywordDict):
44
severity = keywordDict.get(SEVERITY_PROPERTY_NAME, None)
45
likelihood = keywordDict.get(LIKELIHOOD_PROPERTY_NAME, None)
46
bug = keywordDict.get(BUG_PROPERTY_NAME, None)
48
severity = tui.selectFromList("Severity", SEVERITY_LIST, severity)
49
likelihood = tui.selectFromList("Likelihood", LIKELIHOOD_LIST, likelihood)
50
bug = tui.enterInt("bug", bug)
52
keywordDict[BUG_PROPERTY_NAME] = bug
55
keywordDict[SEVERITY_PROPERTY_NAME] = severity
58
keywordDict[LIKELIHOOD_PROPERTY_NAME] = likelihood
63
for name in PROPERTY_NAMES:
64
dbutils.getOrCreateKeyword(name, interactive=False)
67
def do_bug_add(self, line):
68
"""Add a bug-type task. Will create a task and ask additional info.
69
bug_add <project_name> [@<keyword1>] [@<keyword2>] <Bug description>
71
projectName, title, keywordDict = parseutils.parseLine(line)
73
task = dbutils.addTask(projectName, title, keywordDict)
75
tui.reinjectInRawInput(u"bug_add " + line)
78
editBugKeywords(keywordDict)
79
task.setKeywordDict(keywordDict)
81
task.urgency = computeUrgency(keywordDict)
83
print "Added bug '%s' (id=%d, urgency=%d)" % (title, task.id, task.urgency)
85
complete_bug_add = ProjectCompleter(1)
88
def do_bug_edit(self, line):
91
task = dbutils.getTaskFromId(line)
94
taskLine = parseutils.createLine("", task.title, task.getKeywordDict())
98
print "(Press Ctrl+C to cancel)"
100
line = tui.editLine(taskLine)
102
tui.warning("Indicate a bug title !")
104
except KeyboardInterrupt:
108
foo, title, keywordDict = parseutils.parseLine(task.project.name+" "+line)
109
if dbutils.updateTask(task, task.project.name, title, keywordDict):
111
editBugKeywords(keywordDict)
112
task.setKeywordDict(keywordDict)
115
task.urgency = computeUrgency(keywordDict)