[PATCH 1/2] Added '_' as a shortcut to last task id
Aurélien Gâteau
agateau at kde.org
Tue Sep 1 16:37:08 CEST 2009
---
src/yokadi/dbutils.py | 31 +++++++++++++++++++++++++------
src/yokadi/taskcmd.py | 1 +
src/yokadi/tests/dbutilstestcase.py | 18 ++++++++++++++++++
src/yokadi/yokadi.py | 2 ++
4 files changed, 46 insertions(+), 6 deletions(-)
diff --git a/src/yokadi/dbutils.py b/src/yokadi/dbutils.py
index b0edcbe..3f2a515 100644
--- a/src/yokadi/dbutils.py
+++ b/src/yokadi/dbutils.py
@@ -15,6 +15,8 @@ import tui
from db import Keyword, Project, Task
from yokadiexception import YokadiException
+_lastTaskId = None
+
def addTask(projectName, title, keywordDict):
"""Adds a task based on title and keywordDict.
@param projectName: name of project as a string
@@ -56,6 +58,13 @@ def updateTask(task, projectName, title, keywordDict):
task.setKeywordDict(keywordDict)
return True
+def setLastTaskId(taskId):
+ """Defines the last task id. This id will be used in getTaskFromId() if the
+ line parameter is "_"
+ @param taskId: the taskId integer
+ """
+ global _lastTaskId
+ _lastTaskId = taskId
def getTaskFromId(line, parameterName="id"):
"""Returns a task given its id, or raise a YokadiException if it does not
@@ -63,20 +72,30 @@ def getTaskFromId(line, parameterName="id"):
@param line: taskId string
@param parameterName: name of the parameter to mention in exception
@return: Task instance or None if existingTask is False"""
+ global _lastTaskId
+
line = line.strip()
if len(line) == 0:
raise YokadiException("Missing <%s> parameter" % parameterName)
- # We do not use line.isdigit() because it returns True if line is '¹'!
- try:
- taskId = int(line)
- except ValueError:
- raise YokadiException("<%s> should be a number" % parameterName)
+ if line == "_":
+ if _lastTaskId is not None:
+ taskId = _lastTaskId
+ else:
+ raise YokadiException("No previous task id")
+ else:
+ # We do not use line.isdigit() because it returns True if line is '¹'!
+ try:
+ taskId = int(line)
+ except ValueError:
+ raise YokadiException("<%s> should be a number" % parameterName)
try:
- return Task.get(taskId)
+ task = Task.get(taskId)
except SQLObjectNotFound:
raise YokadiException("Task %s does not exist. Use t_list to see all tasks" % taskId)
+ _lastTaskId = taskId
+ return task
#TODO: factorize the two following functions and make a generic one
def getOrCreateKeyword(keywordName, interactive=True):
diff --git a/src/yokadi/taskcmd.py b/src/yokadi/taskcmd.py
index 128d4a2..7e430bd 100644
--- a/src/yokadi/taskcmd.py
+++ b/src/yokadi/taskcmd.py
@@ -52,6 +52,7 @@ class TaskCmd(object):
print "Added task '%s' (id=%d)" % (title, task.id)
else:
tui.reinjectInRawInput(u"t_add " + line)
+ dbutils.setLastTaskId(task.id)
complete_t_add = projectAndKeywordCompleter
diff --git a/src/yokadi/tests/dbutilstestcase.py b/src/yokadi/tests/dbutilstestcase.py
index 943c08c..aeaf8a0 100644
--- a/src/yokadi/tests/dbutilstestcase.py
+++ b/src/yokadi/tests/dbutilstestcase.py
@@ -12,14 +12,32 @@ import testutils
import dbutils
import tui
from db import Keyword, Project
+from yokadiexception import YokadiException
class DbUtilsTestCase(unittest.TestCase):
def setUp(self):
testutils.clearDatabase()
+ dbutils.setLastTaskId(None)
tui.clearInputAnswers()
+ def testGetTaskFromId(self):
+ # Using "_" with no prior task activity should raise an exception
+ self.assertRaises(YokadiException, dbutils.getTaskFromId, "_")
+
+ tui.addInputAnswers("y")
+ t1 = dbutils.addTask("x", "t1", {})
+ t2 = dbutils.addTask("x", "t2", {})
+
+ task = dbutils.getTaskFromId(str(t2.id))
+ self.assertEquals(task, t2)
+
+ dbutils.setLastTaskId(t1.id)
+ task = dbutils.getTaskFromId("_")
+ self.assertEquals(task, t1)
+
+
def testGetOrCreateKeyword(self):
# interactive
tui.addInputAnswers("y")
diff --git a/src/yokadi/yokadi.py b/src/yokadi/yokadi.py
index 52459b1..3c2bb72 100755
--- a/src/yokadi/yokadi.py
+++ b/src/yokadi/yokadi.py
@@ -69,6 +69,8 @@ class YokadiCmd(TaskCmd, ProjectCmd, KeywordCmd, BugCmd, ConfCmd, AliasCmd, Cmd)
return self.onecmd(nline)
elif nline.isdigit():
self.do_t_show(nline)
+ elif nline == "_":
+ self.do_t_show(nline)
else:
raise YokadiException("Unknown command. Use 'help' to see all available commands")
--
1.6.3.3
--------------000900090400070006070805
Content-Type: text/x-diff;
name="0002-Updated-doc.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="0002-Updated-doc.patch"
More information about the Ml-yokadi
mailing list