From ca43eac3fc1acd0fbdc0f0a2b5cbef12ceedd5a9 Mon Sep 17 00:00:00 2001 From: Michael Lazar Date: Sun, 29 Mar 2015 18:06:47 -0700 Subject: [PATCH] Added error handling for editor. --- rtv/__main__.py | 5 ++++- rtv/exceptions.py | 5 +++++ rtv/helpers.py | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/rtv/__main__.py b/rtv/__main__.py index c86169e..5066d8c 100644 --- a/rtv/__main__.py +++ b/rtv/__main__.py @@ -10,7 +10,7 @@ import praw.errors from six.moves import configparser from . import config -from .exceptions import SubmissionError, SubredditError +from .exceptions import SubmissionError, SubredditError, ProgramError from .curses_helpers import curses_session from .submission import SubmissionPage from .subreddit import SubredditPage @@ -99,6 +99,9 @@ def main(): print('Could not reach submission URL: {}'.format(e.url)) except SubredditError as e: print('Could not reach subreddit: {}'.format(e.name)) + except ProgramError as e: + print('Error: could not open file with program "{}", ' + 'try setting RTV_EDITOR'.format(e.name)) except KeyboardInterrupt: return diff --git a/rtv/exceptions.py b/rtv/exceptions.py index cd935bb..c8b980a 100644 --- a/rtv/exceptions.py +++ b/rtv/exceptions.py @@ -8,5 +8,10 @@ class SubredditError(Exception): def __init__(self, name): self.name = name +class ProgramError(Exception): + "Problem executing an external program" + def __init__(self, name): + self.name = name + class EscapeInterrupt(Exception): "Signal that the ESC key has been pressed" \ No newline at end of file diff --git a/rtv/helpers.py b/rtv/helpers.py index 04c6fa3..5f54068 100644 --- a/rtv/helpers.py +++ b/rtv/helpers.py @@ -6,6 +6,7 @@ from datetime import datetime from tempfile import NamedTemporaryFile from . import config +from .exceptions import ProgramError __all__ = ['open_browser', 'clean', 'wrap_text', 'strip_textpad', 'strip_subreddit_url', 'humanize_timestamp', 'open_editor'] @@ -23,7 +24,11 @@ def open_editor(data=''): fp.write(data) fp.flush() editor = os.getenv('RTV_EDITOR') or os.getenv('EDITOR') or 'nano' - subprocess.Popen([editor, fp.name]).wait() + + try: + subprocess.Popen([editor, fp.name]).wait() + except OSError as e: + raise ProgramError(editor) # Open a second file object to read. This appears to be necessary in # order to read the changes made by some editors (gedit). w+ mode does