Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package qutebrowser for openSUSE:Factory 
checked in at 2021-08-03 22:48:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qutebrowser (Old)
 and      /work/SRC/openSUSE:Factory/.qutebrowser.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qutebrowser"

Tue Aug  3 22:48:39 2021 rev:54 rq:909841 version:2.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/qutebrowser/qutebrowser.changes  2021-06-29 
22:43:50.306919467 +0200
+++ /work/SRC/openSUSE:Factory/.qutebrowser.new.1899/qutebrowser.changes        
2021-08-03 22:48:54.464484789 +0200
@@ -1,0 +2,17 @@
+Tue Aug  3 00:07:38 UTC 2021 - Mia Herkt <[email protected]>
+
+- Update to version 2.3.1
+Fixed
+  * Updated the workaround for Google Account log in claiming that
+    this browser isn't secure. For an equivalent workaround on
+    older versions, run: :set -u https://accounts.google.com/*
+    content.headers.user_agent "Mozilla/5.0 ({os_info}; rv:90.0)
+    Gecko/20100101 Firefox/90.0"
+  * Corrupt cache file exceptions with adblock 0.5.0+ are now
+    handled properly.
+  * Crash when entering unicode surrogates into the filename
+    prompt.
+  * UnboundLocalError in qute-keepass when the database couldn't be
+    opened.
+
+-------------------------------------------------------------------

Old:
----
  qutebrowser-2.3.0.tar.gz
  qutebrowser-2.3.0.tar.gz.asc

New:
----
  qutebrowser-2.3.1.tar.gz
  qutebrowser-2.3.1.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qutebrowser.spec ++++++
--- /var/tmp/diff_new_pack.K0aBXE/_old  2021-08-03 22:48:55.372483694 +0200
+++ /var/tmp/diff_new_pack.K0aBXE/_new  2021-08-03 22:48:55.372483694 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           qutebrowser
-Version:        2.3.0
+Version:        2.3.1
 Release:        0
 Summary:        Keyboard-driven vim-like browser based on Qt5
 License:        GPL-3.0-or-later

++++++ qutebrowser-2.3.0.tar.gz -> qutebrowser-2.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/PKG-INFO 
new/qutebrowser-2.3.1/PKG-INFO
--- old/qutebrowser-2.3.0/PKG-INFO      2021-06-28 17:32:40.220855200 +0200
+++ new/qutebrowser-2.3.1/PKG-INFO      2021-07-28 14:44:18.213632000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: qutebrowser
-Version: 2.3.0
+Version: 2.3.1
 Summary: A keyboard-driven, vim-like browser based on PyQt5.
 Home-page: https://www.qutebrowser.org/
 Author: Florian Bruhin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/doc/changelog.asciidoc 
new/qutebrowser-2.3.1/doc/changelog.asciidoc
--- old/qutebrowser-2.3.0/doc/changelog.asciidoc        2021-06-28 
17:29:52.000000000 +0200
+++ new/qutebrowser-2.3.1/doc/changelog.asciidoc        2021-07-28 
14:35:12.000000000 +0200
@@ -15,6 +15,20 @@
 // `Fixed` for any bug fixes.
 // `Security` to invite users to upgrade in case of vulnerabilities.
 
+[[v2.3.1]]
+v2.3.1 (2021-07-28)
+-------------------
+
+Fixed
+~~~~~
+
+- Updated the workaround for Google Account log in claiming that this browser
+  isn't secure. For an equivalent workaround on older versions, run:
+  `:set -u https://accounts.google.com/* content.headers.user_agent 
"Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"`
+- Corrupt cache file exceptions with `adblock` 0.5.0+ are now handled properly.
+- Crash when entering unicode surrogates into the filename prompt.
+- `UnboundLocalError` in `qute-keepass` when the database couldn't be opened.
+
 [[v2.3.0]]
 v2.3.0 (2021-06-28)
 -------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/doc/qutebrowser.1 
new/qutebrowser-2.3.1/doc/qutebrowser.1
--- old/qutebrowser-2.3.0/doc/qutebrowser.1     2021-06-28 17:32:38.000000000 
+0200
+++ new/qutebrowser-2.3.1/doc/qutebrowser.1     2021-07-28 14:44:16.000000000 
+0200
@@ -2,12 +2,12 @@
 .\"     Title: qutebrowser
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\"      Date: 06/28/2021
+.\"      Date: 07/28/2021
 .\"    Manual: qutebrowser manpage
 .\"    Source: qutebrowser
 .\"  Language: English
 .\"
-.TH "QUTEBROWSER" "1" "06/28/2021" "qutebrowser" "qutebrowser manpage"
+.TH "QUTEBROWSER" "1" "07/28/2021" "qutebrowser" "qutebrowser manpage"
 .\" -----------------------------------------------------------------
 .\" * Define some portability stuff
 .\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/misc/org.qutebrowser.qutebrowser.appdata.xml 
new/qutebrowser-2.3.1/misc/org.qutebrowser.qutebrowser.appdata.xml
--- old/qutebrowser-2.3.0/misc/org.qutebrowser.qutebrowser.appdata.xml  
2021-06-28 17:29:52.000000000 +0200
+++ new/qutebrowser-2.3.1/misc/org.qutebrowser.qutebrowser.appdata.xml  
2021-07-28 14:34:24.000000000 +0200
@@ -44,6 +44,7 @@
        </content_rating>
        <releases>
 <!-- Add new releases here -->
