from datetime import datetime import json import os DATE_FORMAT = "%Y-%m-%dT%H:%M:%S" def dumps(*args, **kwargs): def _date_handler(obj): if hasattr(obj, 'strftime'): return obj.strftime(DATE_FORMAT) return obj return json.dumps(*args, default=_date_handler, **kwargs) def loads(*args, **kwargs): def _date_decoder(dct): for k, v in dct.items(): if isinstance(v, str): try: dct[k] = datetime.strptime(v, DATE_FORMAT) except: pass return dct return json.loads(*args, object_hook=_date_decoder, **kwargs) cachedir = os.path.expanduser("~/.cache/kotd/") if not os.path.exists(cachedir): os.makedirs(cachedir) config_file = os.path.expanduser("~/.config/kotd.json") def load_config(): if os.path.exists(config_file): with open(config_file) as f: config = loads(f.read()) else: config = { "start_date": datetime.utcnow(), # Number of kanji to show each day (not including review) "daily_kanji": 10, # Number of new kanji to show each day "new_kanji": 3, # Number of randomly old kanji to review each day "review_kanji": 3, # Maximum words to use with each day's kanji "max_words": 5, # Amount of time to show a word for before cycling to the next (seconds) "word_time": 300, } with open(config_file, "w") as f: f.write(dumps(config)) return config