内容
基本構成
now.yml=>当日の作業内容をyaml形式で管理するファイル
任意のフォルダ/todo/yyyy/mm/yyyymmdd_todo.yml=>日々の作業結果を保存するフォルダ構成
日々の作業内容をまとめる基本フォーマットは以下
title: yyyy/mm/dd contents: - "title", "summary", "estimate", "from_date", "to_date", "diff_date" - "title", "summary", "estimate", "from_date", "to_date", "diff_date" # タスク数分続く - "title", "summary", "estimate", "from_date", "to_date", "diff_date"
要件
・1日の作業を終えてnow.ymlを記述し終わったらPluginを実行する。
・任意のフォルダ/yyyy/mm/ファイルを探し、無ければ作成する
・now.ymlファイルをコピーしてyyyymmdd_todo.ymlとして上記フォルダに保存する。
・ファイルの出力まで正常に終了したらnow.ymlの内容を以下のようにする
title: yyyy/mm/dd (翌日) contents:
・出力元のnow.yml、出力先の「任意のフォルダ」のパスは設定ファイルで設定可能にする。
設定ファイルはPluginのPythonと同じ階層に「daily_calculate_cfg.yml」という名前で配置する。
ソースコード
# -*- coding: utf-8 -*- import yaml import os import re import shutil import datetime # 設定ファイル名、場所は任意の箇所に設定 CFG_PATH = 'daily_calculate_cfg.yml' class DailyTodoManage: def output_path(self): return self._load_yaml()['output'] def input_path(self): return self._load_yaml()['input'] def load_daily_yaml(self): return yaml.load(open(self.input_path()).read().decode('utf-8')) def get_year(self, ymd): return ymd[0:4] def get_month(self, ymd): return ymd[5:7] def get_tommorow(self): d = datetime.datetime.now() d = d + datetime.timedelta(days=1) return '%04d/%02d/%02d' % (d.year, d.month, d.day) def get_output_filepath(self, base_path, ymd): return base_path + "\\todo\\" + daily.get_year(ymd) + "\\" + self.get_month(ymd) + "\\" + self._get_output_filename(ymd) def clear_current_todo(self, input_path): template =u"""\ title: %s contents: """ % self.get_tommorow() with open(input_path, "w") as f: f.write(template) def _load_yaml(self): return yaml.load(open(CFG_PATH).read().decode('utf-8')) def _get_output_filename(self, ymd): return ymd.replace("/", "") + "_todo.yml" class YmdRegexp: def ymd_matcher(self, value): return True if self._get_ymd_pattern().match(value) else False def _get_ymd_pattern(self): return re.compile('^(\d){4}\/(\d){2}\/(\d){2}$') class OutputManager: def create_todo_folder(self, base_path): self._create_folder(base_path, "todo") def create_ym_folder(self, base_path, year, month): self._create_folder(base_path + "\\todo", year) self._create_folder(base_path + "\\todo\\" + year, month) def _create_folder(self, base_path, dir_name): result_dir = base_path + "\\" + dir_name if (not os.path.isdir(result_dir)): os.mkdir(result_dir) print "success create result_dir:" + result_dir daily = DailyTodoManage() daily_yaml = daily.load_daily_yaml() title = daily_yaml["title"] if (not YmdRegexp().ymd_matcher(title)): raise ValueError, 'invalid settings[title] title have to yyyy/mm/dd format' base_output_path = daily.output_path() output = OutputManager() output.create_todo_folder(base_output_path) output.create_ym_folder(base_output_path, daily.get_year(title), daily.get_month(title)) shutil.copyfile(daily.input_path(), daily.get_output_filepath(base_output_path, title)) daily.clear_current_todo(daily.input_path())
設定ファイル ※xxxx.yml,yyyyの部分には任意のファイル名・パスを設定
input: xxxx.yml output: yyyyy
実行結果
例えば本日の作業内容に対して実行した場合
任意のパス/todo/2013/06/20130609_todo.yml
が作成されることを確認。
処理実行後のコピー元ファイルの状態
title: 2013/06/10 contents:
関連
TODO管理ツール 作業時間計測用Plugin開発
http://d.hatena.ne.jp/tbpg/20130523/1369333076