+<release version="2.3.1" date="2021-07-28"/>
 <release version="2.3.0" date="2021-06-28"/>
 <release version="2.2.3" date="2021-06-01"/>
 <release version="2.2.2" date="2021-05-20"/>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/misc/userscripts/qute-keepass 
new/qutebrowser-2.3.1/misc/userscripts/qute-keepass
--- old/qutebrowser-2.3.0/misc/userscripts/qute-keepass 2021-06-15 
21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/misc/userscripts/qute-keepass 2021-07-28 
12:45:00.000000000 +0200
@@ -178,6 +178,7 @@
         kp = pykeepass.PyKeePass(file_path, password=pw, keyfile=kf)
     except Exception as e:
         stderr("There was an error opening the DB: {}".format(str(e)))
+        sys.exit(ExitCodes.DB_OPEN_FAIL)
 
     return kp.find_entries(url="{}{}{}".format(".*", host, ".*"), regex=True)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/__init__.py 
new/qutebrowser-2.3.1/qutebrowser/__init__.py
--- old/qutebrowser-2.3.0/qutebrowser/__init__.py       2021-06-28 
17:29:52.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/__init__.py       2021-07-28 
14:34:24.000000000 +0200
@@ -26,7 +26,7 @@
 __license__ = "GPL"
 __maintainer__ = __author__
 __email__ = "[email protected]"
-__version__ = "2.3.0"
+__version__ = "2.3.1"
 __version_info__ = tuple(int(part) for part in __version__.split('.'))
 __description__ = "A keyboard-driven, vim-like browser based on PyQt5."
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/browser/browsertab.py 
new/qutebrowser-2.3.1/qutebrowser/browser/browsertab.py
--- old/qutebrowser-2.3.0/qutebrowser/browser/browsertab.py     2021-06-24 
19:38:22.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/browser/browsertab.py     2021-07-28 
14:08:16.000000000 +0200
@@ -1004,7 +1004,7 @@
         """Setter for load_status."""
         if not isinstance(val, usertypes.LoadStatus):
             raise TypeError("Type {} is no LoadStatus member!".format(val))
-        log.webview.debug(f"load status for {self!r}: {utils.pyenum_str(val)}")
+        log.webview.debug("load status for {}: {}".format(repr(self), val))
         self._load_status = val
         self.load_status_changed.emit(val)
 
@@ -1064,7 +1064,7 @@
         url = utils.elide(navigation.url.toDisplayString(), 100)
         log.webview.debug("navigation request: url {}, type {}, is_main_frame "
                           "{}".format(url,
-                                      
utils.pyenum_str(navigation.navigation_type),
+                                      navigation.navigation_type,
                                       navigation.is_main_frame))
 
         if navigation.is_main_frame:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/browser/webengine/webenginesettings.py 
new/qutebrowser-2.3.1/qutebrowser/browser/webengine/webenginesettings.py
--- old/qutebrowser-2.3.0/qutebrowser/browser/webengine/webenginesettings.py    
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/browser/webengine/webenginesettings.py    
2021-07-28 12:47:44.000000000 +0200
@@ -431,11 +431,7 @@
                      "AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/99 "
                      "Safari/537.36")
-    edge_ua = ("Mozilla/5.0 ({os_info}) "
-               "AppleWebKit/{webkit_version} (KHTML, like Gecko) "
-               "{upstream_browser_key}/{upstream_browser_version} "
-               "Safari/{webkit_version} "
-               "Edg/{upstream_browser_version}")
+    firefox_ua = "Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"
 
     user_agents = [
         # Needed to avoid a ""WhatsApp works with Google Chrome 36+" error
@@ -447,7 +443,7 @@
         # Needed to avoid a "you're using a browser [...] that doesn't allow us
         # to keep your account secure" error.
         # https://github.com/qutebrowser/qutebrowser/issues/5182
-        ("ua-google", 'https://accounts.google.com/*', edge_ua),
+        ("ua-google", 'https://accounts.google.com/*', firefox_ua),
 
         # Needed because Slack adds an error which prevents using it relatively
         # aggressively, despite things actually working fine.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/browser/webengine/webenginetab.py 
new/qutebrowser-2.3.1/qutebrowser/browser/webengine/webenginetab.py
--- old/qutebrowser-2.3.0/qutebrowser/browser/webengine/webenginetab.py 
2021-06-24 19:38:22.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/browser/webengine/webenginetab.py 
2021-07-28 14:08:16.000000000 +0200
@@ -474,7 +474,7 @@
             # `:selection-toggle` is executed and before this callback function
             # is asynchronously called.
             log.misc.debug("Ignoring caret selection callback in {}".format(
-                utils.pyenum_str(self._mode_manager.mode)))
+                self._mode_manager.mode))
             return
         if state_str is None:
             message.error("Error toggling caret selection")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/completion/models/filepathcategory.py 
new/qutebrowser-2.3.1/qutebrowser/completion/models/filepathcategory.py
--- old/qutebrowser-2.3.0/qutebrowser/completion/models/filepathcategory.py     
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/completion/models/filepathcategory.py     
2021-07-28 13:24:18.000000000 +0200
@@ -91,7 +91,13 @@
                 for path in self._glob(url_path)
             )
         else:
