Improve __repr__ methods.

This commit is contained in:
Florian Bruhin 2014-09-26 15:48:24 +02:00
parent 1960cfe114
commit 36fd2e5c7f
39 changed files with 115 additions and 94 deletions

View File

@ -150,7 +150,7 @@ class Application(QApplication):
self._crashdlg.raise_() self._crashdlg.raise_()
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _init_config(self): def _init_config(self):
"""Inizialize and read the config.""" """Inizialize and read the config."""

View File

@ -39,6 +39,6 @@ class DiskCache(QNetworkDiskCache):
self.setMaximumCacheSize(config.get('storage', 'cache-size')) self.setMaximumCacheSize(config.get('storage', 'cache-size'))
def __repr__(self): def __repr__(self):
return '<{} size={}, maxsize={}, path="{}">'.format( return utils.get_repr(self, size=self.cacheSize(),
self.__class__.__name__, self.cacheSize(), self.maximumCacheSize(), maxsize=self.maximumCacheSize(),
self.cacheDirectory()) path=self.cacheDirectory())

View File

@ -38,7 +38,7 @@ from qutebrowser.commands import userscripts, cmdexc, cmdutils
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.browser import quickmarks, webelem from qutebrowser.browser import quickmarks, webelem
from qutebrowser.utils import (message, editor, usertypes, log, qtutils, from qutebrowser.utils import (message, editor, usertypes, log, qtutils,
urlutils, objreg) urlutils, objreg, utils)
class CommandDispatcher: class CommandDispatcher:
@ -59,7 +59,7 @@ class CommandDispatcher:
self._editor = None self._editor = None
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _count(self): def _count(self):
"""Convenience method to get the widget count.""" """Convenience method to get the widget count."""

View File

@ -41,8 +41,7 @@ class CookieJar(QNetworkCookieJar):
self.setAllCookies(cookies) self.setAllCookies(cookies)
def __repr__(self): def __repr__(self):
return '<{} count={}>'.format( return utils.get_repr(self, count=len(self.allCookies()))
self.__class__.__name__, len(self.allCookies()))
def purge_old_cookies(self): def purge_old_cookies(self):
"""Purge expired cookies from the cookie jar.""" """Purge expired cookies from the cookie jar."""

View File

@ -108,7 +108,7 @@ class DownloadItem(QObject):
self.timer.start() self.timer.start()
def __repr__(self): def __repr__(self):
return '<{} "{}">'.format(self.__class__.__name__, self.basename) return utils.get_repr(self, basename=self.basename)
def __str__(self): def __str__(self):
"""Get the download as a string. """Get the download as a string.
@ -349,7 +349,7 @@ class DownloadManager(QObject):
self.questions = [] self.questions = []
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self, downloads=len(self.downloads))
@pyqtSlot('QUrl', 'QWebPage') @pyqtSlot('QUrl', 'QWebPage')
def get(self, url, page): def get(self, url, page):

View File

@ -117,9 +117,10 @@ class WebElementWrapper(collections.abc.MutableMapping):
def __repr__(self): def __repr__(self):
try: try:
return "<WebElementWrapper '{}'>".format(self.debug_text()) html = self.debug_text()
except IsNullError: except IsNullError:
return "<WebElementWrapper null>" html = None
return utils.get_repr(self, html=html)
def __getitem__(self, key): def __getitem__(self, key):
self._check_vanished() self._check_vanished()

View File

@ -62,7 +62,7 @@ class SearchRunner(QObject):
self._flags = 0 self._flags = 0
def __repr__(self): def __repr__(self):
return '<{} text={}>'.format(self.__class__.__name__, self._text) return utils.get_repr(self, text=self._text, flags=self._flags)
def _search(self, text, rev=False): def _search(self, text, rev=False):
"""Search for a text on the current page. """Search for a text on the current page.

View File

