From 7d3afd811ba2c32463391b709331019e3cbfc40f Mon Sep 17 00:00:00 2001 From: MinchinWeb Date: Wed, 3 Jun 2015 21:47:31 -0600 Subject: [PATCH] [Dayone] reverse fd46ffea23eb1cb98121bde3a3993a4fa56e1afb Brings back extended Dayone attributes --- jrnl/DayOneJournal.py | 55 ++++++++++++++++++++++++++++++++++- jrnl/plugins/yaml_exporter.py | 46 ++++++++++++++++++++--------- 2 files changed, 86 insertions(+), 15 deletions(-) diff --git a/jrnl/DayOneJournal.py b/jrnl/DayOneJournal.py index 862c8aec..53709694 100644 --- a/jrnl/DayOneJournal.py +++ b/jrnl/DayOneJournal.py @@ -5,6 +5,8 @@ from __future__ import absolute_import, unicode_literals from . import Entry from . import Journal from . import time as jrnl_time +from . import __title__ # 'jrnl' +from . import __version__ import os import re from datetime import datetime @@ -15,6 +17,8 @@ import pytz import uuid import tzlocal from xml.parsers.expat import ExpatError +import socket +import platform class DayOne(Journal.Journal): @@ -51,6 +55,36 @@ class DayOne(Journal.Journal): entry = Entry.Entry(self, date, text=dict_entry['Entry Text'], starred=dict_entry["Starred"]) entry.uuid = dict_entry["UUID"] entry._tags = [self.config['tagsymbols'][0] + tag.lower().replace(" ", "_") for tag in dict_entry.get("Tags", [])] + + # Extended DayOne attributes + try: + entry.creator_device_agent = dict_entry['Creator']['Device Agent'] + except: + pass + try: + entry.creator_generation_date = dict_entry['Creator']['Generation Date'] + except: + entry.creator_generation_date = date + try: + entry.creator_host_name = dict_entry['Creator']['Host Name'] + except: + pass + try: + entry.creator_os_agent = dict_entry['Creator']['OS Agent'] + except: + pass + try: + entry.creator_software_agent = dict_entry['Creator']['Software Agent'] + except: + pass + try: + entry.location = dict_entry['Location'] + except: + pass + try: + entry.weather = dict_entry['Weather'] + except: + pass self.entries.append(entry) self.sort() return self @@ -63,6 +97,16 @@ class DayOne(Journal.Journal): if not hasattr(entry, "uuid"): entry.uuid = uuid.uuid1().hex + if not hasattr(entry, "creator_device_agent"): + entry.creator_device_agent = '' # iPhone/iPhone5,3 + if not hasattr(entry, "creator_generation_date"): + entry.creator_generation_date = utc_time + if not hasattr(entry, "creator_host_name"): + entry.creator_host_name = socket.gethostname() + if not hasattr(entry, "creator_os_agent"): + entry.creator_os_agent = '{}/{}'.format(platform.system(), platform.release()) + if not hasattr(entry, "creator_software_agent"): + entry.creator_software_agent = '{}/{}'.format(__title__, __version__) filename = os.path.join(self.config['journal'], "entries", entry.uuid.upper() + ".doentry") @@ -72,8 +116,17 @@ class DayOne(Journal.Journal): 'Entry Text': entry.title + "\n" + entry.body, 'Time Zone': str(tzlocal.get_localzone()), 'UUID': entry.uuid.upper(), - 'Tags': [tag.strip(self.config['tagsymbols']).replace("_", " ") for tag in entry.tags] + 'Tags': [tag.strip(self.config['tagsymbols']).replace("_", " ") for tag in entry.tags], + 'Creator': {'Device Agent': entry.creator_device_agent, + 'Generation Date': entry.creator_generation_date, + 'Host Name': entry.creator_host_name, + 'OS Agent': entry.creator_os_agent, + 'Sofware Agent': entry.creator_software_agent} } + if hasattr(entry, 'location'): + entry_plist['Location'] = entry.location + if hasattr(entry, 'weather'): + entry_plist['Weather'] = entry.weather plistlib.writePlist(entry_plist, filename) for entry in self._deleted_entries: filename = os.path.join(self.config['journal'], "entries", entry.uuid + ".doentry") diff --git a/jrnl/plugins/yaml_exporter.py b/jrnl/plugins/yaml_exporter.py index cc1500dc..b856e73b 100644 --- a/jrnl/plugins/yaml_exporter.py +++ b/jrnl/plugins/yaml_exporter.py @@ -58,25 +58,43 @@ class YAMLExporter(TextExporter): newbody = newbody + previous_line # add very last line if warn_on_heading_level is True: - print("{}WARNING{}: Headings increased past H6 on export - {} {}" \ - .format(WARNING_COLOR, RESET_COLOR, date_str, entry.title), file=sys.stderr) + print("{}WARNING{}: Headings increased past H6 on export - {} {}" + .format(WARNING_COLOR, RESET_COLOR, date_str, entry.title), file=sys.stderr) dayone_attributes = '' if hasattr(entry, "uuid"): dayone_attributes += 'uuid: ' + entry.uuid + '\n' - # TODO: copy over pictures, if present - # source directory is entry.journal.config['journal'] - # output directory is...? + if hasattr(entry, 'creator_device_agent') or \ + hasattr(entry, 'creator_generation_date') or \ + hasattr(entry, 'creator_host_name') or \ + hasattr(entry, 'creator_os_agent') or \ + hasattr(entry, 'creator_software_agent'): + dayone_attributes += 'creator:\n' + if hasattr(entry, 'creator_device_agent'): + dayone_attributes += ' device agent: {}\n'.format(entry.creator_device_agent) + if hasattr(entry, 'creator_generation_date'): + dayone_attributes += ' generation date: {}\n'.format(str(entry.creator_generation_date)) + if hasattr(entry, 'creator_host_name'): + dayone_attributes += ' host name: {}\n'.format(entry.creator_host_name) + if hasattr(entry, 'creator_os_agent'): + dayone_attributes += ' os agent: {}\n'.format(entry.creator_os_agent) + if hasattr(entry, 'creator_software_agent'): + dayone_attributes += ' software agent: {}\n'.format(entry.creator_software_agent) - return "title: {title}\ndate: {date}\nstared: {stared}\ntags: {tags}\n{dayone} {body} {space}".format( - date = date_str, - title = entry.title, - stared = entry.starred, - tags = ', '.join([tag[1:] for tag in entry.tags]), - dayone = dayone_attributes, - body = newbody, - space="" - ) + # TODO: copy over pictures, if present + # source directory is entry.journal.config['journal'] + # output directory is...? + + return "title: {title}\ndate: {date}\nstared: {stared}\ntags: {tags}\n{dayone} {body} {space}" \ + .format( + date=date_str, + title=entry.title, + stared=entry.starred, + tags=', '.join([tag[1:] for tag in entry.tags]), + dayone=dayone_attributes, + body=newbody, + space="" + ) @classmethod def export_journal(cls, journal):