-            paths = self._glob(os.path.expanduser(val))
+            try:
+                expanded = os.path.expanduser(val)
+            except ValueError:
+                # os.path.expanduser('~\ud800') can raise UnicodeEncodeError
+                # via pwd.getpwnam. '~\x00' can raise ValueError.
+                expanded = val
+            paths = self._glob(expanded)
             self._paths = sorted(self._contract_user(val, path) for path in 
paths)
 
     def data(self, index: QModelIndex, role: int = Qt.DisplayRole) -> 
Optional[str]:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/components/braveadblock.py 
new/qutebrowser-2.3.1/qutebrowser/components/braveadblock.py
--- old/qutebrowser-2.3.0/qutebrowser/components/braveadblock.py        
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/components/braveadblock.py        
2021-07-28 14:35:12.000000000 +0200
@@ -23,7 +23,8 @@
 import logging
 import pathlib
 import functools
-from typing import Optional, IO
+import contextlib
+from typing import Optional, IO, Iterator
 
 from PyQt5.QtCore import QUrl
 
@@ -116,6 +117,37 @@
     return _RESOURCE_TYPE_STRINGS.get(resource_type, "other")
 
 
+class DeserializationError(Exception):
+
+    """Custom exception for adblock.DeserializationErrors.
+
+    See _map_exception below for details.
+    """
+
+
[email protected]
+def _map_exceptions() -> Iterator[None]:
+    """Handle exception API differences in adblock 0.5.0.
+
+    adblock < 0.5.0 will raise a ValueError with a string describing the
+    exception class for all exceptions. With adblock 0.5.0+, it raises proper
+    exception classes.
+
+    This context manager unifies the two (only for DeserializationError so 
far).
+    """
+    adblock_deserialization_error = getattr(
+        adblock, "DeserializationError", ValueError)
+
+    try:
+        yield
+    except adblock_deserialization_error as e:
+        if isinstance(e, ValueError) and str(e) != "DeserializationError":
+            # All Rust exceptions get turned into a ValueError by
+            # python-adblock
+            raise
+        raise DeserializationError(str(e))
+
+
 class BraveAdBlocker:
 
     """Manage blocked hosts based on Brave's adblocker.
@@ -212,12 +244,9 @@
         if cache_exists:
             logger.debug("Loading cached adblock data: %s", self._cache_path)
             try:
-                self._engine.deserialize_from_file(str(self._cache_path))
-            except ValueError as e:
-                if str(e) != "DeserializationError":
-                    # All Rust exceptions get turned into a ValueError by
-                    # python-adblock
-                    raise
+                with _map_exceptions():
+                    self._engine.deserialize_from_file(str(self._cache_path))
+            except DeserializationError:
                 message.error("Reading adblock filter data failed (corrupted 
data?). "
                               "Please run :adblock-update.")
         else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/git-commit-id 
new/qutebrowser-2.3.1/qutebrowser/git-commit-id
--- old/qutebrowser-2.3.0/qutebrowser/git-commit-id     2021-06-28 
17:32:39.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/git-commit-id     2021-07-28 
14:44:17.000000000 +0200
@@ -1 +1 @@
-a55355eaa on HEAD (2021-06-28 17:29:52 +0200)
\ No newline at end of file
+55bfe82b0 on HEAD (2021-07-28 14:33:55 +0200)
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/html/doc/changelog.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/changelog.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/changelog.html   2021-06-28 
17:32:23.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/changelog.html   2021-07-28 
14:44:02.000000000 +0200
@@ -807,6 +807,38 @@
 </div>
 </div>
 <div class="sect1">
+<h2 id="v2.3.1">v2.3.1 (2021-07-28)</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="_fixed">Fixed</h3>
+<div class="ulist"><ul>
+<li>
+<p>
+Updated the workaround for Google Account log in claiming that this browser
+  isn&#8217;t secure. For an equivalent workaround on older versions, run:
+  <code>:set -u https://accounts.google.com/* content.headers.user_agent 
"Mozilla/5.0 ({os_info}; rv:90.0) Gecko/20100101 Firefox/90.0"</code>
+</p>
+</li>
+<li>
+<p>
+Corrupt cache file exceptions with <code>adblock</code> 0.5.0+ are now handled 
properly.
+</p>
+</li>
+<li>
+<p>
+Crash when entering unicode surrogates into the filename prompt.
+</p>
+</li>
+<li>
+<p>
+<code>UnboundLocalError</code> in <code>qute-keepass</code> when the database 
couldn&#8217;t be opened.
+</p>
+</li>
+</ul></div>
+</div>
+</div>
+</div>
+<div class="sect1">
 <h2 id="v2.3.0">v2.3.0 (2021-06-28)</h2>
 <div class="sectionbody">
 <div class="sect2">
@@ -856,7 +888,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed">Fixed</h3>
+<h3 id="_fixed_2">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -884,7 +916,7 @@
 <h2 id="v2.2.3">v2.2.3 (2021-06-01)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_2">Fixed</h3>
+<h3 id="_fixed_3">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -969,7 +1001,7 @@
 <h2 id="v2.2.2">v2.2.2 (2021-05-20)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_3">Fixed</h3>
+<h3 id="_fixed_4">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1027,7 +1059,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_4">Fixed</h3>
+<h3 id="_fixed_5">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1355,7 +1387,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_5">Fixed</h3>
+<h3 id="_fixed_6">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1436,7 +1468,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_6">Fixed</h3>
+<h3 id="_fixed_7">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1723,7 +1755,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_7">Fixed</h3>
+<h3 id="_fixed_8">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1831,7 +1863,7 @@
 <h2 id="v2.0.2">v2.0.2 (2021-02-04)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_8">Fixed</h3>
+<h3 id="_fixed_9">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -1938,7 +1970,7 @@
 <h2 id="v2.0.1">v2.0.1 (2021-01-28)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_9">Fixed</h3>
+<h3 id="_fixed_10">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -2619,7 +2651,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_10">Fixed</h3>
+<h3 id="_fixed_11">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -2785,7 +2817,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_11">Fixed</h3>
+<h3 id="_fixed_12">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -3207,7 +3239,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_12">Fixed</h3>
+<h3 id="_fixed_13">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -3351,7 +3383,7 @@
 <h2 id="v1.13.1">v1.13.1 (2020-07-17)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_13">Fixed</h3>
+<h3 id="_fixed_14">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -3654,7 +3686,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_14">Fixed</h3>
+<h3 id="_fixed_15">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -3842,7 +3874,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_15">Fixed</h3>
+<h3 id="_fixed_16">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4080,7 +4112,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_16">Fixed</h3>
+<h3 id="_fixed_17">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4131,7 +4163,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_17">Fixed</h3>
+<h3 id="_fixed_18">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4152,7 +4184,7 @@
 <h2 id="v1.10.1">v1.10.1 (2020-02-15)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_18">Fixed</h3>
+<h3 id="_fixed_19">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4323,7 +4355,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_19">Fixed</h3>
+<h3 id="_fixed_20">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4564,7 +4596,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_20">Fixed</h3>
+<h3 id="_fixed_21">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4710,7 +4742,7 @@
 <h2 id="v1.8.3">v1.8.3 (2019-12-05)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_21">Fixed</h3>
+<h3 id="_fixed_22">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4738,7 +4770,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_22">Fixed</h3>
+<h3 id="_fixed_23">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -4973,7 +5005,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_23">Fixed</h3>
+<h3 id="_fixed_24">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5353,7 +5385,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_24">Fixed</h3>
+<h3 id="_fixed_25">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5421,7 +5453,7 @@
 <h2 id="v1.6.3">v1.6.3 (2019-06-18)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_25">Fixed</h3>
+<h3 id="_fixed_26">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5464,7 +5496,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_26">Fixed</h3>
+<h3 id="_fixed_27">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5516,7 +5548,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_27">Fixed</h3>
+<h3 id="_fixed_28">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5765,7 +5797,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_28">Fixed</h3>
+<h3 id="_fixed_29">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -5918,7 +5950,7 @@
 <h2 id="v1.5.1">v1.5.1 (2018-10-10)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_29">Fixed</h3>
+<h3 id="_fixed_30">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6193,7 +6225,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_30">Fixed</h3>
+<h3 id="_fixed_31">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6282,7 +6314,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_31">Fixed</h3>
+<h3 id="_fixed_32">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6367,7 +6399,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_32">Fixed</h3>
+<h3 id="_fixed_33">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6700,7 +6732,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_33">Fixed</h3>
+<h3 id="_fixed_34">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6771,7 +6803,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_34">Fixed</h3>
+<h3 id="_fixed_35">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6798,7 +6830,7 @@
 <h2 id="v1.3.2">v1.3.2 (2018-06-10)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_35">Fixed</h3>
+<h3 id="_fixed_36">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6832,7 +6864,7 @@
 <h2 id="v1.3.1">v1.3.1 (2018-05-29)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_36">Fixed</h3>
+<h3 id="_fixed_37">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -6969,7 +7001,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_37">Fixed</h3>
+<h3 id="_fixed_38">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -7124,7 +7156,7 @@
 <h2 id="v1.2.1">v1.2.1 (2018-03-14)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_38">Fixed</h3>
+<h3 id="_fixed_39">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -7481,7 +7513,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_39">Fixed</h3>
+<h3 id="_fixed_40">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -7665,7 +7697,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_40">Fixed</h3>
+<h3 id="_fixed_41">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -7685,7 +7717,7 @@
 <h2 id="v1.1.1">v1.1.1 (2018-01-20)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_41">Fixed</h3>
+<h3 id="_fixed_42">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8042,7 +8074,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_42">Fixed</h3>
+<h3 id="_fixed_43">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8185,7 +8217,7 @@
 <h2 id="v1.0.4">v1.0.4 (2017-11-28)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_43">Fixed</h3>
+<h3 id="_fixed_44">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8248,7 +8280,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_44">Fixed</h3>
+<h3 id="_fixed_45">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8279,7 +8311,7 @@
 <h2 id="v1.0.2">v1.0.2 (2017-10-17)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_45">Fixed</h3>
+<h3 id="_fixed_46">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8329,7 +8361,7 @@
 <h2 id="v1.0.1">v1.0.1 (2017-10-13)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_46">Fixed</h3>
+<h3 id="_fixed_47">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -8929,7 +8961,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_47">Fixed</h3>
+<h3 id="_fixed_48">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -9100,7 +9132,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_48">Fixed</h3>
+<h3 id="_fixed_49">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -9345,7 +9377,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_49">Fixed</h3>
+<h3 id="_fixed_50">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -9476,7 +9508,7 @@
 <h2 id="v0.9.1">v0.9.1 (2017-01-13)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_50">Fixed</h3>
+<h3 id="_fixed_51">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10023,7 +10055,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_51">Fixed</h3>
+<h3 id="_fixed_52">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10075,7 +10107,7 @@
 <h2 id="v0.8.3">v0.8.3 (2016-11-05)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_52">Fixed</h3>
+<h3 id="_fixed_53">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10146,7 +10178,7 @@
 <h2 id="v0.8.2">v0.8.2 (2016-08-02)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_53">Fixed</h3>
+<h3 id="_fixed_54">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10220,7 +10252,7 @@
 <h2 id="v0.8.1">v0.8.1 (2016-07-27)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_54">Fixed</h3>
+<h3 id="_fixed_55">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10337,7 +10369,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_55">Fixed</h3>
+<h3 id="_fixed_56">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10589,7 +10621,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_56">Fixed</h3>
+<h3 id="_fixed_57">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10697,7 +10729,7 @@
 <h2 id="v0.6.2">v0.6.2 (2016-04-30)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_57">Fixed</h3>
+<h3 id="_fixed_58">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10734,7 +10766,7 @@
 <h2 id="v0.6.1">v0.6.1 (2016-04-10)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_58">Fixed</h3>
+<h3 id="_fixed_59">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10874,7 +10906,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_59">Fixed</h3>
+<h3 id="_fixed_60">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -10982,7 +11014,7 @@
 <h2 id="v0.5.1">v0.5.1 (2016-01-18)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_60">Fixed</h3>
+<h3 id="_fixed_61">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -11303,7 +11335,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_61">Fixed</h3>
+<h3 id="_fixed_62">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -11396,7 +11428,7 @@
 <h2 id="v0.4.1">v0.4.1 (2015-09-30)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_62">Fixed</h3>
+<h3 id="_fixed_63">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -11598,7 +11630,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_63">Fixed</h3>
+<h3 id="_fixed_64">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -11927,7 +11959,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_64">Fixed</h3>
+<h3 id="_fixed_65">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -12021,7 +12053,7 @@
 <h2 id="v0.2.1">v0.2.1 (2015-04-19)</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_fixed_65">Fixed</h3>
+<h3 id="_fixed_66">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -12603,7 +12635,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_66">Fixed</h3>
+<h3 id="_fixed_67">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -12763,7 +12795,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_67">Fixed</h3>
+<h3 id="_fixed_68">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -12873,7 +12905,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_68">Fixed</h3>
+<h3 id="_fixed_69">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -12988,7 +13020,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_69">Fixed</h3>
+<h3 id="_fixed_70">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -13168,7 +13200,7 @@
 </ul></div>
 </div>
 <div class="sect2">
-<h3 id="_fixed_70">Fixed</h3>
+<h3 id="_fixed_71">Fixed</h3>
 <div class="ulist"><ul>
 <li>
 <p>
@@ -13290,7 +13322,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:21 CEST
+ 2021-07-28 14:44:00 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/html/doc/commands.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/commands.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/commands.html    2021-06-28 
17:32:28.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/commands.html    2021-07-28 
14:44:08.000000000 +0200
@@ -5230,7 +5230,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:27 CEST
+ 2021-07-28 14:44:07 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/html/doc/configuring.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/configuring.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/configuring.html 2021-06-28 
17:32:27.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/configuring.html 2021-07-28 
14:44:06.000000000 +0200
@@ -1281,7 +1281,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:25 CEST
+ 2021-07-28 14:44:04 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/html/doc/contributing.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/contributing.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/contributing.html        
2021-06-28 17:32:24.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/contributing.html        
2021-07-28 14:44:04.000000000 +0200
@@ -2265,7 +2265,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:23 CEST
+ 2021-07-28 14:44:02 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/html/doc/faq.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/faq.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/faq.html 2021-06-28 
17:32:21.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/faq.html 2021-07-28 
14:44:00.000000000 +0200
@@ -1612,7 +1612,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:20 CEST
+ 2021-07-28 14:43:59 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/html/doc/index.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/index.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/index.html       2021-06-28 
17:32:27.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/index.html       2021-07-28 
14:44:07.000000000 +0200
@@ -953,7 +953,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:27 CEST
+ 2021-07-28 14:44:06 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/html/doc/quickstart.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/quickstart.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/quickstart.html  2021-06-28 
17:32:24.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/quickstart.html  2021-07-28 
14:44:04.000000000 +0200
@@ -982,7 +982,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:24 CEST
+ 2021-07-28 14:44:04 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/html/doc/settings.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/settings.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/settings.html    2021-06-28 
17:32:32.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/settings.html    2021-07-28 
14:44:11.000000000 +0200
@@ -8965,7 +8965,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:28 CEST
+ 2021-07-28 14:44:08 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/qutebrowser/html/doc/userscripts.html 
new/qutebrowser-2.3.1/qutebrowser/html/doc/userscripts.html
--- old/qutebrowser-2.3.0/qutebrowser/html/doc/userscripts.html 2021-06-28 
17:32:25.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/html/doc/userscripts.html 2021-07-28 
14:44:04.000000000 +0200
@@ -987,7 +987,7 @@
 <div id="footer">
 <div id="footer-text">
 Last updated
- 2021-06-28 17:32:24 CEST
+ 2021-07-28 14:44:04 CEST
 </div>
 </div>
 </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/keyinput/modeman.py 
new/qutebrowser-2.3.1/qutebrowser/keyinput/modeman.py
--- old/qutebrowser-2.3.0/qutebrowser/keyinput/modeman.py       2021-06-15 
22:54:40.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/keyinput/modeman.py       2021-07-28 
14:08:16.000000000 +0200
@@ -284,8 +284,8 @@
         curmode = self.mode
         parser = self.parsers[curmode]
         if curmode != usertypes.KeyMode.insert:
-            log.modes.debug("got keypress in mode {} - delegating to 
{}".format(
-                utils.pyenum_str(curmode), utils.qualname(parser)))
+            log.modes.debug("got keypress in mode {} - delegating to "
+                            "{}".format(curmode, utils.qualname(parser)))
         match = parser.handle(event, dry_run=dry_run)
 
         has_modifier = event.modifiers() not in [
@@ -361,8 +361,7 @@
             return
 
         log.modes.debug("Entering mode {}{}".format(
-            utils.pyenum_str(mode),
-            '' if reason is None else ' (reason: {})'.format(reason)))
+            mode, '' if reason is None else ' (reason: {})'.format(reason)))
         if mode not in self.parsers:
             raise ValueError("No keyparser for mode {}".format(mode))
         if self.mode == mode or (self.mode in PROMPT_MODES and
@@ -430,8 +429,7 @@
                 raise NotInModeError("Not in mode {}!".format(mode))
 
         log.modes.debug("Leaving mode {}{}".format(
-            utils.pyenum_str(mode),
-            '' if reason is None else ' (reason: {})'.format(reason)))
+            mode, '' if reason is None else ' (reason: {})'.format(reason)))
         # leaving a mode implies clearing keychain, see
         # https://github.com/qutebrowser/qutebrowser/issues/1805
         self.clear_keychain()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser/utils/utils.py 
new/qutebrowser-2.3.1/qutebrowser/utils/utils.py
--- old/qutebrowser-2.3.0/qutebrowser/utils/utils.py    2021-06-24 
19:38:22.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser/utils/utils.py    2021-07-28 
14:08:16.000000000 +0200
@@ -375,18 +375,6 @@
         return False
 
 
-def pyenum_str(value: enum.Enum) -> str:
-    """Get a string representation of a Python enum value.
-
-    This will have the form of "EnumType.membername", which is the default 
string
-    representation for Python up to 3.10. Unfortunately, that changes with 
Python 3.10:
-    https://bugs.python.org/issue40066
-    """
-    if sys.version_info[:2] >= (3, 10):
-        return repr(value)
-    return str(value)
-
-
 def get_repr(obj: Any, constructor: bool = False, **attrs: Any) -> str:
     """Get a suitable __repr__ string for an object.
 
