def test_due_aware(tmpdir, runner, create, now_for_tz): db = Database([tmpdir.join('default')], tmpdir.join('cache.sqlite')) l = next(db.lists()) for tz in ['CET', 'HST']: for i in [1, 23, 25, 48]: todo = FileTodo() todo.due = now_for_tz(tz) + timedelta(hours=i) todo.summary = '{}'.format(i) db.save(todo, l) todos = list(db.todos(due=24)) assert len(todos) == 4 assert todos[0].summary == "23" assert todos[1].summary == "23" assert todos[2].summary == "1" assert todos[3].summary == "1"
def test_due_aware(tmpdir, runner, create, now_for_tz): db = Database([tmpdir.join("default")], tmpdir.join("cache.sqlite")) list_ = next(db.lists()) for tz in ["CET", "HST"]: for i in [1, 23, 25, 48]: todo = Todo(new=True) todo.due = now_for_tz(tz) + timedelta(hours=i) todo.summary = "{}".format(i) todo.list = list_ db.save(todo) todos = list(db.todos(due=24)) assert len(todos) == 4 assert todos[0].summary == "23" assert todos[1].summary == "23" assert todos[2].summary == "1" assert todos[3].summary == "1"
def test_due_aware(tmpdir, runner, create): now = datetime.now() db = Database([tmpdir.join('default')], tmpdir.join('cache.sqlite')) l = next(db.lists()) for tz in ['CET', 'HST']: for i in [1, 23, 25, 48]: todo = FileTodo() todo.due = (now + timedelta(hours=i)).replace(tzinfo=tzlocal()) \ .astimezone(pytz.timezone(tz)) todo.summary = '{}'.format(i) db.save(todo, l) todos = list(db.todos(due=24)) assert len(todos) == 4 assert todos[0].summary == "23" assert todos[1].summary == "23" assert todos[2].summary == "1" assert todos[3].summary == "1"
class TodoStore(): def __init__(self): config = load_config() paths = [ path for path in glob.iglob(expanduser(config['main']['path'])) if isdir(path) ] if not paths: raise Exception('No todos found!') self.db = Database(paths, config['main']['cache_path']) def get_todos(self): return self.db.todos(status='ANY') def _set_status(self, todo, status): todo.status = status self.db.save(todo) def todo(self, todo): todo.completed_at = None todo.percent_complete = 0 self._set_status(todo, 'NEEDS-ACTION') def in_progress(self, todo): todo.completed_at = None self._set_status(todo, 'IN-PROCESS') def done(self, todo): todo.complete() self.db.save(todo) def cancel(self, todo): todo.cancel() self.db.save(todo)