Remove code rendered dead by sql implementation.

Vulture exposed the following dead code:

- AppendLineParse was only used for reading the history text file, which is now
  a sql database (and the import code for the old text file is simpler and does
  not need a complex line parser)

- async_read_done is no longer used as importing the history text file is
  synchronous (and should only happen once)

- config._init_key_config is unused as it was moved to keyconf.init
This commit is contained in:
Ryan Roden-Corrent 2017-04-11 09:01:33 -04:00
parent a8ed9f1c2f
commit 784d9bb043
4 changed files with 3 additions and 185 deletions

View File

@ -21,7 +21,7 @@
import time import time
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QUrl from PyQt5.QtCore import pyqtSlot, QUrl
from qutebrowser.commands import cmdutils from qutebrowser.commands import cmdutils
from qutebrowser.utils import utils, objreg, log, qtutils, usertypes, message from qutebrowser.utils import utils, objreg, log, qtutils, usertypes, message
@ -74,8 +74,6 @@ class WebHistory(sql.SqlTable):
"""The global history of visited pages.""" """The global history of visited pages."""
async_read_done = pyqtSignal()
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__("History", ['url', 'title', 'atime', 'redirect'], super().__init__("History", ['url', 'title', 'atime', 'redirect'],
parent=parent) parent=parent)

View File

@ -174,38 +174,6 @@ def _init_main_config(parent=None):
return return
def _init_key_config(parent):
"""Initialize the key config.
Args:
parent: The parent to use for the KeyConfigParser.
"""
from qutebrowser.config.parsers import keyconf
args = objreg.get('args')
try:
key_config = keyconf.KeyConfigParser(standarddir.config(), 'keys.conf',
args.relaxed_config,
parent=parent)
except (keyconf.KeyConfigError, cmdexc.CommandError,
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)
def _init_misc(): def _init_misc():
"""Initialize misc. config-related files.""" """Initialize misc. config-related files."""
save_manager = objreg.get('save-manager') save_manager = objreg.get('save-manager')

View File

@ -21,7 +21,6 @@
import os import os
import os.path import os.path
import itertools
import contextlib import contextlib
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject
@ -96,7 +95,7 @@ class BaseLineParser(QObject):
""" """
assert self._configfile is not None assert self._configfile is not None
if self._opened: if self._opened:
raise IOError("Refusing to double-open AppendLineParser.") raise IOError("Refusing to double-open LineParser.")
self._opened = True self._opened = True
try: try:
if self._binary: if self._binary:
@ -133,73 +132,6 @@ class BaseLineParser(QObject):
raise NotImplementedError raise NotImplementedError
class AppendLineParser(BaseLineParser):
"""LineParser which reads lazily and appends data to existing one.
Attributes:
_new_data: The data which was added in this session.
"""
def __init__(self, configdir, fname, *, parent=None):
super().__init__(configdir, fname, binary=False, parent=parent)
self.new_data = []
self._fileobj = None
def __iter__(self):
if self._fileobj is None:
raise ValueError("Iterating without open() being called!")
file_iter = (line.rstrip('\n') for line in self._fileobj)
return itertools.chain(file_iter, iter(self.new_data))
@contextlib.contextmanager
def open(self):
"""Open the on-disk history file. Needed for __iter__."""
try:
with self._open('r') as f:
self._fileobj = f
yield
except FileNotFoundError:
self._fileobj = []
yield
finally:
self._fileobj = None
def get_recent(self, count=4096):
"""Get the last count bytes from the underlying file."""
with self._open('r') as f:
f.seek(0, os.SEEK_END)
size = f.tell()
try:
if size - count > 0:
offset = size - count
else:
offset = 0
f.seek(offset)
data = f.readlines()
finally:
f.seek(0, os.SEEK_END)
return data
def save(self):
do_save = self._prepare_save()
if not do_save:
return
with self._open('a') as f:
self._write(f, self.new_data)
self.new_data = []
self._after_save()
def clear(self):
do_save = self._prepare_save()
if not do_save:
return
with self._open('w'):
pass
self.new_data = []
self._after_save()
class LineParser(BaseLineParser): class LineParser(BaseLineParser):
"""Parser for configuration files which are simply line-based. """Parser for configuration files which are simply line-based.
@ -240,7 +172,7 @@ class LineParser(BaseLineParser):
def save(self): def save(self):
"""Save the config file.""" """Save the config file."""
if self._opened: if self._opened:
raise IOError("Refusing to double-open AppendLineParser.") raise IOError("Refusing to double-open LineParser.")
do_save = self._prepare_save() do_save = self._prepare_save()
if not do_save: if not do_save:
return return

View File

@ -125,83 +125,3 @@ class TestLineParser:
lineparser._prepare_save = lambda: False lineparser._prepare_save = lambda: False
lineparser.save() lineparser.save()
assert (tmpdir / 'file').read() == 'pristine\n' assert (tmpdir / 'file').read() == 'pristine\n'
class TestAppendLineParser:
BASE_DATA = ['old data 1', 'old data 2']
@pytest.fixture
def lineparser(self, tmpdir):
"""Fixture to get an AppendLineParser for tests."""
lp = lineparsermod.AppendLineParser(str(tmpdir), 'file')
lp.new_data = self.BASE_DATA
lp.save()
return lp
def _get_expected(self, new_data):
"""Get the expected data with newlines."""
return '\n'.join(self.BASE_DATA + new_data) + '\n'
def test_save(self, tmpdir, lineparser):
"""Test save()."""
new_data = ['new data 1', 'new data 2']
lineparser.new_data = new_data
lineparser.save()
assert (tmpdir / 'file').read() == self._get_expected(new_data)
def test_clear(self, tmpdir, lineparser):
"""Check if calling clear() empties both pending and persisted data."""
lineparser.new_data = ['one', 'two']
lineparser.save()
assert (tmpdir / 'file').read() == "old data 1\nold data 2\none\ntwo\n"
lineparser.new_data = ['one', 'two']
lineparser.clear()
lineparser.save()
assert not lineparser.new_data
assert (tmpdir / 'file').read() == ""
def test_iter_without_open(self, lineparser):
"""Test __iter__ without having called open()."""
with pytest.raises(ValueError):
iter(lineparser)
def test_iter(self, lineparser):
"""Test __iter__."""
new_data = ['new data 1', 'new data 2']
lineparser.new_data = new_data
with lineparser.open():
assert list(lineparser) == self.BASE_DATA + new_data
def test_iter_not_found(self, mocker):
"""Test __iter__ with no file."""
open_mock = mocker.patch(
'qutebrowser.misc.lineparser.AppendLineParser._open')
open_mock.side_effect = FileNotFoundError
new_data = ['new data 1', 'new data 2']
linep = lineparsermod.AppendLineParser('foo', 'bar')
linep.new_data = new_data
with linep.open():
assert list(linep) == new_data
def test_get_recent_none(self, tmpdir):
"""Test get_recent with no data."""
(tmpdir / 'file2').ensure()
linep = lineparsermod.AppendLineParser(str(tmpdir), 'file2')
assert linep.get_recent() == []
def test_get_recent_little(self, lineparser):
"""Test get_recent with little data."""
data = [e + '\n' for e in self.BASE_DATA]
assert lineparser.get_recent() == data
def test_get_recent_much(self, lineparser):
"""Test get_recent with much data."""
size = 64
new_data = ['new data {}'.format(i) for i in range(size)]
lineparser.new_data = new_data
lineparser.save()
data = os.linesep.join(self.BASE_DATA + new_data) + os.linesep
data = [e + '\n' for e in data[-size:].splitlines()]
assert lineparser.get_recent(size) == data