@@ -399,14 +387,8 @@
     cls = qualname(obj.__class__)
     parts = []
     items = sorted(attrs.items())
-
     for name, val in items:
-        if isinstance(val, enum.Enum):
-            s = pyenum_str(val)
-        else:
-            s = repr(val)
-        parts.append(f'{name}={s}')
-
+        parts.append('{}={!r}'.format(name, val))
     if constructor:
         return '{}({})'.format(cls, ', '.join(parts))
     else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/qutebrowser.egg-info/PKG-INFO 
new/qutebrowser-2.3.1/qutebrowser.egg-info/PKG-INFO
--- old/qutebrowser-2.3.0/qutebrowser.egg-info/PKG-INFO 2021-06-28 
17:32:39.000000000 +0200
+++ new/qutebrowser-2.3.1/qutebrowser.egg-info/PKG-INFO 2021-07-28 
14:44:17.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: qutebrowser
-Version: 2.3.0
+Version: 2.3.1
 Summary: A keyboard-driven, vim-like browser based on PyQt5.
 Home-page: https://www.qutebrowser.org/
 Author: Florian Bruhin
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/end2end/features/downloads.feature 
new/qutebrowser-2.3.1/tests/end2end/features/downloads.feature
--- old/qutebrowser-2.3.0/tests/end2end/features/downloads.feature      
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/end2end/features/downloads.feature      
2021-07-28 14:08:16.000000000 +0200
@@ -79,7 +79,7 @@
         And I set downloads.location.prompt to true
         And I open data/downloads/issue1243.html
         And I hint with args "links download" and follow a
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='qutebrowser-download' mode=PromptMode.download option=None text=* 
title='Save file to:'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='qutebrowser-download' mode=<PromptMode.download: 5> option=None text=* 
title='Save file to:'>, *" in the log
         Then the error "Download error: No handler found for qute://" should 
