~ubuntu-branches/ubuntu/maverick/yokadi/maverick

« back to all changes in this revision

Viewing changes to src/yokadi/bugcmd.py

  • Committer: Bazaar Package Importer
  • Author(s): Harald Sitter
  • Date: 2009-07-19 13:01:35 UTC
  • Revision ID: james.westby@ubuntu.com-20090719130135-eonczddb1s21ux1v
Tags: upstream-0.10.0
Import upstream version 0.10.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: UTF-8 -*-
 
2
"""
 
3
Bug related commands.
 
4
 
 
5
@author: Aurélien Gâteau <aurelien.gateau@free.fr>
 
6
@license: GPLv3
 
7
"""
 
8
import parseutils
 
9
import dbutils
 
10
import tui
 
11
from completers import ProjectCompleter
 
12
 
 
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
 
17
 
 
18
SEVERITY_LIST = [
 
19
    (1, "Documentation"),
 
20
    (2, "Localization"),
 
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"),
 
26
    ]
 
27
 
 
28
LIKELIHOOD_LIST = [
 
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"),
 
34
    ]
 
35
 
 
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
 
41
 
 
42
 
 
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)
 
47
 
 
48
    severity = tui.selectFromList("Severity", SEVERITY_LIST, severity)
 
49
    likelihood = tui.selectFromList("Likelihood", LIKELIHOOD_LIST, likelihood)
 
50
    bug = tui.enterInt("bug", bug)
 
51
 
 
52
    keywordDict[BUG_PROPERTY_NAME] = bug
 
53
 
 
54
    if severity:
 
55
        keywordDict[SEVERITY_PROPERTY_NAME] = severity
 
56
 
 
57
    if likelihood:
 
58
        keywordDict[LIKELIHOOD_PROPERTY_NAME] = likelihood
 
59
 
 
60
 
 
61
class BugCmd(object):
 
62
    def __init__(self):
 
63
        for name in PROPERTY_NAMES:
 
64
            dbutils.getOrCreateKeyword(name, interactive=False)
 
65
 
 
66
 
 
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>
 
70
        """
 
71
        projectName, title, keywordDict = parseutils.parseLine(line)
 
72
 
 
73
        task = dbutils.addTask(projectName, title, keywordDict)
 
74
        if not task:
 
75
            tui.reinjectInRawInput(u"bug_add " + line)
 
76
            return
 
77
 
 
78
        editBugKeywords(keywordDict)
 
79
        task.setKeywordDict(keywordDict)
 
80
 
 
81
        task.urgency = computeUrgency(keywordDict)
 
82
 
 
83
        print "Added bug '%s' (id=%d, urgency=%d)" % (title, task.id, task.urgency)
 
84
 
 
85
    complete_bug_add = ProjectCompleter(1)
 
86
 
 
87
 
 
88
    def do_bug_edit(self, line):
 
89
        """Edit a bug.
 
90
        bug_edit <id>"""
 
91
        task = dbutils.getTaskFromId(line)
 
92
 
 
93
        # Create task line
 
94
        taskLine = parseutils.createLine("", task.title, task.getKeywordDict())
 
95
 
 
96
        # Edit
 
97
        while True:
 
98
            print "(Press Ctrl+C to cancel)"
 
99
            try:
 
100
                line = tui.editLine(taskLine)
 
101
                if not line.strip():
 
102
                    tui.warning("Indicate a bug title !")
 
103
                    continue
 
104
            except KeyboardInterrupt:
 
105
                print
 
106
                print "Cancelled"
 
107
                return
 
108
            foo, title, keywordDict = parseutils.parseLine(task.project.name+" "+line)
 
109
            if dbutils.updateTask(task, task.project.name, title, keywordDict):
 
110
                break
 
111
        editBugKeywords(keywordDict)
 
112
        task.setKeywordDict(keywordDict)
 
113
 
 
114
        # Update bug
 
115
        task.urgency = computeUrgency(keywordDict)
 
116
 
 
117
# vi: ts=4 sw=4 et