@ -35,7 +35,7 @@ from PyQt5.QtCore import pyqtSignal, QObject
from qutebrowser.utils import log from qutebrowser.utils import log
from qutebrowser.config import configdata, iniparsers, configtypes, textwrapper from qutebrowser.config import configdata, iniparsers, configtypes, textwrapper
from qutebrowser.commands import cmdexc, cmdutils from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import message, objreg from qutebrowser.utils import message, objreg, utils
from qutebrowser.utils.usertypes import Completion from qutebrowser.utils.usertypes import Completion
@ -129,7 +129,7 @@ class ConfigManager(QObject):
return self._proxies[key] return self._proxies[key]
def __repr__(self): def __repr__(self):
return '<{} {}>'.format(self.__class__.__name__, self._fname) return utils.get_repr(self, fname=self._fname)
def __str__(self): def __str__(self):
"""Get the whole config as a string.""" """Get the whole config as a string."""
@ -458,7 +458,7 @@ class SectionProxy(collections.abc.MutableMapping):
self.name = name self.name = name
def __repr__(self): def __repr__(self):
return '<{} {}>'.format(self.__class__.__name__, self.name) return utils.get_repr(self, name=self.name)
def __getitem__(self, key): def __getitem__(self, key):
if not self.conf.has_option(self.name, key): if not self.conf.has_option(self.name, key):

View File

@ -23,7 +23,7 @@ import os
import os.path import os.path
import configparser import configparser
from qutebrowser.utils import log from qutebrowser.utils import log, utils
class ReadConfigParser(configparser.ConfigParser): class ReadConfigParser(configparser.ConfigParser):
@ -54,8 +54,8 @@ class ReadConfigParser(configparser.ConfigParser):
self.read(self._configfile, encoding='utf-8') self.read(self._configfile, encoding='utf-8')
def __repr__(self): def __repr__(self):
return '{}("{}", "{}")'.format( return utils.get_repr(self, constructor=True,
self.__class__.__name__, self._configdir, self._fname) configdir=self._configdir, fname=self._fname)
class ReadWriteConfigParser(ReadConfigParser): class ReadWriteConfigParser(ReadConfigParser):

View File

@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSignal, QObject
from qutebrowser.config import configdata, textwrapper from qutebrowser.config import configdata, textwrapper
from qutebrowser.commands import cmdutils, cmdexc from qutebrowser.commands import cmdutils, cmdexc
from qutebrowser.utils import log from qutebrowser.utils import log, utils
class KeyConfigError(Exception): class KeyConfigError(Exception):
@ -99,8 +99,8 @@ class KeyConfigParser(QObject):
return '\n'.join(lines) + '\n' return '\n'.join(lines) + '\n'
def __repr__(self): def __repr__(self):
return '{}("{}", "{}")'.format( return utils.get_repr(self, constructor=True,
self.__class__.__name__, self._configdir, self._fname) configdir=self._configdir, fname=self._fname)
def _str_section_desc(self, sectname): def _str_section_desc(self, sectname):
"""Get the section description string for sectname.""" """Get the section description string for sectname."""

View File

@ -24,7 +24,7 @@ import os.path
from PyQt5.QtCore import pyqtSlot from PyQt5.QtCore import pyqtSlot
from qutebrowser.utils import log from qutebrowser.utils import log, utils
class LineConfigParser: class LineConfigParser:
@ -60,9 +60,9 @@ class LineConfigParser:
self.read(self._configfile) self.read(self._configfile)
def __repr__(self): def __repr__(self):
return '{}("{}", "{}", limit={}, binary={})'.format( return utils.get_repr(self, constructor=True,
self.__class__.__name__, self._configdir, self._fname, self._limit, configdir=self._configdir, fname=self._fname,
self._binary) limit=self._limit, binary=self._binary)
def __iter__(self): def __iter__(self):
"""Iterate over the set data.""" """Iterate over the set data."""

View File

@ -88,9 +88,8 @@ class BaseKeyParser(QObject):
self.special_bindings = {} self.special_bindings = {}
def __repr__(self): def __repr__(self):
return '<{} supports_count={}, supports_chains={}>'.format( return utils.get_repr(self, supports_count=self._supports_count,
self.__class__.__name__, self._supports_count, supports_chains=self._supports_chains)
self._supports_chains)
def _debug_log(self, message): def _debug_log(self, message):
"""Log a message to the debug log if logging is active. """Log a message to the debug log if logging is active.

View File

