From bdc41db6013ab2da181c5eb9d62a0d7a0cf81b99 Mon Sep 17 00:00:00 2001 From: zaowen Date: Tue, 4 Sep 2018 20:53:26 -0500 Subject: Adblock import handles local directories and paths Fixes #464 * Handles local Directories * Handles local paths without file:// --- qutebrowser/browser/adblock.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/qutebrowser/browser/adblock.py b/qutebrowser/browser/adblock.py index affd80eaf..fc7de9e37 100644 --- a/qutebrowser/browser/adblock.py +++ b/qutebrowser/browser/adblock.py @@ -174,15 +174,14 @@ class HostBlocker: for url in config.val.content.host_blocking.lists: if url.scheme() == 'file': filename = url.toLocalFile() - try: - fileobj = open(filename, 'rb') - except OSError as e: - message.error("adblock: Error while reading {}: {}".format( - filename, e.strerror)) - continue - download = FakeDownload(fileobj) - self._in_progress.append(download) - self.on_download_finished(download) + if os.path.isdir(filename): + for filenames in os.scandir(filename): + if not filenames.name.startswith('.')\ + and filenames.is_file(): + print( filenames.name ) + self._import_local(filenames.path) + else: + self._import_local(filename) else: fobj = io.BytesIO() fobj.name = 'adblock: ' + url.host() @@ -193,6 +192,22 @@ class HostBlocker: download.finished.connect( functools.partial(self.on_download_finished, download)) + def _import_local(self, filename): + """Adds the contents of a file to the blocklist. + + Args: + filename: path to a local file to import. + """ + try: + fileobj = open(filename, 'rb') + except OSError as e: + message.error("adblock: Error while reading {}: {}".format( + filename, e.strerror)) + return + download = FakeDownload(fileobj) + self._in_progress.append(download) + self.on_download_finished(download) + def _parse_line(self, line): """Parse a line from a host file. -- cgit v1.2.3-54-g00ecf From c4cca4755eff3d77a2beada0d0cc67b706086088 Mon Sep 17 00:00:00 2001 From: zaowen Date: Wed, 5 Sep 2018 20:55:22 -0500 Subject: Add adblock import directory unit test --- qutebrowser/browser/adblock.py | 1 - tests/unit/browser/test_adblock.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/qutebrowser/browser/adblock.py b/qutebrowser/browser/adblock.py index fc7de9e37..2673fced8 100644 --- a/qutebrowser/browser/adblock.py +++ b/qutebrowser/browser/adblock.py @@ -178,7 +178,6 @@ class HostBlocker: for filenames in os.scandir(filename): if not filenames.name.startswith('.')\ and filenames.is_file(): - print( filenames.name ) self._import_local(filenames.path) else: self._import_local(filename) diff --git a/tests/unit/browser/test_adblock.py b/tests/unit/browser/test_adblock.py index ec43aa772..afb556559 100644 --- a/tests/unit/browser/test_adblock.py +++ b/tests/unit/browser/test_adblock.py @@ -433,3 +433,22 @@ def test_config_change(config_stub, basedir, download_stub, host_blocker.read_hosts() for str_url in URLS_TO_CHECK: assert not host_blocker.is_blocked(QUrl(str_url)) + + +def test_add_directory(config_stub, basedir, download_stub, + data_tmpdir, tmpdir): + """Ensure adblocker can import all files in a directory.""" + blocklist_hosts2 = [] + for i in BLOCKLIST_HOSTS[1:]: + blocklist_hosts2.append('1' + i) + + create_blocklist(tmpdir, blocked_hosts=BLOCKLIST_HOSTS, + name='blocked-hosts', line_format='one_per_line') + create_blocklist(tmpdir, blocked_hosts=blocklist_hosts2, + name='blocked-hosts2', line_format='one_per_line') + + config_stub.val.content.host_blocking.lists = [tmpdir.strpath] + config_stub.val.content.host_blocking.enabled = True + host_blocker = adblock.HostBlocker() + host_blocker.adblock_update() + assert len(host_blocker._blocked_hosts) == (len(blocklist_hosts2) * 2) -- cgit v1.2.3-54-g00ecf From 5ecfe43ebba6ac3ca1482389af451908d5a094d4 Mon Sep 17 00:00:00 2001 From: zaowen Date: Thu, 20 Sep 2018 10:49:37 -0600 Subject: ci dumb --- tests/unit/browser/test_adblock.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/unit/browser/test_adblock.py b/tests/unit/browser/test_adblock.py index afb556559..e160c2726 100644 --- a/tests/unit/browser/test_adblock.py +++ b/tests/unit/browser/test_adblock.py @@ -1,4 +1,3 @@ -# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: #!/usr/bin/env python3 # Copyright 2015 Corentin Julé -- cgit v1.2.3-54-g00ecf From a75587f270a94061d144826c4f248c2c203a59c4 Mon Sep 17 00:00:00 2001 From: zaowen Date: Thu, 20 Sep 2018 10:51:33 -0600 Subject: blah --- tests/unit/browser/test_adblock.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/browser/test_adblock.py b/tests/unit/browser/test_adblock.py index e160c2726..afb556559 100644 --- a/tests/unit/browser/test_adblock.py +++ b/tests/unit/browser/test_adblock.py @@ -1,3 +1,4 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: #!/usr/bin/env python3 # Copyright 2015 Corentin Julé -- cgit v1.2.3-54-g00ecf From 0680f84ca455e39b6aa520d0a5210b89cae6dbb8 Mon Sep 17 00:00:00 2001 From: zaowen Date: Thu, 20 Sep 2018 11:56:12 -0600 Subject: fix auto merge problem --- qutebrowser/browser/adblock.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qutebrowser/browser/adblock.py b/qutebrowser/browser/adblock.py index 5ccd50139..f807fee19 100644 --- a/qutebrowser/browser/adblock.py +++ b/qutebrowser/browser/adblock.py @@ -202,9 +202,9 @@ class HostBlocker: message.error("adblock: Error while reading {}: {}".format( filename, e.strerror)) return - download = FakeDownload(fileobj) + download = _FakeDownload(fileobj) self._in_progress.append(download) - self.on_download_finished(download) + self._on_download_finished(download) def _parse_line(self, line): """Parse a line from a host file. -- cgit v1.2.3-54-g00ecf From 5b089d0460fbbb2b8166cc9f3ec86f0f03b48989 Mon Sep 17 00:00:00 2001 From: zaowen Date: Sat, 29 Sep 2018 02:00:42 -0600 Subject: Minor requested changes --- qutebrowser/browser/adblock.py | 3 +-- tests/unit/browser/test_adblock.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/qutebrowser/browser/adblock.py b/qutebrowser/browser/adblock.py index f807fee19..862ec18fa 100644 --- a/qutebrowser/browser/adblock.py +++ b/qutebrowser/browser/adblock.py @@ -175,8 +175,7 @@ class HostBlocker: filename = url.toLocalFile() if os.path.isdir(filename): for filenames in os.scandir(filename): - if not filenames.name.startswith('.')\ - and filenames.is_file(): + if filenames.is_file(): self._import_local(filenames.path) else: self._import_local(filename) diff --git a/tests/unit/browser/test_adblock.py b/tests/unit/browser/test_adblock.py index f9a695f5b..8bcbf3eb6 100644 --- a/tests/unit/browser/test_adblock.py +++ b/tests/unit/browser/test_adblock.py @@ -452,4 +452,4 @@ def test_add_directory(config_stub, basedir, download_stub, config_stub.val.content.host_blocking.enabled = True host_blocker = adblock.HostBlocker() host_blocker.adblock_update() - assert len(host_blocker._blocked_hosts) == (len(blocklist_hosts2) * 2) + assert len(host_blocker._blocked_hosts) == len(blocklist_hosts2) * 2 -- cgit v1.2.3-54-g00ecf