diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index 35ef07d8a..2406ed43a 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -468,6 +468,28 @@ class IncDecError(Exception): return '{}: {}'.format(self.msg, self.url.toString()) +def _get_incdec_value(match, incdec, url): + """Get a incremented/decremented URL based on a URL match.""" + pre, zeroes, number, post = match.groups() + # This should always succeed because we match \d+ + val = int(number) + if incdec == 'decrement': + if val <= 0: + raise IncDecError("Can't decrement {}!".format(val), url) + val -= 1 + elif incdec == 'increment': + val += 1 + else: + raise ValueError("Invalid value {} for indec!".format(incdec)) + if zeroes: + if len(number) < len(str(val)): + zeroes = zeroes[1:] + elif len(number) > len(str(val)): + zeroes += '0' + + return ''.join([pre, zeroes, str(val), post]) + + def incdec_number(url, incdec, segments=None): """Find a number in the url and increment or decrement it. @@ -513,26 +535,7 @@ def incdec_number(url, incdec, segments=None): if not match: continue - pre, zeroes, number, post = match.groups() - # This should always succeed because we match \d+ - val = int(number) - if incdec == 'decrement': - if val <= 0: - raise IncDecError("Can't decrement {}!".format(val), url) - val -= 1 - elif incdec == 'increment': - val += 1 - else: - raise ValueError("Invalid value {} for indec!".format(incdec)) - if zeroes: - if len(number) < len(str(val)): - zeroes = zeroes[1:] - elif len(number) > len(str(val)): - zeroes += '0' - - new_value = ''.join([pre, zeroes, str(val), post]) - setter(new_value) - + setter(_get_incdec_value(match, incdec, url)) return url raise IncDecError("No number found in URL!", url) diff --git a/tests/unit/utils/test_urlutils.py b/tests/unit/utils/test_urlutils.py index dfd591449..707edd704 100644 --- a/tests/unit/utils/test_urlutils.py +++ b/tests/unit/utils/test_urlutils.py @@ -600,8 +600,7 @@ class TestIncDecNumber: url = 'http://example.com/{}' base_url = QUrl(url.format(number)) expected_url = QUrl(url.format(expected)) - new_url = urlutils.incdec_number( - base_url, incdec, segments={'path'}) + new_url = urlutils.incdec_number(base_url, incdec, segments={'path'}) assert new_url == expected_url @pytest.mark.parametrize('url, segments, expected', [