「ipython notebook」を使って簡単にタスク管理してみる。

ipython notebook便利と思っていたんですが、
これで、そのままタスク管理も出来たらいいなと思って試しに作ってみました。
かなり簡単に作ったというのもありますが、サクッと出来てしまいます。
前回に続き、dataTablesも使っています。
データのCRUDには、pandasを使っています。
(notebook、pandasのインストールの説明は省略します。)

import pandas
from IPython.display import Javascript
from IPython.display import HTML
title_name = 'Tasks'
file_name = 'tasks.csv'
css_name = '//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css'
js_name = '//cdn.datatables.net/1.10.12/js/jquery.dataTables.min'
def read_task():
  if os.path.exists(file_name):
    return pandas.DataFrame.from_csv(file_name)
  else:
    return pandas.DataFrame()

def save_task(data):
  pandas.DataFrame(data).to_csv(file_name)

def add_task(name, content):
  data = read_task()
  df = pandas.DataFrame([{'name':name,'content':content,'status':'new'}], columns = ['name','content','status'])
  data = data.append(df, ignore_index=True)
  save_task(data)

def show_task():
  data = read_task()
  js = '''
    <link rel='stylesheet' type='text/css' href='%s'>
    <script>
      require.config({
        paths: {
          dataTables: '%s'
        }
     });
      require(['dataTables'], function(){
        $('.dataframe').DataTable();
      });
    </script>
  '''%(css_name, js_name)
  return HTML('<h2>%s</h2>'%(title_name) + data.to_html() + js)

def update_task(id, name, content, status):
  data = read_task()
  data['name'][id] = name
  data['content'][id] = content
  data['status'][id] = status
  save_task(data)

def delete_task(id):
  data = read_task()
  data = data.drop(id)
  save_task(data)

3つのセルに、これらをコピーして早速使ってみます。
4つ目のセルに下記を入力して、実行(Shift + Enter)してみましょう。

show_task()

まだ、何のタスクもありませんが
もうタスク管理っぽいものが出来ていますね。
5つ目のセルで、タスクを追加してみましょう。

add_task('最初のタスク','githubに、repositoryを準備する')

これを実行(Shift + Enter)した後で、
また4つ目のセルに戻って実行(Shift + Enter)します。

タスクが追加されました。
taskwarriorっぽい雰囲気ですね。https://taskwarrior.org/
これを繰り返していくと、タスクがどんどん追加されます。

あと、削除と更新も出来ますが
疲れてきたので、また次回に・・・