be shown
         And "NotFoundError while handling qute://* URL" should be logged
 
@@ -88,7 +88,7 @@
         And I set downloads.location.prompt to true
         And I open data/data_link.html
         And I hint with args "links download" and follow s
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='download.pdf' mode=PromptMode.download option=None text=* title='Save 
file to:'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='download.pdf' mode=<PromptMode.download: 5> option=None text=* 
title='Save file to:'>, *" in the log
         And I run :mode-leave
         Then no crash should happen
 
@@ -96,7 +96,7 @@
         When I set downloads.location.suggestion to filename
         And I set downloads.location.prompt to true
         And I open data/downloads/download.bin in a new window without waiting
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> *" in the log
         And I run :window-only
         And I run :mode-leave
         Then no crash should happen
@@ -164,7 +164,7 @@
     Scenario: Downloading a file to a reserved path
         When I set downloads.location.prompt to true
         And I open data/downloads/download.bin without waiting
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text='Please enter a location 
for <b>http://localhost:*/data/downloads/download.bin</b>' title='Save file 
to:'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text='Please enter a 
location for <b>http://localhost:*/data/downloads/download.bin</b>' title='Save 
file to:'>, *" in the log
         And I run :prompt-accept COM1
         And I run :mode-leave
         Then the error "Invalid filename" should be shown