@ -20,7 +20,7 @@
"""Advanced keyparsers.""" """Advanced keyparsers."""
from qutebrowser.keyinput.basekeyparser import BaseKeyParser from qutebrowser.keyinput.basekeyparser import BaseKeyParser
from qutebrowser.utils import message from qutebrowser.utils import message, utils
from qutebrowser.commands import runners, cmdexc from qutebrowser.commands import runners, cmdexc
@ -70,5 +70,5 @@ class PassthroughKeyParser(CommandKeyParser):
self._mode = mode self._mode = mode
def __repr__(self): def __repr__(self):
return '<{} mode={}, warn={})'.format( return utils.get_repr(self, mode=self._mode,
self.__class__.__name__, self._mode, self._warn_on_keychains) warn=self._warn_on_keychains)

View File

@ -29,7 +29,7 @@ from PyQt5.QtWidgets import QApplication
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.commands import cmdexc, cmdutils from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.utils import usertypes, log, objreg from qutebrowser.utils import usertypes, log, objreg, utils
class ModeLockedError(Exception): class ModeLockedError(Exception):
@ -107,7 +107,8 @@ class ModeManager(QObject):
'forward-unbound-keys') 'forward-unbound-keys')
def __repr__(self): def __repr__(self):
return '<{} mode={}>'.format(self.__class__.__name__, self.mode()) return utils.get_repr(self, mode=self.mode(), locked=self.locked,
passthrough=self.passthrough)
def mode(self): def mode(self):
"""Get the current mode..""" """Get the current mode.."""

View File

@ -28,7 +28,7 @@ from PyQt5.QtCore import pyqtSlot, Qt
from qutebrowser.utils import message from qutebrowser.utils import message
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.keyinput import keyparser from qutebrowser.keyinput import keyparser
from qutebrowser.utils import usertypes, log, objreg from qutebrowser.utils import usertypes, log, objreg, utils
STARTCHARS = ":/?" STARTCHARS = ":/?"
@ -44,7 +44,7 @@ class NormalKeyParser(keyparser.CommandKeyParser):
self.read_config('normal') self.read_config('normal')
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _handle_single_key(self, e): def _handle_single_key(self, e):
"""Override _handle_single_key to abort if the key is a startchar. """Override _handle_single_key to abort if the key is a startchar.
@ -73,7 +73,7 @@ class PromptKeyParser(keyparser.CommandKeyParser):
self.read_config('prompt') self.read_config('prompt')
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
class HintKeyParser(keyparser.CommandKeyParser): class HintKeyParser(keyparser.CommandKeyParser):

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import (pyqtSlot, Qt, QVariant, QAbstractListModel,
QModelIndex) QModelIndex)
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.utils import usertypes, qtutils, objreg from qutebrowser.utils import usertypes, qtutils, objreg, utils
Role = usertypes.enum('Role', 'item', start=Qt.UserRole, is_int=True) Role = usertypes.enum('Role', 'item', start=Qt.UserRole, is_int=True)
@ -49,7 +49,7 @@ class DownloadModel(QAbstractListModel):
download_manager.data_changed.connect(self.on_data_changed) download_manager.data_changed.connect(self.on_data_changed)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self, count=self.rowCount())
@pyqtSlot(int) @pyqtSlot(int)
def on_data_changed(self, idx): def on_data_changed(self, idx):

View File

@ -27,7 +27,7 @@ from unittest import mock
from qutebrowser.config import configtypes from qutebrowser.config import configtypes
from qutebrowser.test import stubs from qutebrowser.test import stubs
from qutebrowser.utils import debug from qutebrowser.utils import debug, utils
from PyQt5.QtCore import QUrl from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QColor, QFont from PyQt5.QtGui import QColor, QFont
@ -41,9 +41,9 @@ class Font(QFont):
def __repr__(self): def __repr__(self):
weight = debug.qenum_key(QFont, self.weight(), add_base=True, weight = debug.qenum_key(QFont, self.weight(), add_base=True,
klass=QFont.Weight) klass=QFont.Weight)
return '<Font family={}, pt={}, px={}, weight={}, style={}>'.format( return utils.get_repr(self, family=self.family(), pt=self.pointSize(),
self.family(), self.pointSize(), self.pixelSize(), weight, px=self.pixelSize(), weight=weight,
self.style()) style=self.style())
@classmethod @classmethod
def fromdesc(cls, desc): def fromdesc(cls, desc):
@ -65,9 +65,9 @@ class NetworkProxy(QNetworkProxy):
"""A QNetworkProxy with a nicer repr().""" """A QNetworkProxy with a nicer repr()."""
def __repr__(self): def __repr__(self):
return 'QNetworkProxy({}, "{}", {}, "{}", "{}")'.format( return utils.get_repr(self, type=self.type(), hostName=self.hostName(),
self.type(), self.hostName(), self.port(), self.user(), port=self.port(), user=self.user(),
self.password()) password=self.password())
class ValidValuesTest(unittest.TestCase): class ValidValuesTest(unittest.TestCase):

