Refactor configcache to cache

Also fix and improve configcache tests
This commit is contained in:
Jay Kamat 2018-09-05 18:35:50 -07:00
parent d4cf5045ab
commit 8e82adc306
No known key found for this signature in database
GPG Key ID: 5D2E399600F4F7B5
7 changed files with 45 additions and 45 deletions

View File

@ -34,7 +34,7 @@ from qutebrowser.keyinput import keyutils
val = None
instance = None
key_instance = None
configcache = None
cache = None
# Keeping track of all change filters to validate them later.
change_filters = []

View File

@ -23,7 +23,8 @@
from qutebrowser.config import config
class ConfigCache():
class ConfigCache:
"""A 'high-performance' cache for the config system.
Useful for areas which call out to the config system very frequently, DO
@ -35,15 +36,15 @@ class ConfigCache():
"""
def __init__(self) -> None:
self.cache = {}
config.instance.changed.connect(self.config_changed)
self._cache = {}
config.instance.changed.connect(self._on_config_changed)
def config_changed(self, attr: str) -> None:
if attr in self.cache:
self.cache[attr] = config.instance.get(attr)
def _on_config_changed(self, attr: str) -> None:
if attr in self._cache:
self._cache[attr] = config.instance.get(attr)
def __getitem__(self, attr: str):
if attr not in self.cache:
if attr not in self._cache:
assert not config.instance.get_opt(attr).supports_pattern
self.cache[attr] = config.instance.get(attr)
return self.cache[attr]
self._cache[attr] = config.instance.get(attr)
return self._cache[attr]

View File

@ -45,7 +45,7 @@ def early_init(args):
config.instance = config.Config(yaml_config=yaml_config)
config.val = config.ConfigContainer(config.instance)
config.key_instance = config.KeyConfig(config.instance)
config.configcache = configcache.ConfigCache()
config.cache = configcache.ConfigCache()
yaml_config.setParent(config.instance)
for cf in config.change_filters:

View File

@ -719,9 +719,9 @@ class TabbedBrowser(QWidget):
except TabDeletedError:
# We can get signals for tabs we already deleted...
return
start = config.configcache['colors.tabs.indicator.start']
stop = config.configcache['colors.tabs.indicator.stop']
system = config.configcache['colors.tabs.indicator.system']
start = config.cache['colors.tabs.indicator.start']
stop = config.cache['colors.tabs.indicator.stop']
system = config.cache['colors.tabs.indicator.system']
color = utils.interpolate_color(start, stop, perc, system)
self.widget.set_tab_indicator_color(idx, color)
self.widget.update_tab_title(idx)

View File