@@ -173,7 +173,7 @@
     Scenario: Downloading a file to a drive-relative working directory
         When I set downloads.location.prompt to true
         And I open data/downloads/download.bin without waiting
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text='Please enter a location 
for <b>http://localhost:*/data/downloads/download.bin</b>' title='Save file 
to:'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text='Please enter a 
location for <b>http://localhost:*/data/downloads/download.bin</b>' title='Save 
file to:'>, *" in the log
         And I run :prompt-accept C:foobar
         And I run :mode-leave
         Then the error "Invalid filename" should be shown
@@ -247,14 +247,14 @@
 
     Scenario: :download with a filename and directory which doesn't exist
         When I run :download --dest 
(tmpdir)(dirsep)downloads(dirsep)somedir(dirsep)file 
http://localhost:(port)/data/downloads/download.bin
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=PromptMode.yesno option=None text='<b>*</b> does not exist. 
Create it?' title='Create directory?'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=<PromptMode.yesno: 1> option=None text='<b>*</b> does not 
exist. Create it?' title='Create directory?'>, *" in the log
         And I run :prompt-accept yes
         And I wait until the download is finished
         Then the downloaded file somedir/file should exist
 
     Scenario: :download with a directory which doesn't exist
         When I run :download --dest 
(tmpdir)(dirsep)downloads(dirsep)somedir(dirsep) 
http://localhost:(port)/data/downloads/download.bin
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=PromptMode.yesno option=None text='<b>*</b> does not exist. 
Create it?' title='Create directory?'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=<PromptMode.yesno: 1> option=None text='<b>*</b> does not 
exist. Create it?' title='Create directory?'>, *" in the log
         And I run :prompt-accept yes
         And I wait until the download is finished
         Then the downloaded file somedir/download.bin should exist