View File

@ -39,8 +39,9 @@ class Color(QColor):
"""A QColor with a nicer repr().""" """A QColor with a nicer repr()."""
def __repr__(self): def __repr__(self):
return 'Color({}, {}, {}, {})'.format( return utils.get_repr(self, constructor=True, red=self.red(),
self.red(), self.green(), self.blue(), self.alpha()) green=self.green(), blue=self.blue(),
alpha=self.alpha())
class ElidingTests(unittest.TestCase): class ElidingTests(unittest.TestCase):

View File

@ -49,11 +49,6 @@ class InitTests(unittest.TestCase):
nl = usertypes.NeighborList([1, 2, 3]) nl = usertypes.NeighborList([1, 2, 3])
self.assertEqual(len(nl), 3) self.assertEqual(len(nl), 3)
def test_repr(self):
"""Test repr() on NeighborList."""
nl = usertypes.NeighborList([1, 2, 3])
self.assertEqual(repr(nl), 'NeighborList([1, 2, 3])')
def test_contains(self): def test_contains(self):
"""Test 'in' on NeighborList.""" """Test 'in' on NeighborList."""
nl = usertypes.NeighborList([1, 2, 3]) nl = usertypes.NeighborList([1, 2, 3])

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
from qutebrowser.config import config, configdata from qutebrowser.config import config, configdata
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.utils import usertypes, log, objreg from qutebrowser.utils import usertypes, log, objreg, utils
from qutebrowser.models import completion as models from qutebrowser.models import completion as models
from qutebrowser.models.completionfilter import CompletionFilterModel as CFM from qutebrowser.models.completionfilter import CompletionFilterModel as CFM
@ -59,7 +59,7 @@ class Completer(QObject):
self._init_setting_completions() self._init_setting_completions()
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _model(self): def _model(self):
"""Convienience method to get the current completion model.""" """Convienience method to get the current completion model."""

View File

@ -21,7 +21,7 @@
from PyQt5.QtCore import pyqtSignal, QObject, QTimer from PyQt5.QtCore import pyqtSignal, QObject, QTimer
from qutebrowser.utils import usertypes, log, objreg from qutebrowser.utils import usertypes, log, objreg, utils
def error(message, immediately=False): def error(message, immediately=False):
@ -152,7 +152,7 @@ class MessageBridge(QObject):
s_question = pyqtSignal(usertypes.Question, bool) s_question = pyqtSignal(usertypes.Question, bool)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _emit_later(self, signal, *args): def _emit_later(self, signal, *args):
"""Emit a message later when the mainloop is not busy anymore. """Emit a message later when the mainloop is not busy anymore.

View File

@ -23,6 +23,7 @@ from PyQt5.QtWidgets import QApplication, QLineEdit
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.utils import usertypes as typ from qutebrowser.utils import usertypes as typ
from qutebrowser.utils import utils
class ReadlineBridge: class ReadlineBridge:
@ -37,7 +38,7 @@ class ReadlineBridge:
self._deleted = {} self._deleted = {}
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _widget(self): def _widget(self):
"""Get the currently active QLineEdit.""" """Get the currently active QLineEdit."""

View File

@ -26,7 +26,7 @@ import re
import pypeg2 as peg import pypeg2 as peg
from qutebrowser.utils import log from qutebrowser.utils import log, utils
class UniqueNamespace(peg.Namespace): class UniqueNamespace(peg.Namespace):
@ -279,8 +279,8 @@ class ContentDisposition:
return self.disposition.lower() == 'inline' return self.disposition.lower() == 'inline'
def __repr__(self): def __repr__(self):
return 'ContentDisposition(%r, %r)' % ( return utils.get_repr(self, constructor=True,
self.disposition, self.assocs) disposition=self.disposition, assocs=self.assocs)
def normalize_ws(text): def normalize_ws(text):

View File

