内容
基本構成
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」という名前で配置する。
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: