diff --git a/.klyban.csv b/.klyban.csv index 03b141e..0b238b8 100644 --- a/.klyban.csv +++ b/.klyban.csv @@ -1,4 +1,4 @@ -,Unnamed: 0.1,Unnamed: 0,STATUS,ID,TITLE,DETAILS,TAG,DEADLINE -0,0,0,DOING,1,print card,pretty print fixed-width cards given a content,klyban, -1,1,1,DONE,2,print table,pretty print set of cards on each column,klyban, -2,2,2,TODO,3,nested prints,print cards within cards,klyban, +,Unnamed: 0.4,Unnamed: 0.3,Unnamed: 0.2,Unnamed: 0.1,Unnamed: 0,STATUS,ID,TITLE,DETAILS,TAG,DEADLINE +0,0,0,0,0,0,DOING,1,print card,pretty print fixed-width cards given a content,klyban, +1,1,1,1,1,1,TODO,2,print table,pretty print set of cards on each column,klyban, +2,2,2,2,2,2,TODO,3,nested prints,print cards within cards,klyban, diff --git a/klyban.py b/klyban.py index 2243ead..0401f08 100644 --- a/klyban.py +++ b/klyban.py @@ -89,7 +89,7 @@ def show(context): def promote(context, id): """Upgrade the status of task `ID` to the next one. - As configured with --status-list.""" + Use status configured with --status-list.""" df = load_data(context) @@ -104,7 +104,7 @@ def promote(context, id): else: i += 1 if i >= len(context.obj['status_list'])-1: - error("UNKNOWN_STATUS","Cannot promote task {}, already at the last status.".format(id)) + error("UNKNOWN_STATUS", "Cannot promote task {}, already at the last status.".format(id)) else: df.loc[df[context.obj['id_key']] == int(id), context.obj['status_key']] = context.obj['status_list'][i+1] @@ -112,6 +112,36 @@ def promote(context, id): context.invoke(show) +@cli.command() +@click.argument('ID') +@click.pass_context +def demote(context, id): + """Downgrade the status of task `ID` to the previous one. + + Use status configured with --status-list.""" + + df = load_data(context) + + row = df.loc[ df[context.obj['id_key']] == int(id) ] + if row.empty: + error("ID_NOT_FOUND", "{} = {} not found in `{}`".format(context.obj['id_key'], id, context.obj['input'])) + + i=0 + for i in range(len(context.obj['status_list'])): + if row[context.obj['status_key']][1] == context.obj['status_list'][i]: + break + else: + i += 1 + if i == 0: + error("UNKNOWN_STATUS", "Cannot demote task {}, already at the first status.".format(id)) + else: + df.loc[df[context.obj['id_key']] == int(id), context.obj['status_key']] = context.obj['status_list'][i-1] + + save_data(context, df) + + context.invoke(show) + + @cli.command() @click.pass_context