@ -30,7 +30,7 @@ import enum as pyenum
from PyQt5.QtCore import pyqtSignal, QObject, QTimer from PyQt5.QtCore import pyqtSignal, QObject, QTimer
from qutebrowser.utils import log, qtutils from qutebrowser.utils import log, qtutils, utils
_UNSET = object() _UNSET = object()
@ -103,7 +103,8 @@ class NeighborList(collections.abc.Sequence):
return len(self._items) return len(self._items)
def __repr__(self): def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self._items) return utils.get_repr(self, items=self._items, mode=self._mode,
idx=self._idx, fuzzyval=self.fuzzyval)
def _snap_in(self, offset): def _snap_in(self, offset):
"""Set the current item to the closest item to self.fuzzyval. """Set the current item to the closest item to self.fuzzyval.
@ -296,7 +297,8 @@ class Question(QObject):
self.is_aborted = False self.is_aborted = False
def __repr__(self): def __repr__(self):
return '<{} "{}">'.format(self.__class__.__name__, self.text) return utils.get_repr(self, text=self.text, mode=self._mode,
default=self.default)
@property @property
def mode(self): def mode(self):
@ -359,7 +361,7 @@ class Timer(QTimer):
self._name = name self._name = name
def __repr__(self): def __repr__(self):
return '<{} {}>'.format(self.__class__.__name__, self._name) return utils.get_repr(self, name=self._name)
def setInterval(self, msec): def setInterval(self, msec):
"""Extend setInterval to check for overflows.""" """Extend setInterval to check for overflows."""

View File

@ -582,3 +582,25 @@ def is_enum(obj):
return issubclass(obj, enum.Enum) return issubclass(obj, enum.Enum)
except TypeError: except TypeError:
return False return False
def get_repr(obj, constructor=False, **attrs):
"""Get a suitable __repr__ string for an object.
Args:
obj: The object to get a repr for.
constructor: If True, show the Foo(one=1, two=2) form instead of
<Foo one=1 two=2>.
attrs: The attributes to add.
"""
cls = getattr(obj.__class__, '__qualname__', obj.__class__.__name__)
parts = []
for name, val in attrs.items():
parts.append('{}={!r}'.format(name, val))
if constructor:
return '{}({})'.format(cls, ', '.join(parts))
else:
if parts:
return '<{} {}>'.format(cls, ' '.join(parts))
else:
return '<{}>'.format(cls)

View File

@ -29,7 +29,7 @@ from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QItemSelectionModel
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.config import config, style from qutebrowser.config import config, style
from qutebrowser.widgets import completiondelegate from qutebrowser.widgets import completiondelegate
from qutebrowser.utils import completer, usertypes, qtutils, objreg from qutebrowser.utils import completer, usertypes, qtutils, objreg, utils
class CompletionView(QTreeView): class CompletionView(QTreeView):
@ -116,7 +116,7 @@ class CompletionView(QTreeView):
# FIXME set elidemode # FIXME set elidemode
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _resize_columns(self): def _resize_columns(self):
"""Resize the completion columns based on COLUMN_WIDTHS.""" """Resize the completion columns based on COLUMN_WIDTHS."""

View File

@ -162,7 +162,7 @@ class ConsoleTextEdit(QTextEdit):
self.setFocusPolicy(Qt.NoFocus) self.setFocusPolicy(Qt.NoFocus)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def on_config_changed(self, section, option): def on_config_changed(self, section, option):
"""Update font when config changed.""" """Update font when config changed."""
@ -193,8 +193,7 @@ class ConsoleWidget(QWidget):
self._lineedit.setFocus() self._lineedit.setFocus()
def __repr__(self): def __repr__(self):
return '<{}, visible={}>'.format( return utils.get_repr(self, visible=self.isVisible())
self.__class__.__name__, self.isVisible())
@pyqtSlot(str, str) @pyqtSlot(str, str)
def on_config_changed(self, section, option): def on_config_changed(self, section, option):

View File

@ -78,7 +78,7 @@ class _CrashDialog(QDialog):
self._init_buttons() self._init_buttons()
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _init_text(self): def _init_text(self):
"""Initialize the main text to be displayed on an exception. """Initialize the main text to be displayed on an exception.

View File

