Prevent filtered deletion from deleting entire journal #932 and add lots of deletion tests

This commit is contained in:
Micah Jerome Ellison 2020-05-02 13:14:02 -07:00
parent 3820c1f4ba
commit 1c2432ba08
6 changed files with 186 additions and 5 deletions

View file

@ -234,8 +234,15 @@ class Journal:
self.entries = result
def delete_entries(self, entries_to_delete):
"""Deletes specific entries from a journal."""
self.entries = [
entry for entry in self.entries if entry not in entries_to_delete
]
def prompt_delete_entries(self):
"""Prompts for deletion of entries in a journal."""
"""Prompts for deletion of each of the entries in a journal.
Returns the entries the user wishes to delete."""
to_delete = []
@ -248,8 +255,7 @@ class Journal:
if ask_delete(entry):
to_delete.append(entry)
self.entries = [entry for entry in self.entries if entry not in to_delete]
self.write()
return to_delete
def new_entry(self, raw, date=None, sort=True):
"""Constructs a new entry from some raw text input.

View file

@ -335,6 +335,7 @@ def run(manual_args=None):
config = util.scope_config(config, journal_name)
log.debug('Using journal "%s"', journal_name)
mode_compose, mode_export, mode_import = guess_mode(args, config)
# How to quit writing?
@ -478,5 +479,16 @@ def run(manual_args=None):
journal.write()
elif args.delete:
journal.prompt_delete_entries()
journal.write()
if journal.entries:
entries_to_delete = journal.prompt_delete_entries()
if entries_to_delete:
journal.entries = old_entries
journal.delete_entries(entries_to_delete)
journal.write()
else:
print(
"No entries deleted, because the search returned no results.",
file=sys.stderr,
)