From 7c264367e76d32d4fa9146c4b4c9304a837a7939 Mon Sep 17 00:00:00 2001 From: Aniket Pant Date: Tue, 26 Mar 2013 22:12:46 +0530 Subject: [PATCH] [Export to files] Added new utility Signed-off-by: Aniket Pant --- jrnl/exporters.py | 24 ++++++++++++++++++++++++ jrnl/jrnl.py | 8 ++++++++ 2 files changed, 32 insertions(+) diff --git a/jrnl/exporters.py b/jrnl/exporters.py index dfca5d78..c95308c3 100644 --- a/jrnl/exporters.py +++ b/jrnl/exporters.py @@ -1,6 +1,8 @@ #!/usr/bin/env python # encoding: utf-8 +import re +import os try: import simplejson as json except ImportError: import json @@ -23,3 +25,25 @@ def to_md(journal): out.append('-' * len(e.date.strftime("%B")) + "\n") out.append(e.to_md()) return "\n".join(out) + +def to_files(journal, directory, extension): + """Turns your journal into separate files for each entry.""" + if extension: + ext = "." + extension + else: + ext = '' + + if not os.path.exists(directory): + os.makedirs(directory) + + for e in journal.entries: + date = e.date.strftime('%Y-%m-%d') + title = re.sub('[^\w-]', '', re.sub(' ', '-', e.title.lower())) + filename = date + '-' + title + ext + f = open(directory + "/" + filename, 'w+') + if extension == 'md': + f.write(str(e.to_md())) + else: + f.write(str(e)) + f.close() + return ("Journal exported to directory '" + directory + "' as " + ext) diff --git a/jrnl/jrnl.py b/jrnl/jrnl.py index 6abbf98c..f153449c 100755 --- a/jrnl/jrnl.py +++ b/jrnl/jrnl.py @@ -49,6 +49,11 @@ def parse_args(): exporting.add_argument('--decrypt', metavar='FILENAME', dest='decrypt', help='Decrypts your journal and stores it in plain text', nargs='?', default=False, const=None) exporting.add_argument('--delete-last', dest='delete_last', help='Deletes the last entry from your journal file.', action="store_true") + exporting_to_files = parser.add_argument_group('Export to files', 'Options for exporting your journal to individual files') + exporting_to_files.add_argument('--files', dest='files', action="store_true", help='Turns your journal into separate files for each entry') + exporting_to_files.add_argument('--dir', metavar='DIRECTORY', dest='directory', help='The directory you want to export the files to', nargs='?', default='journal', const=None) + exporting_to_files.add_argument('--ext', metavar='EXTENSION', dest='extension', help='The extension of the exported files', nargs='?', default=False, const=None) + return parser.parse_args() def guess_mode(args, config): @@ -202,6 +207,9 @@ def cli(): elif args.markdown: # export to markdown print(exporters.to_md(journal)) + elif args.files: # export to files + print(exporters.to_files(journal, args.directory, args.extension)) + elif (args.encrypt is not False or args.decrypt is not False) and not PYCRYPTO: print("PyCrypto not found. To encrypt or decrypt your journal, install the PyCrypto package from http://www.pycrypto.org.")