From c2a7a67f303784edd7a105e63274e57137910cb2 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 27 Jul 2014 22:57:50 +0200 Subject: [PATCH] Add some more init checks and use Tk for errors --- qutebrowser/qutebrowser.py | 21 +++++++++++++++++---- qutebrowser/utils/checkpyver.py | 25 +++++++++++++++++++++---- qutebrowser/utils/earlyinit.py | 11 ++++++++++- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/qutebrowser/qutebrowser.py b/qutebrowser/qutebrowser.py index 7c62acbc6..73ca06e45 100644 --- a/qutebrowser/qutebrowser.py +++ b/qutebrowser/qutebrowser.py @@ -15,14 +15,27 @@ # You should have received a copy of the GNU General Public License # along with qutebrowser. If not, see . -"""Early initialization and main entry pint.""" +"""Early initialization and main entry point.""" - -from argparse import ArgumentParser +import sys import qutebrowser -from qutebrowser.utils.checkpyver import check_python_version +try: + from qutebrowser.utils.checkpyver import check_python_version +except ImportError: + try: + # python2 + from .utils.checkpyver import check_python_version + except (SystemError, ValueError): + # Import without module - SystemError on Python3, ValueError (?!?) on + # Python2 + sys.stderr.write("Please don't run this script directly, do something " + "like python3 -m qutebrowser instead.\n") + sys.stderr.flush() + sys.exit(100) check_python_version() + +from argparse import ArgumentParser import qutebrowser.utils.earlyinit as earlyinit diff --git a/qutebrowser/utils/checkpyver.py b/qutebrowser/utils/checkpyver.py index df70d6de8..fcc889bf2 100644 --- a/qutebrowser/utils/checkpyver.py +++ b/qutebrowser/utils/checkpyver.py @@ -22,6 +22,18 @@ This should import and run fine with both python2 and python3. import sys +try: + # Python3 + from tkinter import Tk, messagebox +except ImportError: + try: + # Python2 + from Tkinter import Tk + import tkMessageBox as messagebox + except ImportError: + # Some Python without Tk + Tk = None + # First we check the version of Python. This code should run fine with python2 # and python3. We don't have Qt available here yet, so we just print an error @@ -32,8 +44,13 @@ def check_python_version(): # We don't use .format() and print_function here just in case someone # still has < 2.6 installed. version_str = '.'.join(map(str, sys.version_info[:3])) - sys.stderr.write("Fatal error: At least Python 3.3 is required to run " - "qutebrowser, but " + version_str + " is " - "installed!\n") - sys.stderr.flush() + text = ("At least Python 3.3 is required to run qutebrowser, but " + + version_str + " is installed!\n") + if Tk: + root = Tk() + root.withdraw() + messagebox.showerror("qutebrowser: Fatal error!", text) + else: + sys.stderr.write(text) + sys.stderr.flush() sys.exit(1) diff --git a/qutebrowser/utils/earlyinit.py b/qutebrowser/utils/earlyinit.py index 5d31c9222..3a4605852 100644 --- a/qutebrowser/utils/earlyinit.py +++ b/qutebrowser/utils/earlyinit.py @@ -25,6 +25,10 @@ import sys import faulthandler import traceback import signal +try: + from tkinter import Tk, messagebox +except ImportError: + Tk = None def _missing_str(name, debian=None, arch=None, windows=None, pip=None): @@ -175,7 +179,12 @@ def check_pyqt_core(): "or the standalone qutebrowser exe.\n" "http://www.riverbankcomputing.co.uk/" "software/pyqt/download5") - print(text) + if Tk: + root = Tk() + root.withdraw() + messagebox.showerror("qutebrowser: Fatal error!", text) + else: + print(text, file=sys.stderr) if '--debug' in sys.argv: print(file=sys.stderr) traceback.print_exc()