Load components dynamically

This commit is contained in:
Florian Bruhin 2018-12-10 09:38:23 +01:00
parent 735e6123cd
commit 411c5171a2
6 changed files with 44 additions and 3 deletions

View File

@ -68,6 +68,7 @@ from qutebrowser.browser import (urlmarks, adblock, history, browsertab,
from qutebrowser.browser.network import proxy from qutebrowser.browser.network import proxy
from qutebrowser.browser.webkit import cookies, cache from qutebrowser.browser.webkit import cookies, cache
from qutebrowser.browser.webkit.network import networkmanager from qutebrowser.browser.webkit.network import networkmanager
from qutebrowser.extensions import loader
from qutebrowser.keyinput import macros from qutebrowser.keyinput import macros
from qutebrowser.mainwindow import mainwindow, prompt from qutebrowser.mainwindow import mainwindow, prompt
from qutebrowser.misc import (readline, ipc, savemanager, sessions, from qutebrowser.misc import (readline, ipc, savemanager, sessions,
@ -77,8 +78,6 @@ from qutebrowser.utils import (log, version, message, utils, urlutils, objreg,
usertypes, standarddir, error, qtutils) usertypes, standarddir, error, qtutils)
# pylint: disable=unused-import # pylint: disable=unused-import
# We import those to run the cmdutils.register decorators. # We import those to run the cmdutils.register decorators.
from qutebrowser.components import (scrollcommands, caretcommands,
zoomcommands, misccommands)
from qutebrowser.mainwindow.statusbar import command from qutebrowser.mainwindow.statusbar import command
from qutebrowser.misc import utilcmds from qutebrowser.misc import utilcmds
# pylint: enable=unused-import # pylint: enable=unused-import
@ -166,6 +165,7 @@ def init(args, crash_handler):
qApp.setQuitOnLastWindowClosed(False) qApp.setQuitOnLastWindowClosed(False)
_init_icon() _init_icon()
loader.load_components()
try: try:
_init_modules(args, crash_handler) _init_modules(args, crash_handler)
except (OSError, UnicodeDecodeError, browsertab.WebTabError) as e: except (OSError, UnicodeDecodeError, browsertab.WebTabError) as e:

View File

View File

@ -0,0 +1,35 @@
# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:
# Copyright 2018 Florian Bruhin (The Compiler) <mail@qutebrowser.org>
#
# This file is part of qutebrowser.
#
# qutebrowser is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# qutebrowser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
"""Loader for qutebrowser extensions."""
import pkgutil
from qutebrowser import components
from qutebrowser.utils import log
def load_components() -> None:
"""Load everything from qutebrowser.components."""
for info in pkgutil.walk_packages(components.__path__):
if info.ispkg:
continue
log.extensions.debug("Importing {}".format(info.name))
loader = info.module_finder.find_module(info.name)
loader.load_module(info.name)

View File

@ -137,6 +137,7 @@ prompt = logging.getLogger('prompt')
network = logging.getLogger('network') network = logging.getLogger('network')
sql = logging.getLogger('sql') sql = logging.getLogger('sql')
greasemonkey = logging.getLogger('greasemonkey') greasemonkey = logging.getLogger('greasemonkey')
extensions = logging.getLogger('extensions')
LOGGER_NAMES = [ LOGGER_NAMES = [
'statusbar', 'completion', 'init', 'url', 'statusbar', 'completion', 'init', 'url',
@ -146,7 +147,7 @@ LOGGER_NAMES = [
'js', 'qt', 'rfc6266', 'ipc', 'shlexer', 'js', 'qt', 'rfc6266', 'ipc', 'shlexer',
'save', 'message', 'config', 'sessions', 'save', 'message', 'config', 'sessions',
'webelem', 'prompt', 'network', 'sql', 'webelem', 'prompt', 'network', 'sql',
'greasemonkey' 'greasemonkey', 'extensions',
] ]

View File

@ -30,6 +30,7 @@ import argparse
import vulture import vulture
import qutebrowser.app # pylint: disable=unused-import import qutebrowser.app # pylint: disable=unused-import
from qutebrowser.extensions import loader
from qutebrowser.misc import objects from qutebrowser.misc import objects
from qutebrowser.utils import utils from qutebrowser.utils import utils
from qutebrowser.browser.webkit import rfc6266 from qutebrowser.browser.webkit import rfc6266
@ -43,6 +44,8 @@ from qutebrowser.config import configtypes
def whitelist_generator(): # noqa def whitelist_generator(): # noqa
"""Generator which yields lines to add to a vulture whitelist.""" """Generator which yields lines to add to a vulture whitelist."""
loader.load_components()
# qutebrowser commands # qutebrowser commands
for cmd in objects.commands.values(): for cmd in objects.commands.values():
yield utils.qualname(cmd.handler) yield utils.qualname(cmd.handler)

View File

@ -35,6 +35,7 @@ sys.path.insert(0, os.path.join(os.path.dirname(__file__), os.pardir,
# We import qutebrowser.app so all @cmdutils-register decorators are run. # We import qutebrowser.app so all @cmdutils-register decorators are run.
import qutebrowser.app import qutebrowser.app
from qutebrowser import qutebrowser, commands from qutebrowser import qutebrowser, commands
from qutebrowser.extensions import loader
from qutebrowser.commands import argparser from qutebrowser.commands import argparser
from qutebrowser.config import configdata, configtypes from qutebrowser.config import configdata, configtypes
from qutebrowser.utils import docutils, usertypes from qutebrowser.utils import docutils, usertypes
@ -549,6 +550,7 @@ def regenerate_cheatsheet():
def main(): def main():
"""Regenerate all documentation.""" """Regenerate all documentation."""
utils.change_cwd() utils.change_cwd()
loader.load_components()
print("Generating manpage...") print("Generating manpage...")
regenerate_manpage('doc/qutebrowser.1.asciidoc') regenerate_manpage('doc/qutebrowser.1.asciidoc')
print("Generating settings help...") print("Generating settings help...")