fixup alichtman's implementation

This commit is contained in:
dbxnr 2020-02-12 05:15:47 +00:00
parent 972a00f478
commit 9bbc38b7ce
5 changed files with 46 additions and 26 deletions

View file

@ -71,17 +71,3 @@ Feature: Basic reading and writing to a journal
Given we use the config "basic.yaml"
When we run "jrnl -on 2013-06-10 -s"
Then the output should be "2013-06-10 15:40 Life is good."
# The input for this test is <SPACE><ENTER>y
Scenario: --delete flag allows deletion of single entry
Given we use the config "deletion.yaml"
When we run "jrnl --delete"
And we type " "
And we type
"""
y
"""
When we run "jrnl -on 2019-10-29 -s"
Then the output should not contain "2019-10-29 11:11 First entry."

20
features/delete.feature Normal file
View file

@ -0,0 +1,20 @@
Feature: Delete entries from journal
Scenario: --delete flag allows deletion of single entry
Given we use the config "deletion.yaml"
When we run "jrnl -n 1"
Then the output should contain
"""
2019-10-29 11:13 Third entry.
"""
When we run "jrnl --delete" and enter
"""
N
N
Y
"""
When we run "jrnl -n 1"
Then the output should contain
"""
2019-10-29 11:11 Second entry.
"""

View file

@ -1,13 +1,15 @@
#!/usr/bin/env python
from . import Entry
from . import util
from . import time
import logging
import os
import sys
import re
from datetime import datetime
import logging
from itertools import filterfalse
from jrnl import Entry
from jrnl import util
from jrnl import time
log = logging.getLogger(__name__)
@ -111,7 +113,8 @@ class Journal:
def _load(self, filename):
raise NotImplementedError
def _store(self, filename, text):
@classmethod
def _store(filename, text):
raise NotImplementedError
def _parse(self, journal_txt):
@ -249,20 +252,26 @@ class Journal:
def prompt_delete_entries(self):
"""Prompts for deletion of entries in a journal."""
print("Confirm each entry you want to delete [N/y]:")
to_delete: List[Entry] = []
to_delete = []
def ask_delete(entry):
return util.yesno(
f"Delete entry '{entry.pprint(short=True)}'?", default=False,
)
for entry in self.entries:
response = input("jrnl: Delete entry '{}'? ".format(entry.pprint(short=True)))
if response == "y":
if ask_delete(entry):
to_delete.append(entry)
self.entries = [entry for entry in self.entries if entry not in to_delete]
self.write()
def new_entry(self, raw, date=None, sort=True):
"""Constructs a new entry from some raw text input.
If a date is given, it will parse and use this, otherwise scan for a date in the input first."""
raw = raw.replace('\\n ', '\n').replace('\\n', '\n')
raw = raw.replace("\\n ", "\n").replace("\\n", "\n")
# Split raw text into title and body
sep = re.search(r"\n|[?!.]+ +\n?", raw)
first_line = raw[: sep.end()].strip() if sep else raw

View file

@ -173,7 +173,12 @@ def parse_args(args=None):
action="store_true",
)
exporting.add_argument('--delete', dest='delete', action="store_true", help='Opens an interactive interface for deleting entries.')
exporting.add_argument(
"--delete",
dest="delete",
action="store_true",
help="Opens an interactive interface for deleting entries.",
)
return parser.parse_args(args)

View file

@ -112,7 +112,7 @@ def set_keychain(journal_name, password):
def yesno(prompt, default=True):
prompt = f"{prompt.strip()} {'[Y/n]' if default else '[y/N]'} "
response = input(prompt)
return {"y": True, "n": False}.get(response.lower(), default)
return {"y": True, "n": False}.get(response.lower().strip(), default)
def load_config(config_path):