@ -24,7 +24,7 @@ from PyQt5.QtWidgets import QListView, QSizePolicy, QMenu
from qutebrowser.models import downloadmodel from qutebrowser.models import downloadmodel
from qutebrowser.config import style from qutebrowser.config import style
from qutebrowser.utils import qtutils from qutebrowser.utils import qtutils, utils
class DownloadView(QListView): class DownloadView(QListView):
@ -64,8 +64,7 @@ class DownloadView(QListView):
self.customContextMenuRequested.connect(self.show_context_menu) self.customContextMenuRequested.connect(self.show_context_menu)
def __repr__(self): def __repr__(self):
return '<{} with {} downloads>'.format(self.__class__.__name__, return utils.get_repr(self, count=self.model().rowCount())
self.model().rowCount())
@pyqtSlot('QPoint') @pyqtSlot('QPoint')
def show_context_menu(self, point): def show_context_menu(self, point):

View File

@ -27,7 +27,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.utils import message, log, usertypes, qtutils, objreg from qutebrowser.utils import message, log, usertypes, qtutils, objreg, utils
from qutebrowser.widgets import tabbedbrowser, completion, downloads from qutebrowser.widgets import tabbedbrowser, completion, downloads
from qutebrowser.widgets.statusbar import bar from qutebrowser.widgets.statusbar import bar
@ -100,7 +100,7 @@ class MainWindow(QWidget):
#QtCore.QMetaObject.connectSlotsByName(MainWindow) #QtCore.QMetaObject.connectSlotsByName(MainWindow)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
def _connect_resize_completion(self): def _connect_resize_completion(self):
"""Connect the resize_completion signal and resize it once.""" """Connect the resize_completion signal and resize it once."""

View File

@ -24,6 +24,7 @@ from PyQt5.QtWidgets import QLineEdit
from PyQt5.QtGui import QValidator from PyQt5.QtGui import QValidator
from qutebrowser.models import cmdhistory from qutebrowser.models import cmdhistory
from qutebrowser.utils import utils
class MinimalLineEditMixin: class MinimalLineEditMixin:
@ -41,7 +42,7 @@ class MinimalLineEditMixin:
self.setAttribute(Qt.WA_MacShowFocusRect, False) self.setAttribute(Qt.WA_MacShowFocusRect, False)
def __repr__(self): def __repr__(self):
return '<{} "{}">'.format(self.__class__.__name__, self.text()) return utils.get_repr(self, text=self.text())
class CommandLineEdit(QLineEdit): class CommandLineEdit(QLineEdit):
@ -94,7 +95,7 @@ class CommandLineEdit(QLineEdit):
self.setSelection(self._promptlen, oldpos - self._promptlen) self.setSelection(self._promptlen, oldpos - self._promptlen)
def __repr__(self): def __repr__(self):
return '<{} "{}">'.format(self.__class__.__name__, self.text()) return utils.get_repr(self, text=self.text())
class _CommandValidator(QValidator): class _CommandValidator(QValidator):

View File

@ -26,7 +26,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot, pyqtProperty, Qt
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStackedLayout, QSizePolicy from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStackedLayout, QSizePolicy
from qutebrowser.config import config, style from qutebrowser.config import config, style
from qutebrowser.utils import usertypes, log, objreg from qutebrowser.utils import usertypes, log, objreg, utils
from qutebrowser.widgets.statusbar import (command, progress, keystring, from qutebrowser.widgets.statusbar import (command, progress, keystring,
percentage, url, prompt) percentage, url, prompt)
from qutebrowser.widgets.statusbar import text as textwidget from qutebrowser.widgets.statusbar import text as textwidget
@ -170,7 +170,7 @@ class StatusBar(QWidget):
self._hbox.addWidget(self.prog) self._hbox.addWidget(self.prog)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)
@pyqtProperty(bool) @pyqtProperty(bool)
def error(self): def error(self):

View File

@ -24,6 +24,7 @@ from PyQt5.QtWidgets import QProgressBar, QSizePolicy
from qutebrowser.widgets import webview from qutebrowser.widgets import webview
from qutebrowser.config import style from qutebrowser.config import style
from qutebrowser.utils import utils
class Progress(QProgressBar): class Progress(QProgressBar):
@ -52,7 +53,7 @@ class Progress(QProgressBar):
self.hide() self.hide()
def __repr__(self): def __repr__(self):
return '<{} {}%>'.format(self.__class__.__name__, self.value()) return utils.get_repr(self, value=self.value())
@pyqtSlot() @pyqtSlot()
def on_load_started(self): def on_load_started(self):

