Source code for hyperdiary
__author__ = 'luphord'
__email__ = 'luphord@protonmail.com'
__version__ = '0.6.1'
from argparse import ArgumentParser, Namespace
from datetime import datetime, date, timedelta
from .diary import Diary
from .check import check
from .stats import stats
from .html import diary_to_html, diary_to_html_folder
from .hugo import diary_to_hugo
from .tiddlywiki import diary_to_tiddlers_export, diary_to_tiddlywiki_export
from .view import view
diary_path = '.'
parser = ArgumentParser(
description='The hyperdiary main command line interface.')
subparsers = parser.add_subparsers(title='subcommands', dest='subcommand',
help='Available subcommands')
subparsers.required = True
check_parser = subparsers.add_parser('check', help='Check entire diary for '
'integrity up-to-dateness')
def _check_exec(args: Namespace) -> None:
print('Checking diary...')
check(Diary.discover_and_load(diary_path))
check_parser.set_defaults(func=_check_exec)
stats_parser = subparsers.add_parser('stats', help='Calculate impressive '
'diary statistics')
stats_parser.add_argument('file', nargs='?')
def _stats_exec(args: Namespace) -> None:
print('Stats\n-----')
if args.file:
diary = Diary(dict(sources=[str(args.file)]))
diary.load_entries()
else:
diary = Diary.discover_and_load(diary_path)
stats(diary)
stats_parser.set_defaults(func=_stats_exec)
html_parser = subparsers.add_parser('html', help='Export diary to html')
html_parser.add_argument('file')
def _html_exec(args: Namespace) -> None:
print('Exporting diary in HTML to {}'.format(args.file))
diary_to_html(Diary.discover_and_load(diary_path), args.file)
html_parser.set_defaults(func=_html_exec)
html_folder_parser = subparsers.add_parser('htmlfolder',
help='Export diary to html '
'in folders')
html_folder_parser.add_argument('folder')
def _html_folder_exec(args: Namespace) -> None:
print('Exporting diary in HTML to {}'.format(args.folder))
diary_to_html_folder(Diary.discover_and_load(diary_path), args.folder)
html_folder_parser.set_defaults(func=_html_folder_exec)
hugo_parser = subparsers.add_parser('hugo', help='Export diary to hugo static '
'site format')
hugo_parser.add_argument('folder')
def _hugo_exec(args: Namespace) -> None:
print('Exporting diary in hugo static site format to {}'
.format(args.folder))
diary_to_hugo(Diary.discover_and_load(diary_path), args.folder)
hugo_parser.set_defaults(func=_hugo_exec)
tiddler_parser = subparsers.add_parser('tiddlers',
help='Export diary to tiddlywiki '
'tiddlers format')
tiddler_parser.add_argument('folder')
def _tiddlers_exec(args: Namespace) -> None:
print('Exporting diary in tiddlywiki tiddlers format to {}'
.format(args.folder))
diary_to_tiddlers_export(Diary.discover_and_load(diary_path), args.folder)
tiddler_parser.set_defaults(func=_tiddlers_exec)
tiddlywiki_parser = subparsers.add_parser('tiddlywiki',
help='Export diary to tiddlywiki')
tiddlywiki_parser.add_argument('-t', '--tiddlywiki-base-file',
help='path to tiddlywiki base file to '
'copy for export',
default='empty.html', type=str)
tiddlywiki_parser.add_argument('file')
def _tiddlywiki_exec(args: Namespace) -> None:
print('Exporting diary to tiddlywiki as {} with tiddlywiki base file {}'
.format(args.file, args.tiddlywiki_base_file))
diary_to_tiddlywiki_export(Diary.discover_and_load(diary_path),
args.file, args.tiddlywiki_base_file)
tiddlywiki_parser.set_defaults(func=_tiddlywiki_exec)
view_parser = subparsers.add_parser('view',
help='View entries on command line')
[docs]def parse_date(sdate: str) -> date:
if sdate.lower() == 'today':
return date.today()
if sdate.lower() == 'yesterday':
return date.today()-timedelta(days=1)
if sdate.lower() == 'lastyear':
t = date.today()
return date(t.year-1, t.month, t.day)
return datetime.strptime(sdate, '%Y-%m-%d').date()
view_parser.add_argument('date', type=parse_date)
def _view_exec(args: Namespace) -> None:
view(Diary.discover_and_load(diary_path), args.date)
view_parser.set_defaults(func=_view_exec)
[docs]def main() -> None:
import sys
try:
if len(sys.argv) <= 1:
print('hyperdiary version {}'.format(__version__))
parser.print_help()
else:
args = parser.parse_args()
args.func(args)
except Exception as e:
import traceback
tb = sys.exc_info()[2]
RED = ''
try:
import colorama
colorama.init(autoreset=True)
RED = colorama.Back.RED
except ImportError:
pass
traceback.print_tb(tb)
print(RED + type(e).__name__ + ': ' + str(e))