@@ -279,13 +279,13 @@
         When I set downloads.location.prompt to true
         And I open data/title.html
         And I run :download --mhtml
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text='Please enter a location 
for <b>http://localhost:*/data/title.html</b>' title='Save file to:'>, *" in 
the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text='Please enter a 
location for <b>http://localhost:*/data/title.html</b>' title='Save file to:'>, 
*" in the log
         And I run :prompt-accept
         And I wait for "File successfully written." in the log
         And I run :download --mhtml
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text='Please enter a location 
for <b>http://localhost:*/data/title.html</b>' title='Save file to:'>, *" in 
the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text='Please enter a 
location for <b>http://localhost:*/data/title.html</b>' title='Save file to:'>, 
*" in the log
         And I run :prompt-accept
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=PromptMode.yesno option=None text='<b>*</b> already exists. 
Overwrite?' title='Overwrite existing file?'>, *" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=None mode=<PromptMode.yesno: 1> option=None text='<b>*</b> already 
exists. Overwrite?' title='Overwrite existing file?'>, *" in the log
         And I run :prompt-accept yes
         And I wait for "File successfully written." in the log
         Then the downloaded file Test title.mhtml should exist
@@ -655,9 +655,9 @@
     Scenario: Answering a question for a cancelled download (#415)
         When I set downloads.location.prompt to true
         And I run :download http://localhost:(port)/data/downloads/download.bin
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text=* title='Save file to:'>, 
*" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text=* title='Save file 
to:'>, *" in the log
         And I run :download 
http://localhost:(port)/data/downloads/download2.bin
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=PromptMode.download option=None text=* title='Save file to:'>, 
*" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default='*' mode=<PromptMode.download: 5> option=None text=* title='Save file 
to:'>, *" in the log
         And I run :download-cancel with count 2
         And I run :prompt-accept
         And I wait until the download is finished
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/end2end/features/misc.feature 
new/qutebrowser-2.3.1/tests/end2end/features/misc.feature
--- old/qutebrowser-2.3.0/tests/end2end/features/misc.feature   2021-06-15 
21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/end2end/features/misc.feature   2021-07-28 
14:08:16.000000000 +0200
@@ -196,7 +196,7 @@
         # We can't use "When I open" because we don't want to wait for load
         # finished
         When I run :open http://localhost:(port)/redirect-later?delay=-1
-        And I wait for "emitting: cur_load_status_changed(*loading*) (tab *)" 
in the log
+        And I wait for "emitting: cur_load_status_changed(<LoadStatus.loading: 
*>) (tab *)" in the log
         And I wait 1s
         And I run :stop
         And I open redirect-later-continue in a new tab
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/end2end/features/qutescheme.feature 
new/qutebrowser-2.3.1/tests/end2end/features/qutescheme.feature
--- old/qutebrowser-2.3.0/tests/end2end/features/qutescheme.feature     
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/end2end/features/qutescheme.feature     
2021-07-28 14:08:16.000000000 +0200
@@ -192,7 +192,7 @@
         And I open data/misc/test.pdf without waiting
         And I wait for "[qute://pdfjs/*] PDF * (PDF.js: *)" in the log
         And I run :jseval document.getElementById("download").click()
