Use a current table + trigger

This commit is contained in:
2018-07-11 01:47:29 +02:00
parent c0ece7a11c
commit 6c2b4f2c58
4 changed files with 65 additions and 10 deletions

View File

@@ -14,7 +14,6 @@ class TypeAction(Enum):
UPDATE = 'updated'
MOVE = 'moved'
DELETE = 'deleted'
ACTIVE = 'activated'
class Action:
def __init__(self, row):
@@ -42,8 +41,6 @@ def handle_action(args, last_action, conn):
if taction == 'init':
print('{} ({}): {}'.format(formated_date, username, message))
elif taction == TypeAction.ACTIVE.value:
print('{} ({}): {}'.format(formated_date, username, message))
else:
object_type = ''
id_object = ''
@@ -76,11 +73,26 @@ def record_action(cursor, action_type, message, project_id = '', task_id = None,
logging.debug('created action')
def read_last_action(conn):
def set_active(cursor, project_id = None, task_id = None, note_id = None):
query = 'UPDATE current SET {} = ? WHERE id = 0'
if project_id:
query = query.format('project_id')
obj_id = project_id
elif task_id:
query = query.format('task_id')
obj_id = task_id
elif note_id:
query = query.format('note_id')
obj_id = note_id
cursor.execute(query, (obj_id,))
def read_current(conn):
logging.info('> last_action')
# query = 'SELECT * FROM action WHERE id = (SELECT MAX(id) FROM action'
# query = 'SELECT project_id, task_id, note_id FROM action'
query = 'SELECT project_id, task_id, note_id FROM action ORDER BY id DESC LIMIT 1;'
query = 'SELECT project_id, task_id, note_id FROM current;'
cursor = conn.cursor()
cursor.execute(query)

View File

@@ -61,4 +61,46 @@ CREATE TABLE action (
CREATE TRIGGER action_insert_created_at AFTER INSERT ON action
BEGIN
UPDATE action SET created_at = strftime('%Y-%m-%d %H:%M:%S.%s', 'now', 'localtime') WHERE id = new.id;
END
END;
CREATE TABLE current (
id integer,
project_id integer,
task_id integer,
note_id integer
);
INSERT INTO current VALUES (0,0,0,0);
-- Trigger after insert for current values
CREATE TRIGGER current_project AFTER INSERT ON project
BEGIN
UPDATE current SET project_id = new.id WHERE id = 0;
END;
CREATE TRIGGER current_task AFTER INSERT ON task
BEGIN
UPDATE current SET task_id = new.id WHERE id = 0;
END;
CREATE TRIGGER current_note AFTER INSERT ON note
BEGIN
UPDATE current SET note_id = new.id WHERE id = 0;
END;
-- Trigger after update for current values
CREATE TRIGGER update_project AFTER UPDATE ON project
BEGIN
UPDATE current SET project_id = new.id WHERE id = 0;
END;
CREATE TRIGGER update_task AFTER UPDATE ON task
BEGIN
UPDATE current SET task_id = new.id WHERE id = 0;
END;
CREATE TRIGGER update_note AFTER UPDATE ON note
BEGIN
UPDATE current SET note_id = new.id WHERE id = 0;
END;

View File

@@ -8,6 +8,7 @@ import logging
import sys
from action import record_action
from action import set_active
from action import TypeAction
from args import get_string_arg
@@ -195,7 +196,7 @@ def view_project_set_active(project_id, last_action, conn):
message = date + time + name
print(' {} {:d}: ({}) [{}] [{}] {} ({} tasks)'.format('*' if last_action.task_id == row[0] else ' ',
task_id, username, status, priority, message, nb_note))
record_action(cursor, TypeAction.ACTIVE, 'set active project ' + str(project_id),
project_id, last_action.task_id, last_action.note_id)
set_active(cursor, project_id=project_id)
# TODO Add a -v option to see notes?

View File

@@ -9,6 +9,7 @@ import sys
from action import record_action
from action import TypeAction
from action import set_active
from args import get_string_arg
from args import arg_number
@@ -263,8 +264,7 @@ def view_task_set_active(task_id, last_action, conn):
note_id, username, message = row
print(' {} {:d}: ({}) {}'.format('*' if last_action.note_id == row[0] else ' ',
note_id, username, message))
record_action(cursor, TypeAction.ACTIVE, 'set active task ' + str(task_id),
last_action.project_id, last_action.task_id, last_action.note_id)
set_active(cursor, task_id=task_id)
# $ pit t 11
# * 11: (budd) a task (project: 1, status: in progress, priority: high, date: Apr 26, 2018, time: 5:00, 2 notes)