View File

@ -24,7 +24,7 @@ from PyQt5.QtWidgets import QHBoxLayout, QWidget, QLineEdit
from qutebrowser.widgets import misc from qutebrowser.widgets import misc
from qutebrowser.widgets.statusbar import textbase, prompter from qutebrowser.widgets.statusbar import textbase, prompter
from qutebrowser.utils import objreg from qutebrowser.utils import objreg, utils
class PromptLineEdit(misc.MinimalLineEditMixin, QLineEdit): class PromptLineEdit(misc.MinimalLineEditMixin, QLineEdit):
@ -70,4 +70,4 @@ class Prompt(QWidget):
objreg.register('prompter', prompter_obj) objreg.register('prompter', prompter_obj)
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self)

View File

@ -26,7 +26,7 @@ from PyQt5.QtWidgets import QLineEdit
from qutebrowser.keyinput import modeman from qutebrowser.keyinput import modeman
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.utils import usertypes, log, qtutils, objreg from qutebrowser.utils import usertypes, log, qtutils, objreg, utils
PromptContext = collections.namedtuple('PromptContext', PromptContext = collections.namedtuple('PromptContext',
@ -69,7 +69,9 @@ class Prompter:
self._busy = False self._busy = False
def __repr__(self): def __repr__(self):
return '<{}>'.format(self.__class__.__name__) return utils.get_repr(self, loops=len(self._loops),
question=self._question, queue=len(self._queue),
busy=self._busy)
def _pop_later(self): def _pop_later(self):
"""Helper to call self._pop as soon as everything else is done.""" """Helper to call self._pop as soon as everything else is done."""

View File

@ -23,7 +23,7 @@ from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QLabel, QSizePolicy from PyQt5.QtWidgets import QLabel, QSizePolicy
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter
from qutebrowser.utils import qtutils from qutebrowser.utils import qtutils, utils
class TextBase(QLabel): class TextBase(QLabel):
@ -47,7 +47,7 @@ class TextBase(QLabel):
self._elided_text = '' self._elided_text = ''
def __repr__(self): def __repr__(self):
return '<{} "{}">'.format(self.__class__.__name__, self.text()) return utils.get_repr(self, text=self.text())
def _update_elided_text(self, width): def _update_elided_text(self, width):
"""Update the elided text when necessary. """Update the elided text when necessary.

View File

@ -112,8 +112,7 @@ class TabbedBrowser(tabwidget.TabWidget):
self.setIconSize(QSize(12, 12)) self.setIconSize(QSize(12, 12))
def __repr__(self): def __repr__(self):
return '<{} with {} tabs>'.format(self.__class__.__name__, return utils.get_repr(self, count=self.count())
self.count())
def widgets(self): def widgets(self):
"""Get a list of open tab widgets. """Get a list of open tab widgets.

View File

@ -31,7 +31,7 @@ from PyQt5.QtWidgets import (QTabWidget, QTabBar, QSizePolicy, QCommonStyle,
QStyle, QStylePainter, QStyleOptionTab) QStyle, QStylePainter, QStyleOptionTab)
from PyQt5.QtGui import QIcon, QPalette, QColor from PyQt5.QtGui import QIcon, QPalette, QColor
from qutebrowser.utils import qtutils, objreg from qutebrowser.utils import qtutils, objreg, utils
from qutebrowser.config import config from qutebrowser.config import config
@ -110,8 +110,7 @@ class TabBar(QTabBar):
QTimer.singleShot(0, self._autohide) QTimer.singleShot(0, self._autohide)
def __repr__(self): def __repr__(self):
return '<{} with {} tabs>'.format(self.__class__.__name__, return utils.get_repr(self, count=self.count())
self.count())
def _autohide(self): def _autohide(self):
"""Auto-hide the tabbar if needed.""" """Auto-hide the tabbar if needed."""

View File

@ -112,8 +112,8 @@ class WebView(QWebView):
self.viewing_source = False self.viewing_source = False
def __repr__(self): def __repr__(self):
url = self.url().toDisplayString() url = utils.elide(self.url().toDisplayString(), 50)
return "WebView(url='{}')".format(utils.elide(url, 50)) return utils.get_repr(self, url=url)
def _set_load_status(self, val): def _set_load_status(self, val):
"""Setter for load_status. """Setter for load_status.