diff --git a/features/custom_dates.feature b/features/custom_dates.feature new file mode 100644 index 000000000..d3489648e --- /dev/null +++ b/features/custom_dates.feature @@ -0,0 +1,35 @@ +Feature: Reading and writing to journal with custom date formats + + Scenario: Loading a sample journal + Given we use the config "little_endian_dates.yaml" + When we run "jrnl -n 2" + Then we should get no error + And the output should be + """ + 09.06.2013 15:39 My first entry. + | Everything is alright + + 10.06.2013 15:40 Life is good. + | But I'm better. + """ + + Scenario: Writing an entry from command line + Given we use the config "little_endian_dates.yaml" + When we run "jrnl 2013-07-12: A cold and stormy day. I ate crisps on the sofa." + Then we should see the message "Entry added" + When we run "jrnl -n 1" + Then the output should contain "12.07.2013 09:00 A cold and stormy day." + + Scenario: Filtering for dates + Given we use the config "little_endian_dates.yaml" + When we run "jrnl -on 2013-06-10 --short" + Then the output should be "10.06.2013 15:40 Life is good." + When we run "jrnl -on 'june 6 2013' --short" + Then the output should be "10.06.2013 15:40 Life is good." + + Scenario: Writing an entry at the prompt + Given we use the config "little_endian_dates.yaml" + When we run "jrnl" and enter "2013-05-10: I saw Elvis. He's alive." + Then we should get no error + And the journal should contain "[10.05.2013 09:00] I saw Elvis." + And the journal should contain "He's alive." \ No newline at end of file diff --git a/features/data/configs/little_endian_dates.yaml b/features/data/configs/little_endian_dates.yaml new file mode 100644 index 000000000..223c820d8 --- /dev/null +++ b/features/data/configs/little_endian_dates.yaml @@ -0,0 +1,12 @@ +default_hour: 9 +default_minute: 0 +editor: "" +encrypt: false +highlight: true +journals: + default: features/journals/little_endian_dates.journal +linewrap: 80 +tagsymbols: "@" +template: false +timeformat: "%d.%m.%Y %H:%M" +indent_character: "|" diff --git a/features/data/configs/upgrade_from_195_little_endian_dates.json b/features/data/configs/upgrade_from_195_little_endian_dates.json new file mode 100644 index 000000000..7d3c470c8 --- /dev/null +++ b/features/data/configs/upgrade_from_195_little_endian_dates.json @@ -0,0 +1,11 @@ +{ +"default_hour": 9, +"timeformat": "%d.%m.%Y %H:%M", +"linewrap": 80, +"encrypt": false, +"editor": "", +"default_minute": 0, +"highlight": true, +"journals": {"default": "features/journals/simple_jrnl-1-9-5_little_endian_dates.journal"}, +"tagsymbols": "@" +} diff --git a/features/data/journals/little_endian_dates.journal b/features/data/journals/little_endian_dates.journal new file mode 100644 index 000000000..a3c5c3019 --- /dev/null +++ b/features/data/journals/little_endian_dates.journal @@ -0,0 +1,5 @@ +[09.06.2013 15:39] My first entry. +Everything is alright + +[10.06.2013 15:40] Life is good. +But I'm better. diff --git a/features/data/journals/simple_jrnl-1-9-5_little_endian_dates.journal b/features/data/journals/simple_jrnl-1-9-5_little_endian_dates.journal new file mode 100644 index 000000000..328b23f4e --- /dev/null +++ b/features/data/journals/simple_jrnl-1-9-5_little_endian_dates.journal @@ -0,0 +1,13 @@ +10.06.2010 15:00 A life without chocolate is like a bad analogy. + +10.06.2013 15:40 He said "[this] is the best time to be alive". +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent malesuada +quis est ac dignissim. Aliquam dignissim rutrum pretium. Phasellus pellentesque +augue et venenatis facilisis. + +[03.08.2019 12:55] Some chat log or something + +Suspendisse potenti. Sed dignissim sed nisl eu consequat. Aenean ante ex, +elementum ut interdum et, mattis eget lacus. In commodo nulla nec tellus +placerat, sed ultricies metus bibendum. Duis eget venenatis erat. In at dolor +dui. diff --git a/features/upgrade.feature b/features/upgrade.feature index ddcce4943..ef597d4f5 100644 --- a/features/upgrade.feature +++ b/features/upgrade.feature @@ -21,3 +21,14 @@ Feature: Upgrading Journals from 1.x.x to 2.x.x """ Then the output should contain "Password" and the output should contain "2013-06-10 15:40 Life is good" + + Scenario: Upgrade and parse journals with little endian date format + Given we use the config "upgrade_from_195_little_endian_dates.json" + When we run "jrnl -9" and enter "Y" + Then the output should contain + """ + 10.06.2010 15:00 A life without chocolate is like a bad analogy. + + 10.06.2013 15:40 He said "[this] is the best time to be alive". + """ + Then the journal should have 2 entries diff --git a/jrnl/Journal.py b/jrnl/Journal.py index f130823d6..f68132224 100644 --- a/jrnl/Journal.py +++ b/jrnl/Journal.py @@ -119,7 +119,11 @@ def _parse(self, journal_txt): last_entry_pos = 0 for match in date_blob_re.finditer(journal_txt): date_blob = match.groups()[0] - new_date = time.parse(date_blob) + try: + new_date = datetime.strptime(date_blob, self.config["timeformat"]) + except ValueError: + new_date = time.parse(date_blob) + if new_date: if entries: entries[-1].text = journal_txt[last_entry_pos:match.start()]