X-Git-Url: https://plomlompom.com/repos/?p=misc;a=blobdiff_plain;f=todo.py;fp=todo.py;h=11b0149028966effd5f551d1fbc0f36819838faf;hp=3ea09b0d7b7e42b4893c15b7274b7de85c7343bf;hb=38b9ce0ba2b5af072554999bc5836ffe455f06db;hpb=979de59ced9fe3fd3860d19288b42485d7f02346 diff --git a/todo.py b/todo.py index 3ea09b0..11b0149 100644 --- a/todo.py +++ b/todo.py @@ -87,6 +87,7 @@ class Task: self.comment = comment self.visible = True + self.parents = [] @classmethod def from_dict(cls, db, d, id_): @@ -113,6 +114,8 @@ class Task: def subtasks(self): subtasks = [] for id_ in self.subtask_ids.now: + if len(id_) == 0: + continue subtasks += [self.db.tasks[id_]] return subtasks @@ -159,22 +162,16 @@ class Day: self.date = date self.db = db self.comment = comment - self.archived = True self.linked_todos_as_list = [] - self.todos = {} @classmethod def from_dict(cls, db, d, date=None): comment = d['comment'] if 'comment' in d.keys() else '' day = cls(db, date, comment) - for id_ in d['linked_todos']: - day.linked_todos_as_list += [db.todos[id_]] return day def to_dict(self): - d = {'comment': self.comment, 'linked_todos': []} - for todo_id in self.linked_todos.keys(): - d['linked_todos'] += [todo_id] + d = {'comment': self.comment} return d @property @@ -256,6 +253,10 @@ class Todo: def title(self): return self.task.title.at(self.earliest_date) + @property + def dated_title(self): + return f'{self.earliest_date}:{self.title}' + @property def children(self): return [self.db.todos[id_] for id_ in self.child_ids] @@ -294,9 +295,9 @@ class Todo: if not date in efforts.keys(): efforts[date] = None if effort is not None: - to_add = effort + to_add = effort / len(child.parents) elif child.done: - to_add = child.task.default_effort.at(date) + to_add = child.task.default_effort.at(date) / len(child.parents) if to_add is not None: if efforts[date] is not None: efforts[date] += to_add @@ -334,13 +335,6 @@ class Todo: return False return True - @property - def path(self): - path = '' - if self.parent: - path = f'{self.parent.path}{self.parent.title}:' - return path - @property def tags(self): return self.day_tags | self.task.tags.now @@ -371,16 +365,14 @@ class Todo: class TodoDB(PlomDB): def __init__(self, - prefix, selected_date=None, - t_filter_and = None, - t_filter_not = None, + tag_filter_and = None, + tag_filter_not = None, hide_unchosen=False, hide_done=False): - self.prefix = prefix self.selected_date = selected_date if selected_date else today_date() - self.t_filter_and = t_filter_and if t_filter_and else [] - self.t_filter_not = t_filter_not if t_filter_not else [] + self.tag_filter_and = tag_filter_and if tag_filter_and else [] + self.tag_filter_not = tag_filter_not if tag_filter_not else [] self.hide_unchosen = hide_unchosen self.hide_done = hide_done @@ -394,25 +386,33 @@ class TodoDB(PlomDB): def read_db_file(self, f): d = json.load(f) + for id_, t_dict in d['tasks'].items(): t = self.add_task(id_=id_, dict_source=t_dict) for tag in t.tags.now: self.t_tags.add(tag) + for task in self.tasks.values(): + for child in task.subtasks: + child.parents += [task] + for id_, todo_dict in d['todos'].items(): - todo = self.add_todo(todo_dict, id_) - self.todos[id_] = todo + todo = self.add_todo(todo_dict, id_, link_into_day=False) for tag in todo.day_tags: self.t_tags.add(tag) - for date, day_dict in d['days'].items(): - self.add_day(dict_source=day_dict, date=date) for todo in self.todos.values(): for child in todo.children: child.parents += [todo] + + for date, day_dict in d['days'].items(): + self.add_day(dict_source=day_dict, date=date) + for todo in self.todos.values(): for date in todo.efforts.keys(): if not date in self.days.keys(): self.add_day(date) - if not todo in self.days[date].linked_todos_as_list: - self.days[date].linked_todos_as_list += [todo] + # if not todo in self.days[date].linked_todos_as_list: + # self.days[date].linked_todos_as_list += [todo] + self.days[date].linked_todos_as_list += [todo] + self.set_visibilities() def to_dict(self): @@ -421,8 +421,6 @@ class TodoDB(PlomDB): d['tasks'][uuid] = t.to_dict() for date, day in self.days.items(): d['days'][date] = day.to_dict() - for todo in day.todos.values(): - d['todos'][todo.id_] = todo.to_dict() for id_, todo in self.todos.items(): d['todos'][id_] = todo.to_dict() return d @@ -464,8 +462,9 @@ class TodoDB(PlomDB): task.tags.set(tags) task.subtask_ids.set(subtask_ids) task.comment = comment + return task - def add_todo(self, todo_dict=None, id_=None, task=None, efforts=None): + def add_todo(self, todo_dict=None, id_=None, task=None, efforts=None, link_into_day=True): id_ = id_ if id_ else str(uuid4()) if todo_dict: todo = Todo.from_dict(self, todo_dict, id_) @@ -473,9 +472,22 @@ class TodoDB(PlomDB): todo = Todo(self, id_, task, efforts=efforts) children = [] for child_task in task.subtasks: - children += [self.add_todo(task=child_task, efforts=efforts)] + # if Todo expects chuldren, adopt any compatibles found in DB.selected_date + # before creating new child Todos + child_todo = None + if list(efforts.keys())[0] == self.selected_date: + adoptable_todos = [t for t in self.selected_day.linked_todos_as_list + if t.task.id_ == child_task.id_] + if len(adoptable_todos) > 0: + child_todo = adoptable_todos[0] + if not child_todo: + child_todo = self.add_todo(task=child_task, + efforts=efforts, link_into_day=link_into_day) + children += [child_todo] todo.child_ids = [child.id_ for child in children] self.todos[id_] = todo + if link_into_day: + self.selected_day.linked_todos_as_list += [todo] return todo def _update_todo_shared(self, id_, done, comment, importance): @@ -495,7 +507,7 @@ class TodoDB(PlomDB): raise PlomException('todo must have at least one effort!') todo.children = children todo.efforts = efforts - for date in todo.efforts: + for date in todo.efforts.keys(): if not date in self.days.keys(): self.add_day(date=date) if not self in self.days[date].linked_todos_as_list: @@ -513,6 +525,9 @@ class TodoDB(PlomDB): parent.child_ids.remove(todo.id_) del self.todos[id_] + def delete_task(self, id_): + del self.tasks[id_] + def delete_effort(self, todo, date, force=False): if (not force) and len(todo.efforts) == 1: raise PlomException('todo must retain at least one effort!') @@ -521,9 +536,12 @@ class TodoDB(PlomDB): # views + def show_message(self, message): + return j2env.get_template('message.html').render(message=message) + def show_calendar(self, start_date_str, end_date_str): - self.t_filter_and = ['calendar'] - self.t_filter_not = ['deleted'] + self.tag_filter_and = ['calendar'] + self.tag_filter_not = ['deleted'] self.set_visibilities() start_date_obj, end_date_obj = self.get_limit_days_from_date_strings(start_date_str, end_date_str) days_to_show = {} @@ -559,16 +577,22 @@ class TodoDB(PlomDB): return j2env.get_template('do_todos.html').render( day=self.selected_day, tags=self.t_tags, - filter_and=self.t_filter_and, - filter_not=self.t_filter_not, + filter_and=self.tag_filter_and, + filter_not=self.tag_filter_not, prev_date=prev_date_str, next_date=next_date_str, todos=todos, sort=sort_order, hide_done=self.hide_done) - def show_todo(self, id_, return_to, search, start_date, end_date): + def show_todo(self, id_, search, start_date, end_date): todo = self.todos[id_] + filtered_tasks = [t for t in self.tasks.values() + if t != todo.task] + filtered_todos = [t for t in self.todos.values() + if t != todo] + + # if going into the past, only allow 3-day ranges start_day, end_day = self.get_limit_days_from_date_strings(start_date, end_date) if start_day < datetime.now() - timedelta(days=2): end_day = start_day + timedelta(days=3) @@ -577,10 +601,6 @@ class TodoDB(PlomDB): for n in range(int((end_day - start_day).days) + 1): day = start_day + timedelta(n) legal_dates += [day.strftime(DATE_FORMAT)] - filtered_todos = [t for t in self.todos.values() - if t.visible - and t != todo - and (len(search) == 0 or t.matches(search))] date_filtered_todos = [] for date in legal_dates: for filtered_todo in filtered_todos: @@ -588,33 +608,28 @@ class TodoDB(PlomDB): continue if date in filtered_todo.efforts.keys(): date_filtered_todos += [filtered_todo] + return j2env.get_template('todo.html').render( - filter_and=self.t_filter_and, - filter_not=self.t_filter_not, tags=self.t_tags, todo=todo, filtered_todos=date_filtered_todos, + filtered_tasks=filtered_tasks, child_todos=todo.children, - return_to=return_to, start_date=start_date, end_date=end_date) - def show_task(self, id_, return_to='', search=''): + def show_task(self, id_): task = self.tasks[id_] if id_ else self.add_task() - selected = task.id_ in self.selected_day.todos.keys() + if not id_: + task.default_effort.set(1.0) filtered_tasks = [t for t in self.tasks.values() - if t.visible - and t != task - and (t not in task.subtasks) - and (len(search) == 0 or t.matches(search))] + if t != task + and (t not in task.subtasks)] return j2env.get_template('task.html').render( - search=search, + selected_date=self.selected_date, tags=self.t_tags, - filter_and=self.t_filter_and, - filter_not=self.t_filter_not, filtered_tasks=filtered_tasks, - task=task, - return_to=return_to) + task=task) def show_tasks(self, expand_uuid): expanded_tasks = {} @@ -623,8 +638,8 @@ class TodoDB(PlomDB): expanded_tasks[uuid] = self.tasks[uuid] return j2env.get_template('tasks.html').render( db=self, - filter_and=self.t_filter_and, - filter_not=self.t_filter_not, + filter_and=self.tag_filter_and, + filter_not=self.tag_filter_not, expand_uuid=expand_uuid, expanded_tasks=expanded_tasks) @@ -642,36 +657,37 @@ class TodoDB(PlomDB): continue relevant_todos += [todo] - tasks = [] + filtered_tasks = [] chosen_tasks = [todo.task for todo in self.selected_day.linked_todos_as_list] for uuid, task in self.tasks.items(): if (not task.visible)\ or (not task.matches(search))\ or (hide_chosen_tasks and task in chosen_tasks): continue - tasks += [task] + filtered_tasks += [task] if sort_order == 'title': chosen_todos.sort(key=lambda t: t.title) - relevant_todos.sort(key=lambda t: t.title) + relevant_todos.sort(key=lambda t: t.dated_title) tasks.sort(key=lambda t: t.title.then) elif sort_order == 'effort': chosen_todos.sort(key=lambda t: t.day_effort if t.day_effort else (t.default_effort if t.done else 0), reverse=True) relevant_todos.sort(key=lambda t: t.all_days_effort, reverse=True) - tasks.sort(key=lambda t: t.default_effort.then, reverse=True) + filtered_tasks.sort(key=lambda t: t.default_effort.then, reverse=True) return j2env.get_template('pick_tasks.html').render( sort=sort_order, tags=self.t_tags, chosen_todos=chosen_todos, - filter_and=self.t_filter_and, - filter_not=self.t_filter_not, + filter_and=self.tag_filter_and, + filter_not=self.tag_filter_not, day=self.selected_day, prev_date=prev_date_str, next_date=next_date_str, - tasks=tasks, + all_tasks=[t for t in self.tasks.values()], + filtered_tasks=filtered_tasks, hide_chosen_tasks=hide_chosen_tasks, relevant_todos=relevant_todos, search=search) @@ -680,12 +696,12 @@ class TodoDB(PlomDB): def set_visibilities(self): for uuid, t in self.tasks.items(): - t.visible = len([tag for tag in self.t_filter_and if not tag in t.tags.now]) == 0\ - and len([tag for tag in self.t_filter_not if tag in t.tags.now]) == 0\ + t.visible = len([tag for tag in self.tag_filter_and if not tag in t.tags.now]) == 0\ + and len([tag for tag in self.tag_filter_not if tag in t.tags.now]) == 0\ and ((not self.hide_unchosen) or uuid in self.selected_day.todos.keys()) for todo in self.todos.values(): - todo.visible = len([tag for tag in self.t_filter_and if not tag in todo.day_tags | todo.task.tags.now ]) == 0\ - and len([tag for tag in self.t_filter_not if tag in todo.day_tags | todo.task.tags.now ]) == 0\ + todo.visible = len([tag for tag in self.tag_filter_and if not tag in todo.day_tags | todo.task.tags.now ]) == 0\ + and len([tag for tag in self.tag_filter_not if tag in todo.day_tags | todo.task.tags.now ]) == 0\ and ((not self.hide_done) or (not todo.done)) def get_limit_days_from_date_strings(self, start_date_str, end_date_str): @@ -726,28 +742,33 @@ class ParamsParser: param = param != '0' return param - def get_cookied(self, key, default=None): + def cookie_key_from_params_key(self, prefix, key): + return f'{prefix}:{key}' if prefix else key + + def get_cookied(self, key, default=None, prefix=None): + cookie_key = self.cookie_key_from_params_key(prefix, key) param = self.get(key, default) if param == '-': param = None - if key in self.cookie_db.keys(): - del self.cookie_db[key] - if param is None and key in self.cookie_db.keys(): - param = self.cookie_db[key] + if cookie_key in self.cookie_db.keys(): + del self.cookie_db[cookie_key] + if param is None and cookie_key in self.cookie_db.keys(): + param = self.cookie_db[cookie_key] if param is not None: - self.cookie_db[key] = param + self.cookie_db[cookie_key] = param return param - def get_cookied_chain(self, key, default=None): + def get_cookied_chain(self, key, default=None, prefix=None): + cookie_key = self.cookie_key_from_params_key(prefix, key) params = self.params.get(key, default) if params == ['-']: params = None - if key in self.cookie_db.keys(): - del self.cookie_db[key] - if params is None and key in self.cookie_db.keys(): - params = self.cookie_db[key] + if cookie_key in self.cookie_db.keys(): + del self.cookie_db[cookie_key] + if params is None and cookie_key in self.cookie_db.keys(): + params = self.cookie_db[cookie_key] if params is not None: - self.cookie_db[key] = params + self.cookie_db[cookie_key] = params return params @@ -759,39 +780,24 @@ class PostvarsParser: def has(self, key): return key in self.postvars.keys() - def get(self, key, on_empty=None): - return self.get_at_index(key, 0, on_empty) + def get(self, key, on_empty=None, float_if_possible=False): + return self.get_at_index(key, 0, on_empty, float_if_possible) - def get_at_index(self, key, i, on_empty=None): + def get_at_index(self, key, i, on_empty=None, float_if_possible=False): if self.has(key) and len(self.postvars[key][i]) > 0: - return self.postvars[key][i] - return on_empty - - def get_float_if_possible(self, key): - s = self.get(key) - if s is not None: - return float(s) + val = self.postvars[key][i] else: - return None + val = on_empty + if float_if_possible and val is not None: + return float(val) + else: + return val def get_all(self, key, on_empty=None): if self.has(key) and len(self.postvars[key]) > 0: - return self.postvars[key] + return [v for v in self.postvars[key] if len(v) > 0] return on_empty - def get_defined_tags(self, joined_key, key_prefix): - tags = set() - tags_checked = [] - for k in self.postvars.keys(): - if k.startswith(key_prefix): - tags_checked += [k[len(key_prefix):]] - tags_joined = self.get(joined_key, '') - for tag in [tag.strip() for tag in tags_joined.split(';') if tag.strip() != '']: - tags.add(tag) - for tag in tags_checked: - tags.add(tag) - return tags - def set(self, key, value): self.postvars[key] = [value] @@ -801,7 +807,6 @@ class TodoHandler(PlomHandler): def config_init(self): return { 'cookie_name': 'todo_cookie', - 'prefix': '', 'cookie_path': '/' } @@ -809,7 +814,7 @@ class TodoHandler(PlomHandler): default_path = '/todo' handler.add_route('GET', default_path, self.show_db) handler.add_route('POST', default_path, self.write_db) - return 'todo', {'cookie_name': 'todo_cookie', 'prefix': default_path, 'cookie_path': default_path} + return 'todo', {'cookie_name': 'todo_cookie', 'cookie_path': default_path} def do_POST(self): self.try_do(self.write_db) @@ -822,10 +827,10 @@ class TodoHandler(PlomHandler): length = int(self.headers['content-length']) postvars = PostvarsParser(parse_qs(self.rfile.read(length).decode(), keep_blank_values=1)) - db = TodoDB(prefix=config['prefix']) + db = TodoDB() redir_params = [] # if we do encounter a filter post, we repost it (and if empty, the emptying command '-') - for param_name, filter_db_name in {('t_and', 't_filter_and'), ('t_not', 't_filter_not')}: + for param_name, filter_db_name in {('and_tag', 'tag_filter_and'), ('not_tag', 'tag_filter_not')}: filter_db = getattr(db, filter_db_name) if postvars.has(param_name): for target in postvars.get_all(param_name, []): @@ -837,7 +842,7 @@ class TodoHandler(PlomHandler): if site in {'calendar', 'todo'}: redir_params += [('end', postvars.get('end', '-'))] redir_params += [('start', postvars.get('start', '-'))] - if site in {'todo', 'task', 'pick_tasks'}: + if site in {'todo', 'pick_tasks'}: redir_params += [('search', postvars.get('search', ''))] redir_params += [('search', postvars.get('search', ''))] redir_params += [('search', postvars.get('search', ''))] @@ -849,6 +854,7 @@ class TodoHandler(PlomHandler): redir_params += [('id', todo_id)] old_todo = db.todos[todo_id] if todo_id in db.todos.keys() else None efforts = {} + latest_date = db.selected_date for i, date in enumerate(postvars.get_all('effort_date', [])): if '' == date: continue @@ -856,43 +862,62 @@ class TodoHandler(PlomHandler): datetime.strptime(date, DATE_FORMAT) except ValueError: raise PlomException(f'bad date string') + latest_date = date efforts[date] = None if not (old_todo and old_todo.children): - efforts[date] = postvars.get_at_index('effort', i, None) + efforts[date] = postvars.get_at_index('effort', i, on_empty=None, + float_if_possible=True) if postvars.has('delete'): has_day_effort = len([e for e in efforts.values() if e is not None]) > 0 if postvars.has('done')\ or postvars.get('comment')\ - or len(postvars.get_defined_tags('joined_day_tags', 'day_tag_')) > 0\ + or postvars.get_all('tag', [])\ or has_day_effort: raise PlomException('will not remove todo of preserve-worthy values') db.delete_todo(todo_id) - if not postvars.get('return_to'): - postvars.set('return_to', 'calendar') + postvars.set('return_to', 'calendar') elif postvars.has('update'): if postvars.has('delete_effort'): for date in postvars.get_all('delete_effort'): db.delete_effort(old_todo, date) del efforts[date] - children = [db.todos[id_] for id_ in postvars.get_all('adopt_child', [])] + children = [db.todos[id_] for id_ in postvars.get_all('adopt_child', []) + if id_ in db.todos.keys()] + for child in children: + if not todo_id in [t.id_ for t in child.parents]: + child.parents += [db.todos[todo_id]] + tasks_to_birth = [db.tasks[id_] for id_ in postvars.get_all('birth_child', [])] + for task in tasks_to_birth: + children += [db.add_todo(task=task, efforts={latest_date: None})] db.update_todo(id_=todo_id, efforts=efforts, done=postvars.has('done'), comment=postvars.get('comment', ''), - tags=postvars.get_defined_tags('joined_day_tags', 'day_tag_'), + tags=postvars.get_all('tag', []), importance=float(postvars.get('importance')), children=children) elif 'task' == site: task_id = postvars.get('task_id') - if postvars.has('update'): - db.update_task( + if postvars.has('delete') and task_id in db.tasks.keys(): + if [t for t in db.todos.values() if task_id == t.task.id_]: + raise PlomException('will not remove Task describing existing Todos') + if postvars.get('title', '')\ + or postvars.get_all('tag', [])\ + or postvars.get_all('subtask', [])\ + or postvars.get('comment', ''): + raise PlomException('will not remove Task of preserve-worthy values') + db.delete_task(task_id) + elif postvars.has('update'): + task = db.update_task( id_=task_id, title=postvars.get('title', ''), - default_effort=postvars.get_float_if_possible('default_effort'), - tags=postvars.get_defined_tags('joined_tags', 'tag_'), + default_effort=postvars.get('default_effort', float_if_possible=True), + tags=postvars.get_all('tag', []), subtask_ids=postvars.get_all('subtask', []), comment=postvars.get('comment', '')) + if postvars.has('add_as_todo'): + db.add_todo(task=task, efforts={postvars.get('selected_date'): None}) redir_params += [('id', task_id)] elif 'pick_tasks' == site: @@ -926,12 +951,18 @@ class TodoHandler(PlomHandler): db.selected_date = postvars.get('date') redir_params += [('date', db.selected_date)] db.selected_day.comment = postvars.get('day_comment', '') - for i, todo_id in enumerate(postvars.get_all('todo_id')): - old_todo = None if not todo_id in db.todos.keys() else db.todos[todo_id] + for i, todo_id in enumerate(postvars.get_all('todo_id', [])): + old_todo = db.todos[todo_id] done = todo_id in postvars.get_all('done', []) day_effort_input = postvars.get_at_index('effort', i, '') day_effort = float(day_effort_input) if len(day_effort_input) > 0 else None comment = postvars.get_at_index('effort_comment', i, '') + if (day_effort is not None) and (not done) and day_effort < 0 and 0 == len(comment): + if len(old_todo.efforts) > 1: + db.delete_effort(old_todo, db.selected_date) + else: + db.delete_todo(todo_id) + continue importance = float(postvars.get_at_index('importance', i)) if old_todo\ and old_todo.done == done\ @@ -964,50 +995,53 @@ class TodoHandler(PlomHandler): cookie_db = self.get_cookie_db(config['cookie_name']) params = ParamsParser(parsed_url.query, cookie_db) - selected_date = t_filter_and = t_filter_not = None + selected_date = tag_filter_and = tag_filter_not = None hide_unchosen = hide_done = False return_to = params.get('return_to', '') - if site in {'do_todos', 'pick_tasks', 'calendar'}: + if site in {'do_todos', 'pick_tasks', 'calendar', 'task'}: selected_date = params.get_cookied('date') - if site in {'do_todos', 'pick_tasks', 'task', 'todo'}: - t_filter_and = params.get_cookied_chain('t_and') - t_filter_not = params.get_cookied_chain('t_not') + if site in {'do_todos', 'pick_tasks'}: + tag_filter_and = params.get_cookied_chain('and_tag', prefix=site) + tag_filter_not = params.get_cookied_chain('not_tag', prefix=site) if 'do_todos' == site: hide_done = params.get('hide_done', False) - db = TodoDB(config['prefix'], selected_date, t_filter_and, t_filter_not, hide_unchosen, hide_done) + db = TodoDB(selected_date, tag_filter_and, tag_filter_not, hide_unchosen, hide_done) if site in {'todo', 'task'}: id_ = params.get('id') - if site in {'todo', 'task', 'pick_tasks'}: + if site in {'todo', 'pick_tasks'}: search = params.get('search', '') if site in {'do_todos', 'pick_tasks'}: - sort_order = params.get_cookied('sort') - if site in {'calendar', 'todo'}: - start_date = params.get_cookied('start') - end_date = params.get_cookied('end') - if 'do_todos' == site: + sort_order = params.get_cookied('sort', prefix=site) + if site in {'', 'calendar', 'todo'}: + start_date = params.get_cookied('start', prefix=site) + end_date = params.get_cookied('end', prefix=site) + if 'reset_cookie' == site: + cookie_db = { # sensible defaults + params.cookie_key_from_params_key('pick_tasks', 'and_tag'): ['default'], + params.cookie_key_from_params_key('pick_tasks', 'not_tag'): ['ignore'], + params.cookie_key_from_params_key('todo', 'and_tag'): ['default'], + params.cookie_key_from_params_key('todo', 'not_tag'): ['ignore'], + params.cookie_key_from_params_key('todo', 'start'): 'yesterday', + params.cookie_key_from_params_key('todo', 'end'): 'today'} + page = db.show_message('cookie unset!') + elif 'do_todos' == site: page = db.show_do_todos(sort_order) elif 'pick_tasks' == site: hide_chosen_tasks = params.get('hide_chosen_tasks', False) page = db.show_pick_tasks(search, hide_chosen_tasks, sort_order) elif site == 'todo': - page = db.show_todo(id_, return_to, search, start_date, end_date) + page = db.show_todo(id_, search, start_date, end_date) elif 'task' == site: - page = db.show_task(id_, return_to, search) + page = db.show_task(id_) elif 'tasks' == site: expand_uuid = params.get('expand_uuid') page = db.show_tasks(expand_uuid) elif 'add_task' == site: page = db.show_task(None) - elif 'unset_cookie' == site: - page = 'no cookie to unset.' - if len(cookie_db) > 0: - self.unset_cookie(config['cookie_name'], config['cookie_path']) - page = 'cookie unset!' - else: + else: # 'calendar' == site page = db.show_calendar(start_date, end_date) - if 'unset_cookie' != site: - self.set_cookie(config['cookie_name'], config['cookie_path'], cookie_db) + self.set_cookie(config['cookie_name'], config['cookie_path'], cookie_db) self.send_HTML(page)