-        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=* mode=PromptMode.download option=None text=* title='Save file to:'>, 
*" in the log
+        And I wait for "Asking question <qutebrowser.utils.usertypes.Question 
default=* mode=<PromptMode.download: 5> option=None text=* title='Save file 
to:'>, *" in the log
         And I run :mode-leave
         Then no crash should happen
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/end2end/features/test_downloads_bdd.py 
new/qutebrowser-2.3.1/tests/end2end/features/test_downloads_bdd.py
--- old/qutebrowser-2.3.0/tests/end2end/features/test_downloads_bdd.py  
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/end2end/features/test_downloads_bdd.py  
2021-07-28 14:08:16.000000000 +0200
@@ -28,7 +28,7 @@
 
 
 PROMPT_MSG = ("Asking question <qutebrowser.utils.usertypes.Question "
-              "default={!r} mode=PromptMode.download option=None "
+              "default={!r} mode=<PromptMode.download: 5> option=None "
               "text=* title='Save file to:'>, *")
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/unit/completion/test_models.py 
new/qutebrowser-2.3.1/tests/unit/completion/test_models.py
--- old/qutebrowser-2.3.0/tests/unit/completion/test_models.py  2021-06-15 
21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/unit/completion/test_models.py  2021-07-28 
13:17:59.000000000 +0200
@@ -462,8 +462,7 @@
 @hypothesis.given(
     as_uri=hst.booleans(),
     add_sep=hst.booleans(),
-    text=hst.text(alphabet=hst.characters(
-        blacklist_categories=['Cc'], blacklist_characters='\x00')),
+    text=hst.text(),
 )
 def test_filesystem_completion_hypothesis(info, as_uri, add_sep, text):
     if as_uri:
@@ -474,6 +473,12 @@
     model = filepathcategory.FilePathCategory('filepaths')
     model.set_pattern(text)
 
+
[email protected]('text', ['~\ud800', '~\x00'])
+def test_filesystem_completion_corner_cases(info, text):
+    model = filepathcategory.FilePathCategory('filepaths')
+    model.set_pattern(text)
+
 
 def test_default_filesystem_completion(qtmodeltester, config_stub, info,
                                        web_history_populated, quickmarks, 
bookmarks,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qutebrowser-2.3.0/tests/unit/components/test_braveadblock.py 
new/qutebrowser-2.3.1/tests/unit/components/test_braveadblock.py
--- old/qutebrowser-2.3.0/tests/unit/components/test_braveadblock.py    
2021-06-15 21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/unit/components/test_braveadblock.py    
2021-07-22 23:35:33.000000000 +0200
@@ -29,6 +29,7 @@
 from qutebrowser.api.interceptor import ResourceType
 from qutebrowser.components import braveadblock
 from qutebrowser.components.utils import blockutils
+from qutebrowser.utils import usertypes
 from helpers import testutils
 
 pytestmark = pytest.mark.usefixtures("qapp")
@@ -417,3 +418,15 @@
         request_type=resource_type_str
     )
     assert result.matched
+
+
+def test_corrupt_cache_handling(ad_blocker, message_mock, caplog):
+    ad_blocker._cache_path.write_text("blablub")
+
+    with caplog.at_level(logging.ERROR):
+        ad_blocker.read_cache()
+
+    msg = message_mock.getmsg(usertypes.MessageLevel.error)
+    assert msg.text == (
+        "Reading adblock filter data failed (corrupted data?). "
+        "Please run :adblock-update.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qutebrowser-2.3.0/tests/unit/utils/test_utils.py 
new/qutebrowser-2.3.1/tests/unit/utils/test_utils.py
--- old/qutebrowser-2.3.0/tests/unit/utils/test_utils.py        2021-06-15 
21:52:45.000000000 +0200
+++ new/qutebrowser-2.3.1/tests/unit/utils/test_utils.py        2021-07-28 
14:08:16.000000000 +0200
@@ -546,34 +546,6 @@
         assert not utils.is_enum(23)
 
 
-class SomeEnum(enum.Enum):
-
-    some_value = enum.auto()
-
-
-class TestPyEnumStr:
-
-    @pytest.fixture
-    def val(self):
-        return SomeEnum.some_value
-
-    def test_fake_old_python_version(self, monkeypatch, val):
-        monkeypatch.setattr(sys, 'version_info', (3, 9, 2))
-        assert utils.pyenum_str(val) == str(val)
-
-    def test_fake_new_python_version(self, monkeypatch, val):
-        monkeypatch.setattr(sys, 'version_info', (3, 10, 0))
-        assert utils.pyenum_str(val) == repr(val)
-
-    def test_real_result(self, val):
-        assert utils.pyenum_str(val) == 'SomeEnum.some_value'
-
-    @pytest.mark.skipif(sys.version_info[:2] < (3, 10), reason='Needs Python 
3.10+')
-    def test_needed(self, val):
-        """Fail if this change gets revered before the final 3.10 release."""
-        assert str(val) != 'SomeEnum.some_value'
-
-
 class TestRaises:
 
     """Test raises."""

Reply via email to