@ -139,9 +139,9 @@ class TabWidget(QTabWidget):
"""
tab = self.widget(idx)
if tab.data.pinned:
fmt = config.configcache['tabs.title.format_pinned']
fmt = config.cache['tabs.title.format_pinned']
else:
fmt = config.configcache['tabs.title.format']
fmt = config.cache['tabs.title.format']
if (field is not None and
(fmt is None or ('{' + field + '}') not in fmt)):
@ -604,7 +604,7 @@ class TabBar(QTabBar):
minimum_size = self.minimumTabSizeHint(index)
height = minimum_size.height()
if self.vertical:
confwidth = str(config.configcache['tabs.width'])
confwidth = str(config.cache['tabs.width'])
if confwidth.endswith('%'):
main_window = objreg.get('main-window', scope='window',
window=self._win_id)
@ -614,7 +614,7 @@ class TabBar(QTabBar):
width = int(confwidth)
size = QSize(max(minimum_size.width(), width), height)
else:
if config.configcache['tabs.pinned.shrink']:
if config.cache['tabs.pinned.shrink']:
pinned = self._tab_pinned(index)
pinned_count, pinned_width = self._pinned_statistics()
else:
@ -658,9 +658,9 @@ class TabBar(QTabBar):
setting += '.odd' if (idx + 1) % 2 else '.even'
tab.palette.setColor(QPalette.Window,
config.configcache[setting + '.bg'])
config.cache[setting + '.bg'])
tab.palette.setColor(QPalette.WindowText,
config.configcache[setting + '.fg'])
config.cache[setting + '.fg'])
indicator_color = self.tab_indicator_color(idx)
tab.palette.setColor(QPalette.Base, indicator_color)
@ -805,7 +805,7 @@ class TabBarStyle(QCommonStyle):
elif element == QStyle.CE_TabBarTabLabel:
if not opt.icon.isNull() and layouts.icon.isValid():
self._draw_icon(layouts, opt, p)
alignment = (config.configcache['tabs.title.alignment'] |
alignment = (config.cache['tabs.title.alignment'] |
Qt.AlignVCenter | Qt.TextHideMnemonic)
self._style.drawItemText(p, layouts.text, alignment, opt.palette,
opt.state & QStyle.State_Enabled,
@ -878,8 +878,8 @@ class TabBarStyle(QCommonStyle):
Return:
A Layout object with two QRects.
"""
padding = config.configcache['tabs.padding']
indicator_padding = config.configcache['tabs.indicator.padding']
padding = config.cache['tabs.padding']
indicator_padding = config.cache['tabs.indicator.padding']
text_rect = QRect(opt.rect)
if not text_rect.isValid():
@ -890,7 +890,7 @@ class TabBarStyle(QCommonStyle):
text_rect.adjust(padding.left, padding.top, -padding.right,
-padding.bottom)
indicator_width = config.configcache['tabs.indicator.width']
indicator_width = config.cache['tabs.indicator.width']
if indicator_width == 0:
indicator_rect = QRect()
else:
@ -933,9 +933,9 @@ class TabBarStyle(QCommonStyle):
icon_state = (QIcon.On if opt.state & QStyle.State_Selected
else QIcon.Off)
# reserve space for favicon when tab bar is vertical (issue #1968)
position = config.configcache['tabs.position']
position = config.cache['tabs.position']
if (position in [QTabWidget.East, QTabWidget.West] and
config.configcache['tabs.favicons.show'] != 'never'):
config.cache['tabs.favicons.show'] != 'never'):
tab_icon_size = icon_size
else:
actual_size = opt.icon.actualSize(icon_size, icon_mode, icon_state)

View File

@ -254,7 +254,7 @@ def config_stub(stubs, monkeypatch, configdata_init, yaml_config_stub):
monkeypatch.setattr(config, 'val', container)
cache = configcache.ConfigCache()
monkeypatch.setattr(config, 'configcache', cache)
monkeypatch.setattr(config, 'cache', cache)
try:
configtypes.Font.monospace_fonts = container.fonts.monospace

View File

@ -17,32 +17,31 @@
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
"""Tests for qutebrowser.misc.autoupdate."""
"""Tests for qutebrowser.config.configcache."""
import pytest
from qutebrowser.config import config
class TestConfigCache:
def test_configcache_except_pattern(config_stub):
with pytest.raises(AssertionError):
assert config.cache['content.javascript.enabled']
@pytest.fixture
def ccache(self, config_stub):
return config.configcache
def test_configcache_except_pattern(self, ccache):
with pytest.raises(AssertionError):
assert ccache['content.javascript.enabled']
def test_configcache_error_set(config_stub):
with pytest.raises(TypeError):
config.cache['content.javascript.enabled'] = True
def test_configcache_error_set(self, ccache):
with pytest.raises(TypeError):
ccache['content.javascript.enabled'] = True
def test_configcache_get(self, ccache):
assert not ccache['auto_save.session']
assert not ccache['auto_save.session']
def test_configcache_get(config_stub):
assert len(config.cache._cache) == 0
assert not config.cache['auto_save.session']
assert len(config.cache._cache) == 1
assert not config.cache['auto_save.session']
def test_configcache_get_after_set(self, ccache):
assert not ccache['auto_save.session']
config.val.auto_save.session = True
assert ccache['auto_save.session']
def test_configcache_get_after_set(config_stub):
assert not config.cache['auto_save.session']
config_stub.val.auto_save.session = True
assert config.cache['auto_save.session']