1
0

Move Tasks module to different package

This commit is contained in:
Akbar Rahman 2018-09-16 11:57:27 +01:00
parent 80bf201fa7
commit 6f16104524
Signed by: alvierahman90
GPG Key ID: 20609519444A1269
4 changed files with 4 additions and 250 deletions

101
Task.py
View File

@ -1,101 +0,0 @@
from re import match
from datetime import datetime as d
class Task:
def __init__(self, text):
# defaults
self.completion_date = None
self.creation_date = None
# for sorting, lower than all alphabet letters
self.priority = "{"
self.done = False
self.projects = []
self.contexts = []
self.specials = []
arguments = text.split(' ')
counter = 0
if arguments[counter] == 'x':
self.done = True
counter += 1
# try to get priority
priorities = match("\\([a-zA-Z]\\)", arguments[counter])
if priorities is not None:
self.priority = arguments[counter].split('(')[1].split(')')[0]
self.priority = self.priority.upper()
counter += 1
# try to get completion date if done
if self.done:
try:
self.completion_date = d.strptime(arguments[counter],
'%Y-%m-%d')
counter += 1
except ValueError as e:
pass
# try to get creation date
try:
self.creation_date = d.strptime(arguments[counter], '%Y-%m-%d')
counter += 1
except ValueError as e:
pass
# you cannot have a completion date w/o a creation date
if self.creation_date is None and self.completion_date is not None:
self.creation_date = self.completion_date
self.completion_date = None
# auto mark tasks with completion date as done
if self.completion_date is not None:
self.done = True
self.body = " ".join(arguments[counter:])
# the rest of the arguments may have projects, contexts, specials
for i in arguments[counter:]:
if len(i) < 1:
continue
if i[0] == '+':
self.projects.append(i.split('+')[1])
elif i[0] == '-':
self.contexts.append(i.split('-')[1])
elif ':' in i:
arguments = i.split(':')
key = arguments[0]
value = ":".join(arguments[1:])
special = {key: value}
self.specials.append(special)
def do(self):
if self.done:
return
self.done = True
def undo(self):
if not self.done:
return
self.done = False
def __str__(self):
text = ""
if self.done:
text += "x "
if self.priority != '{':
text += '(' + self.priority + ') '
if self.completion_date:
text += str(self.completion_date).split(' ')[0] + ' '
if self.creation_date:
text += str(self.creation_date).split(' ')[0] + ' '
text += self.body
return text

View File

@ -1,148 +0,0 @@
#!/usr/bin/env python3
import unittest
import datetime
from Task import Task as T
class TaskTestCase(unittest.TestCase):
def test_basic(self):
text = "task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_basic_done(self):
text = "x basic test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, True)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized(self):
text = "(A) prioritized test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, 'A')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized_ignore_incorrect(self):
text = "(AA) prioritized test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_prioritized_done(self):
text = "x (A) prioritized test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, True)
self.assertEqual(task.priority, 'A')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_date(self):
text = "2018-06-24 test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_and_completion_date(self):
text = "x 2018-06-24 2018-05-24 test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, True)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.creation_date,
datetime.datetime(2018, 5, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_with_creation_and_completion_and_priority_date(self):
text = "x (B) 2018-06-24 2018-05-24 test task"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, True)
self.assertEqual(task.priority, 'B')
self.assertEqual(task.completion_date,
datetime.datetime(2018, 6, 24, 0, 0))
self.assertEqual(task.creation_date,
datetime.datetime(2018, 5, 24, 0, 0))
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
def test_special(self):
text = "special task special:value"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [{"special": "value"}])
def test_specials_with_colons(self):
text = "give muffin her pen back due:2028-07-10T14:28:15Z+0100"
task = T(text)
self.assertEqual(str(task), text)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, '{')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [{"due": "2028-07-10T14:28:15Z+0100"}])
def test_standardized_priority_case(self):
text = "(a) standard prioritization test"
text_standardized_priority = "(A) standard prioritization test"
task = T(text)
self.assertEqual(str(task), text_standardized_priority)
self.assertEqual(task.done, False)
self.assertEqual(task.priority, 'A')
self.assertEqual(task.completion_date, None)
self.assertEqual(task.creation_date, None)
self.assertEqual(task.projects, [])
self.assertEqual(task.contexts, [])
self.assertEqual(task.specials, [])
unittest.main()

2
bot.py
View File

@ -12,7 +12,7 @@ import telepot
from telepot.loop import MessageLoop
from fuzzywuzzy import process
from fuzzywuzzy import fuzz
from Task import Task
from pydo import Task
VERSION = "v1.1"

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
telepot
git+https://github.com/alvierahman90/pydo.git
fuzzywuzzy