mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
Yaml export errors now don't show stack trace (#1449)
* Yaml export errors now don't show stacktrace * Add test for user-friendly error when exporting YAML to a nonexistent directory * Leave partially written to files after export error * unskip working tests Co-authored-by: Micah Jerome Ellison <micah.jerome.ellison@gmail.com> Co-authored-by: Jonathan Wren <jonathan@nowandwren.com>
This commit is contained in:
parent
048c9d40e7
commit
74200f8dc4
3 changed files with 22 additions and 8 deletions
|
@ -35,6 +35,8 @@ class TextExporter:
|
||||||
return f"[Journal exported to {path}]"
|
return f"[Journal exported to {path}]"
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
return f"[{ERROR_COLOR}ERROR{RESET_COLOR}: {e.filename} {e.strerror}]"
|
return f"[{ERROR_COLOR}ERROR{RESET_COLOR}: {e.filename} {e.strerror}]"
|
||||||
|
except RuntimeError as e:
|
||||||
|
return e
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def make_filename(cls, entry):
|
def make_filename(cls, entry):
|
||||||
|
@ -54,6 +56,8 @@ class TextExporter:
|
||||||
return "[{2}ERROR{3}: {0} {1}]".format(
|
return "[{2}ERROR{3}: {0} {1}]".format(
|
||||||
e.filename, e.strerror, ERROR_COLOR, RESET_COLOR
|
e.filename, e.strerror, ERROR_COLOR, RESET_COLOR
|
||||||
)
|
)
|
||||||
|
except RuntimeError as e:
|
||||||
|
return e
|
||||||
return "[Journal exported to {}]".format(path)
|
return "[Journal exported to {}]".format(path)
|
||||||
|
|
||||||
def _slugify(string):
|
def _slugify(string):
|
||||||
|
|
|
@ -23,12 +23,10 @@ class YAMLExporter(TextExporter):
|
||||||
def export_entry(cls, entry, to_multifile=True):
|
def export_entry(cls, entry, to_multifile=True):
|
||||||
"""Returns a markdown representation of a single entry, with YAML front matter."""
|
"""Returns a markdown representation of a single entry, with YAML front matter."""
|
||||||
if to_multifile is False:
|
if to_multifile is False:
|
||||||
print(
|
raise RuntimeError(
|
||||||
f"{ERROR_COLOR}ERROR{RESET_COLOR}: YAML export must be to individual files. Please \
|
f"{ERROR_COLOR}ERROR{RESET_COLOR}: YAML export must be to individual files. Please \
|
||||||
specify a directory to export to.",
|
specify a directory to export to."
|
||||||
file=sys.stderr,
|
|
||||||
)
|
)
|
||||||
return
|
|
||||||
|
|
||||||
date_str = entry.date.strftime(entry.journal.config["timeformat"])
|
date_str = entry.date.strftime(entry.journal.config["timeformat"])
|
||||||
body_wrapper = "\n" if entry.body else ""
|
body_wrapper = "\n" if entry.body else ""
|
||||||
|
@ -131,10 +129,8 @@ class YAMLExporter(TextExporter):
|
||||||
@classmethod
|
@classmethod
|
||||||
def export_journal(cls, journal):
|
def export_journal(cls, journal):
|
||||||
"""Returns an error, as YAML export requires a directory as a target."""
|
"""Returns an error, as YAML export requires a directory as a target."""
|
||||||
print(
|
raise RuntimeError(
|
||||||
"{}ERROR{}: YAML export must be to individual files. Please specify a directory to export to.".format(
|
"{}ERROR{}: YAML export must be to individual files. Please specify a directory to export to.".format(
|
||||||
ERROR_COLOR, RESET_COLOR
|
ERROR_COLOR, RESET_COLOR
|
||||||
),
|
)
|
||||||
file=sys.stderr,
|
|
||||||
)
|
)
|
||||||
return
|
|
||||||
|
|
|
@ -425,6 +425,20 @@ Feature: Custom formats
|
||||||
| basic_folder.yaml |
|
| basic_folder.yaml |
|
||||||
# | basic_dayone.yaml |
|
# | basic_dayone.yaml |
|
||||||
|
|
||||||
|
Scenario Outline: Exporting YAML to nonexistent directory leads to user-friendly error with no traceback
|
||||||
|
Given we use the config "<config_file>"
|
||||||
|
And we use the password "test" if prompted
|
||||||
|
When we run "jrnl --export yaml --file nonexistent_dir"
|
||||||
|
Then the output should contain "YAML export must be to individual files"
|
||||||
|
And the output should not contain "Traceback"
|
||||||
|
|
||||||
|
Examples: configs
|
||||||
|
| config_file |
|
||||||
|
| basic_onefile.yaml |
|
||||||
|
| basic_encrypted.yaml |
|
||||||
|
| basic_folder.yaml |
|
||||||
|
| basic_dayone.yaml |
|
||||||
|
|
||||||
@skip_win # @todo YAML exporter does not correctly export emoji on Windows
|
@skip_win # @todo YAML exporter does not correctly export emoji on Windows
|
||||||
Scenario Outline: Add a blank line to YAML export if there isn't one already
|
Scenario Outline: Add a blank line to YAML export if there isn't one already
|
||||||
# https://github.com/jrnl-org/jrnl/issues/768
|
# https://github.com/jrnl-org/jrnl/issues/768
|
||||||
|
|
Loading…
Add table
Reference in a new issue