Avoid keyconf circular import.

The new function-based completion API introduced a circular import:
config -> keyconf -> miscmodels -> config.

config only depended on keyconf so it could initialize it as part of
config.init. This can be resolved by moving this to keyconf.init and
initializing keyconf as part of app.init.
This commit is contained in:
Ryan Roden-Corrent 2017-02-17 08:13:36 -05:00
parent fc5fd6096a
commit 6cc2095221
3 changed files with 37 additions and 2 deletions

View File

@ -45,6 +45,7 @@ import qutebrowser.resources
from qutebrowser.completion.models import miscmodels
from qutebrowser.commands import cmdutils, runners, cmdexc
from qutebrowser.config import style, config, websettings, configexc
from qutebrowser.config.parsers import keyconf
from qutebrowser.browser import (urlmarks, adblock, history, browsertab,
downloads)
from qutebrowser.browser.network import proxy
@ -423,6 +424,10 @@ def _init_modules(args, crash_handler):
config.init(qApp)
save_manager.init_autosave()
log.init.debug("Initializing keys...")
keyconf.init(qApp)
save_manager.init_autosave()
log.init.debug("Initializing sql...")
sql.init()

View File

@ -249,7 +249,6 @@ def init(parent=None):
parent: The parent to pass to QObjects which get initialized.
"""
_init_main_config(parent)
_init_key_config(parent)
_init_misc()

View File

@ -22,15 +22,46 @@
import collections
import os.path
import itertools
import sys
from PyQt5.QtCore import pyqtSignal, QObject
from qutebrowser.config import configdata, textwrapper
from qutebrowser.commands import cmdutils, cmdexc
from qutebrowser.utils import log, utils, qtutils, message, usertypes
from qutebrowser.utils import (log, utils, qtutils, message, usertypes, objreg,
standarddir, error)
from qutebrowser.completion.models import miscmodels
def init(parent=None):
"""Read and save keybindings.
Args:
parent: The parent to use for the KeyConfigParser.
"""
args = objreg.get('args')
try:
key_config = KeyConfigParser(standarddir.config(), 'keys.conf',
args.relaxed_config, parent=parent)
except (KeyConfigError, UnicodeDecodeError) as e:
log.init.exception(e)
errstr = "Error while reading key config:\n"
if e.lineno is not None:
errstr += "In line {}: ".format(e.lineno)
error.handle_fatal_exc(e, args, "Error while reading key config!",
pre_text=errstr)
# We didn't really initialize much so far, so we just quit hard.
sys.exit(usertypes.Exit.err_key_config)
else:
objreg.register('key-config', key_config)
save_manager = objreg.get('save-manager')
filename = os.path.join(standarddir.config(), 'keys.conf')
save_manager.add_saveable(
'key-config', key_config.save, key_config.config_dirty,
config_opt=('general', 'auto-save-config'), filename=filename,
dirty=key_config.is_dirty)
class KeyConfigError(Exception):
"""Raised on errors with the key config.