Raise exception when trying to commit folder-based journal (including DayOne)

This commit is contained in:
Micah Jerome Ellison 2021-07-31 16:58:22 -07:00
parent b23c831da5
commit abab1852fd
5 changed files with 26 additions and 0 deletions

View file

@ -32,6 +32,7 @@ class DayOne(Journal.Journal):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.entries = [] self.entries = []
self._deleted_entries = [] self._deleted_entries = []
self.cannot_be_encrypted = True
super().__init__(**kwargs) super().__init__(**kwargs)
def open(self): def open(self):

View file

@ -25,6 +25,7 @@ class Folder(Journal.Journal):
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.entries = [] self.entries = []
self._diff_entry_dates = [] self._diff_entry_dates = []
self.cannot_be_encrypted = True
super(Folder, self).__init__(**kwargs) super(Folder, self).__init__(**kwargs)
def open(self): def open(self):

View file

@ -13,6 +13,7 @@ avoid any possible overhead for these standalone commands.
""" """
import platform import platform
import sys import sys
from .exception import JrnlError
def preconfig_diagnostic(_): def preconfig_diagnostic(_):
@ -68,6 +69,13 @@ def postconfig_encrypt(args, config, original_config, **kwargs):
# Open the journal # Open the journal
journal = open_journal(args.journal_name, config) journal = open_journal(args.journal_name, config)
if hasattr(journal, "cannot_be_encrypted") and journal.cannot_be_encrypted:
raise JrnlError(
"CannotEncryptJournalType",
journal_name=args.journal_name,
journal_type=journal.__class__.__name__,
)
journal.config["encrypt"] = True journal.config["encrypt"] = True
new_journal = EncryptedJournal.from_journal(journal) new_journal = EncryptedJournal.from_journal(journal)

View file

@ -38,6 +38,13 @@ class JrnlError(Exception):
by at least {columns} in the configuration file or by using by at least {columns} in the configuration file or by using
--config-override at the command line --config-override at the command line
""", """,
"CannotEncryptJournalType": """
The journal {journal_name} can't be encrypted because it is a
{journal_type} journal.
To encrypt it, create a new journal referencing a file, export
this journal to the new journal, then encrypt the new journal.
""",
} }
msg = error_messages[self.error_type].format(**kwargs) msg = error_messages[self.error_type].format(**kwargs)

View file

@ -40,3 +40,12 @@ Feature: Encrypting and decrypting journals
Then we should be prompted for a password Then we should be prompted for a password
And the output should contain "2013-06-10 15:40 Life is good" And the output should contain "2013-06-10 15:40 Life is good"
Scenario Outline: Attempt to encrypt a folder or DayOne journal should result in an error
Given we use the config "<config_file>"
When we run "jrnl --encrypt"
Then the error output should contain "can't be encrypted"
Examples: configs
| config_file |
| empty_folder.yaml |
| dayone.yaml |