Your message dated Tue, 26 Sep 2023 13:25:55 +0000
with message-id <[email protected]>
and subject line Bug#1042342: fixed in yarl 1.8.2-2
has caused the Debian Bug report #1042342,
regarding yarl: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i 
python{version} -p 3.11 returned exit code 13
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1042342: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1042342
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Source: yarl
Version: 1.8.2-1
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: [email protected]
Usertags: ftbfs-20230726 ftbfs-trixie

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> cd docs && \
> PYTHONPATH=/<<PKGBUILDDIR>> http_proxy='http://127.0.0.1:9/' 
> https_proxy='https://127.0.0.1:9/' \
> python3 -m sphinx -N -E -T -b html . /<<PKGBUILDDIR>>/.pybuild/docs/html/
> Running Sphinx v5.3.0
> making output directory... done
> building [mo]: targets for 0 po files that are out of date
> building [html]: targets for 2 source files that are out of date
> updating environment: [new config] 2 added, 0 changed, 0 removed
> reading sources... [ 50%] api
> reading sources... [100%] index
> 
> looking for now-outdated files... none found
> pickling environment... done
> checking consistency... done
> preparing documents... done
> writing output... [ 50%] api
> writing output... [100%] index
> 
> /<<PKGBUILDDIR>>/docs/api.rst:1: WARNING: py:class reference target not 
> found: multidict.MultiDictProxy
> /<<PKGBUILDDIR>>/docs/api.rst:5: WARNING: py:class reference target not 
> found: collections.abc.Mapping
> /<<PKGBUILDDIR>>/docs/api.rst:5: WARNING: py:class reference target not 
> found: multidict.MultiDict
> /<<PKGBUILDDIR>>/docs/api.rst:10: WARNING: py:class reference target not 
> found: collections.abc.Mapping
> /<<PKGBUILDDIR>>/docs/api.rst:10: WARNING: py:class reference target not 
> found: multidict.MultiDict
> /<<PKGBUILDDIR>>/docs/api.rst:1: WARNING: py:func reference target not found: 
> functools.lru_cache
> /<<PKGBUILDDIR>>/docs/api.rst:943: WARNING: py:mod reference target not 
> found: urllib.parse
> /<<PKGBUILDDIR>>/docs/api.rst:946: WARNING: py:mod reference target not 
> found: pathlib
> /<<PKGBUILDDIR>>/docs/index.rst:118: WARNING: py:mod reference target not 
> found: multidict
> generating indices... genindex py-modindex done
> highlighting module code... [100%] yarl._url
> 
> writing additional pages... search done
> copying static files... done
> copying extra files... done
> dumping search index in English (code: en)... done
> dumping object inventory... done
> build succeeded, 9 warnings.
> 
> The HTML pages are in ../.pybuild/docs/html.
> rm -rf /<<PKGBUILDDIR>>/.pybuild/docs/html/.doctrees
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
>    dh_auto_build -O--buildsystem=pybuild -Npython-yarl-doc
> I: pybuild pybuild:307: cython3 yarl/_quoting_c.pyx
> I: pybuild base:240: /usr/bin/python3 setup.py build 
> /usr/lib/python3/dist-packages/setuptools/config/setupcfg.py:293: 
> _DeprecatedConfig: Deprecated config in `setup.cfg`
> !!
> 
>         
> ********************************************************************************
>         The license_file parameter is deprecated, use license_files instead.
> 
>         By 2023-Oct-30, you need to update your project and remove deprecated 
> calls
>         or your builds will no longer be supported.
> 
>         See 
> https://setuptools.pypa.io/en/latest/userguide/declarative_config.html for 
> details.
>         
> ********************************************************************************
> 
> !!
>   parsed = self.parsers.get(option_name, lambda x: x)(value)
> **********************
> * Accelerated build *
> **********************
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/_quoting.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/__init__.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/_quoting_py.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/_url.py -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> running egg_info
> writing yarl.egg-info/PKG-INFO
> writing dependency_links to yarl.egg-info/dependency_links.txt
> writing requirements to yarl.egg-info/requires.txt
> writing top-level names to yarl.egg-info/top_level.txt
> reading manifest file 'yarl.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> warning: no previously-included files matching '*.cache' found anywhere in 
> distribution
> warning: no previously-included files found matching 'yarl/*.html'
> warning: no previously-included files found matching 'yarl/*.so'
> warning: no previously-included files found matching 'yarl/*.pyd'
> no previously-included directories found matching 'docs/_build'
> adding license file 'LICENSE'
> writing manifest file 'yarl.egg-info/SOURCES.txt'
> copying yarl/__init__.pyi -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/_quoting_c.pyi -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/_quoting_c.pyx -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> copying yarl/py.typed -> 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl
> running build_ext
> building 'yarl._quoting_c' extension
> creating build
> creating build/temp.linux-x86_64-cpython-311
> creating build/temp.linux-x86_64-cpython-311/yarl
> x86_64-linux-gnu-gcc -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -I/usr/include/python3.11 -c yarl/_quoting_c.c -o 
> build/temp.linux-x86_64-cpython-311/yarl/_quoting_c.o
> x86_64-linux-gnu-gcc -shared -Wl,-O1 -Wl,-Bsymbolic-functions -g -fwrapv -O2 
> -Wl,-z,relro -Wl,-z,now -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. 
> -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time 
> -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-cpython-311/yarl/_quoting_c.o 
> -L/usr/lib/x86_64-linux-gnu -o 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build/yarl/_quoting_c.cpython-311-x86_64-linux-gnu.so
>    dh_auto_test -O--buildsystem=pybuild -Npython-yarl-doc
> I: pybuild base:240: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build; 
> python3.11 -m pytest tests
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.11.4, pytest-7.4.0, pluggy-1.2.0 -- 
> /usr/bin/python3.11
> cachedir: .pytest_cache
> rootdir: /<<PKGBUILDDIR>>
> configfile: setup.cfg
> plugins: cov-4.1.0
> collecting ... collected 1047 items
> 
> tests/test_cache.py::test_cache_clear PASSED                             [  
> 0%]
> tests/test_cache.py::test_cache_info PASSED                              [  
> 0%]
> tests/test_cache.py::test_cache_configure_default PASSED                 [  
> 0%]
> tests/test_cache.py::test_cache_configure_None PASSED                    [  
> 0%]
> tests/test_cache.py::test_cache_configure_explicit PASSED                [  
> 0%]
> tests/test_cached_property.py::test_reify PASSED                         [  
> 0%]
> tests/test_cached_property.py::test_reify_class PASSED                   [  
> 0%]
> tests/test_cached_property.py::test_reify_assignment PASSED              [  
> 0%]
> tests/test_normalize_path.py::test__normalize_path[-] PASSED             [  
> 0%]
> tests/test_normalize_path.py::test__normalize_path[/-/] PASSED           [  
> 0%]
> tests/test_normalize_path.py::test__normalize_path[/-/] PASSED           [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[/-/] PASSED           [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[path/to-path/to] PASSED [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[./path/to-path/to] PASSED 
> [  1%]
> tests/test_normalize_path.py::test__normalize_path[path/to-path/to] PASSED [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[path/to-path/to] PASSED [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[path/to/.-path/to/] PASSED 
> [  1%]
> tests/test_normalize_path.py::test__normalize_path[path/to/.-path/to/] PASSED 
> [  1%]
> tests/test_normalize_path.py::test__normalize_path[../path/to-path/to] PASSED 
> [  1%]
> tests/test_normalize_path.py::test__normalize_path[path/../to-to] PASSED [  
> 1%]
> tests/test_normalize_path.py::test__normalize_path[path/../../to-to] PASSED [ 
>  2%]
> tests/test_normalize_path.py::test__normalize_path[\u03bc\u03bf\u03bd\u03bf\u03c0\u03ac\u03c4\u03b9/../../\u03bd\u03b1/\u1d1c\u0274\u026a/\u1d04\u1d0f\u1d05\u1d07-\u03bd\u03b1/\u1d1c\u0274\u026a/\u1d04\u1d0f\u1d05\u1d07]
>  PASSED [  2%]
> tests/test_normalize_path.py::test__normalize_path[\u03bc\u03bf\u03bd\u03bf\u03c0\u03ac\u03c4\u03b9/../../\u03bd\u03b1/\U0001d566\U0001d55f\U0001d55a/\U0001d554\U0001d560\U0001d555\U0001d556/.-\u03bd\u03b1/\U0001d566\U0001d55f\U0001d55a/\U0001d554\U0001d560\U0001d555\U0001d556/]
>  PASSED [  2%]
> tests/test_pickle.py::test_pickle PASSED                                 [  
> 2%]
> tests/test_pickle.py::test_default_style_state PASSED                    [  
> 2%]
> tests/test_quoting.py::test_quote_not_allowed_non_strict[py_quoter] PASSED [  
> 2%]
> tests/test_quoting.py::test_quote_not_allowed_non_strict[c_quoter] PASSED [  
> 2%]
> tests/test_quoting.py::test_quote_unfinished_tail_percent_non_strict[py_quoter]
>  PASSED [  2%]
> tests/test_quoting.py::test_quote_unfinished_tail_percent_non_strict[c_quoter]
>  PASSED [  2%]
> tests/test_quoting.py::test_quote_unfinished_tail_digit_non_strict[py_quoter] 
> PASSED [  2%]
> tests/test_quoting.py::test_quote_unfinished_tail_digit_non_strict[c_quoter] 
> PASSED [  2%]
> tests/test_quoting.py::test_quote_unfinished_tail_safe_non_strict[py_quoter] 
> PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_safe_non_strict[c_quoter] 
> PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_unsafe_non_strict[py_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_unsafe_non_strict[c_quoter] 
> PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii_non_strict[py_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii_non_strict[c_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii2_non_strict[py_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii2_non_strict[c_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii3_non_strict[py_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_unfinished_tail_non_ascii3_non_strict[c_quoter]
>  PASSED [  3%]
> tests/test_quoting.py::test_quote_from_bytes[py_quoter] PASSED           [  
> 4%]
> tests/test_quoting.py::test_quote_from_bytes[c_quoter] PASSED            [  
> 4%]
> tests/test_quoting.py::test_quote_ignore_broken_unicode[py_quoter] PASSED [  
> 4%]
> tests/test_quoting.py::test_quote_ignore_broken_unicode[c_quoter] PASSED [  
> 4%]
> tests/test_quoting.py::test_unquote_to_bytes[py_unquoter] PASSED         [  
> 4%]
> tests/test_quoting.py::test_unquote_to_bytes[c_unquoter] PASSED          [  
> 4%]
> tests/test_quoting.py::test_never_quote[py_quoter] PASSED                [  
> 4%]
> tests/test_quoting.py::test_never_quote[c_quoter] PASSED                 [  
> 4%]
> tests/test_quoting.py::test_safe[py_quoter] PASSED                       [  
> 4%]
> tests/test_quoting.py::test_safe[c_quoter] PASSED                        [  
> 4%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x00] PASSED       [  
> 4%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x01] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x02] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x03] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x04] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x05] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x06] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x07] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x08] PASSED       [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\t] PASSED         [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\n] PASSED         [  
> 5%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x0b] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x0c] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\r] PASSED         [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x0e] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x0f] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x10] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x11] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x12] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x13] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x14] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x15] PASSED       [  
> 6%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x16] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x17] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x18] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x19] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1a] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1b] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1c] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1d] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1e] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x1f] PASSED       [  
> 7%]
> tests/test_quoting.py::test_default_quoting[py_quoter-<] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter->] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-#] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-"] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-{] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-}] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-|] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\\] PASSED         [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-^] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-[] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-]] PASSED          [  
> 8%]
> tests/test_quoting.py::test_default_quoting[py_quoter-`] PASSED          [  
> 9%]
> tests/test_quoting.py::test_default_quoting[py_quoter-\x7f] PASSED       [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x00] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x01] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x02] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x03] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x04] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x05] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x06] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x07] PASSED        [  
> 9%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x08] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\t] PASSED          [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\n] PASSED          [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x0b] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x0c] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\r] PASSED          [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x0e] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x0f] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x10] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x11] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x12] PASSED        [ 
> 10%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x13] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x14] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x15] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x16] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x17] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x18] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x19] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1a] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1b] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1c] PASSED        [ 
> 11%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1d] PASSED        [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1e] PASSED        [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x1f] PASSED        [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-<] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter->] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-#] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-"] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-{] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-}] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-|] PASSED           [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\\] PASSED          [ 
> 12%]
> tests/test_quoting.py::test_default_quoting[c_quoter-^] PASSED           [ 
> 13%]
> tests/test_quoting.py::test_default_quoting[c_quoter-[] PASSED           [ 
> 13%]
> tests/test_quoting.py::test_default_quoting[c_quoter-]] PASSED           [ 
> 13%]
> tests/test_quoting.py::test_default_quoting[c_quoter-`] PASSED           [ 
> 13%]
> tests/test_quoting.py::test_default_quoting[c_quoter-\x7f] PASSED        [ 
> 13%]
> tests/test_quoting.py::test_default_quoting_percent[py_quoter] PASSED    [ 
> 13%]
> tests/test_quoting.py::test_default_quoting_percent[c_quoter] PASSED     [ 
> 13%]
> tests/test_quoting.py::test_default_quoting_partial[py_quoter] PASSED    [ 
> 13%]
> tests/test_quoting.py::test_default_quoting_partial[c_quoter] PASSED     [ 
> 13%]
> tests/test_quoting.py::test_quoting_space[py_quoter] PASSED              [ 
> 13%]
> tests/test_quoting.py::test_quoting_space[c_quoter] PASSED               [ 
> 14%]
> tests/test_quoting.py::test_quoting_plus[py_quoter] PASSED               [ 
> 14%]
> tests/test_quoting.py::test_quoting_plus[c_quoter] PASSED                [ 
> 14%]
> tests/test_quoting.py::test_quote_with_unicode[py_quoter] PASSED         [ 
> 14%]
> tests/test_quoting.py::test_quote_with_unicode[c_quoter] PASSED          [ 
> 14%]
> tests/test_quoting.py::test_quote_plus_with_unicode[py_quoter] PASSED    [ 
> 14%]
> tests/test_quoting.py::test_quote_plus_with_unicode[c_quoter] PASSED     [ 
> 14%]
> tests/test_quoting.py::test_unquoting[py_unquoter-0] PASSED              [ 
> 14%]
> tests/test_quoting.py::test_unquoting[py_unquoter-1] PASSED              [ 
> 14%]
> tests/test_quoting.py::test_unquoting[py_unquoter-2] PASSED              [ 
> 14%]
> tests/test_quoting.py::test_unquoting[py_unquoter-3] PASSED              [ 
> 14%]
> tests/test_quoting.py::test_unquoting[py_unquoter-4] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-5] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-6] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-7] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-8] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-9] PASSED              [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-10] PASSED             [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-11] PASSED             [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-12] PASSED             [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-13] PASSED             [ 
> 15%]
> tests/test_quoting.py::test_unquoting[py_unquoter-14] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-15] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-16] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-17] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-18] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-19] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-20] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-21] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-22] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-23] PASSED             [ 
> 16%]
> tests/test_quoting.py::test_unquoting[py_unquoter-24] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-25] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-26] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-27] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-28] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-29] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-30] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-31] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-32] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-33] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-34] PASSED             [ 
> 17%]
> tests/test_quoting.py::test_unquoting[py_unquoter-35] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-36] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-37] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-38] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-39] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-40] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-41] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-42] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-43] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-44] PASSED             [ 
> 18%]
> tests/test_quoting.py::test_unquoting[py_unquoter-45] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-46] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-47] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-48] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-49] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-50] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-51] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-52] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-53] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-54] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-55] PASSED             [ 
> 19%]
> tests/test_quoting.py::test_unquoting[py_unquoter-56] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-57] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-58] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-59] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-60] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-61] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-62] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-63] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-64] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-65] PASSED             [ 
> 20%]
> tests/test_quoting.py::test_unquoting[py_unquoter-66] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-67] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-68] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-69] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-70] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-71] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-72] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-73] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-74] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-75] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-76] PASSED             [ 
> 21%]
> tests/test_quoting.py::test_unquoting[py_unquoter-77] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-78] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-79] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-80] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-81] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-82] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-83] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-84] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-85] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-86] PASSED             [ 
> 22%]
> tests/test_quoting.py::test_unquoting[py_unquoter-87] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-88] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-89] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-90] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-91] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-92] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-93] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-94] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-95] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-96] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-97] PASSED             [ 
> 23%]
> tests/test_quoting.py::test_unquoting[py_unquoter-98] PASSED             [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-99] PASSED             [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-100] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-101] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-102] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-103] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-104] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-105] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-106] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-107] PASSED            [ 
> 24%]
> tests/test_quoting.py::test_unquoting[py_unquoter-108] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-109] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-110] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-111] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-112] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-113] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-114] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-115] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-116] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-117] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-118] PASSED            [ 
> 25%]
> tests/test_quoting.py::test_unquoting[py_unquoter-119] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-120] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-121] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-122] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-123] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-124] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-125] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-126] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[py_unquoter-127] PASSED            [ 
> 26%]
> tests/test_quoting.py::test_unquoting[c_unquoter-0] PASSED               [ 
> 26%]
> tests/test_quoting.py::test_unquoting[c_unquoter-1] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-2] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-3] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-4] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-5] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-6] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-7] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-8] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-9] PASSED               [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-10] PASSED              [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-11] PASSED              [ 
> 27%]
> tests/test_quoting.py::test_unquoting[c_unquoter-12] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-13] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-14] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-15] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-16] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-17] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-18] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-19] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-20] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-21] PASSED              [ 
> 28%]
> tests/test_quoting.py::test_unquoting[c_unquoter-22] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-23] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-24] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-25] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-26] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-27] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-28] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-29] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-30] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-31] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-32] PASSED              [ 
> 29%]
> tests/test_quoting.py::test_unquoting[c_unquoter-33] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-34] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-35] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-36] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-37] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-38] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-39] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-40] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-41] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-42] PASSED              [ 
> 30%]
> tests/test_quoting.py::test_unquoting[c_unquoter-43] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-44] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-45] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-46] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-47] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-48] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-49] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-50] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-51] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-52] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-53] PASSED              [ 
> 31%]
> tests/test_quoting.py::test_unquoting[c_unquoter-54] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-55] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-56] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-57] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-58] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-59] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-60] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-61] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-62] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-63] PASSED              [ 
> 32%]
> tests/test_quoting.py::test_unquoting[c_unquoter-64] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-65] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-66] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-67] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-68] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-69] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-70] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-71] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-72] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-73] PASSED              [ 
> 33%]
> tests/test_quoting.py::test_unquoting[c_unquoter-74] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-75] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-76] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-77] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-78] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-79] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-80] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-81] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-82] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-83] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-84] PASSED              [ 
> 34%]
> tests/test_quoting.py::test_unquoting[c_unquoter-85] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-86] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-87] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-88] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-89] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-90] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-91] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-92] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-93] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-94] PASSED              [ 
> 35%]
> tests/test_quoting.py::test_unquoting[c_unquoter-95] PASSED              [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-96] PASSED              [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-97] PASSED              [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-98] PASSED              [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-99] PASSED              [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-100] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-101] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-102] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-103] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-104] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-105] PASSED             [ 
> 36%]
> tests/test_quoting.py::test_unquoting[c_unquoter-106] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-107] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-108] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-109] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-110] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-111] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-112] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-113] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-114] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-115] PASSED             [ 
> 37%]
> tests/test_quoting.py::test_unquoting[c_unquoter-116] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-117] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-118] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-119] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-120] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-121] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-122] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-123] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-124] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-125] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-126] PASSED             [ 
> 38%]
> tests/test_quoting.py::test_unquoting[c_unquoter-127] PASSED             [ 
> 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%-%] 
> PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%2-%2] 
> PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%x-%x] 
> PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%\u20ac-%\u20ac]
>  PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%2x-%2x]
>  PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%2 -%2 
> ] PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-% 2-% 
> 2] PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%xa-%xa]
>  PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%%-%%] 
> PASSED [ 39%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%%3f-%?]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%2%-%2%]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%2%3f-%2?]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%x%3f-%x?]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[py_unquoter-%\u20ac%3f-%\u20ac?]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%-%] 
> PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%2-%2] 
> PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%x-%x] 
> PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%\u20ac-%\u20ac]
>  PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%2x-%2x] 
> PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%2 -%2 ] 
> PASSED [ 40%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-% 2-% 2] 
> PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%xa-%xa] 
> PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%%-%%] 
> PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%%3f-%?] 
> PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%2%-%2%] 
> PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%2%3f-%2?]
>  PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%x%3f-%x?]
>  PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_bad_percent_escapes[c_unquoter-%\u20ac%3f-%\u20ac?]
>  PASSED [ 41%]
> tests/test_quoting.py::test_unquoting_invalid_utf8_sequence[py_unquoter] 
> XFAIL [ 41%]
> tests/test_quoting.py::test_unquoting_invalid_utf8_sequence[c_unquoter] XFAIL 
> [ 41%]
> tests/test_quoting.py::test_unquoting_mixed_case_percent_escapes[py_unquoter] 
> PASSED [ 42%]
> tests/test_quoting.py::test_unquoting_mixed_case_percent_escapes[c_unquoter] 
> PASSED [ 42%]
> tests/test_quoting.py::test_unquoting_parts[py_unquoter] PASSED          [ 
> 42%]
> tests/test_quoting.py::test_unquoting_parts[c_unquoter] PASSED           [ 
> 42%]
> tests/test_quoting.py::test_quote_None[py_quoter] PASSED                 [ 
> 42%]
> tests/test_quoting.py::test_quote_None[c_quoter] PASSED                  [ 
> 42%]
> tests/test_quoting.py::test_unquote_None[py_unquoter] PASSED             [ 
> 42%]
> tests/test_quoting.py::test_unquote_None[c_unquoter] PASSED              [ 
> 42%]
> tests/test_quoting.py::test_quote_empty_string[py_quoter] PASSED         [ 
> 42%]
> tests/test_quoting.py::test_quote_empty_string[c_quoter] PASSED          [ 
> 42%]
> tests/test_quoting.py::test_unquote_empty_string[py_unquoter] PASSED     [ 
> 42%]
> tests/test_quoting.py::test_unquote_empty_string[c_unquoter] PASSED      [ 
> 43%]
> tests/test_quoting.py::test_quote_bad_types[py_quoter] PASSED            [ 
> 43%]
> tests/test_quoting.py::test_quote_bad_types[c_quoter] PASSED             [ 
> 43%]
> tests/test_quoting.py::test_unquote_bad_types[py_unquoter] PASSED        [ 
> 43%]
> tests/test_quoting.py::test_unquote_bad_types[c_unquoter] PASSED         [ 
> 43%]
> tests/test_quoting.py::test_quote_lowercase[py_quoter] PASSED            [ 
> 43%]
> tests/test_quoting.py::test_quote_lowercase[c_quoter] PASSED             [ 
> 43%]
> tests/test_quoting.py::test_quote_unquoted[py_quoter] PASSED             [ 
> 43%]
> tests/test_quoting.py::test_quote_unquoted[c_quoter] PASSED              [ 
> 43%]
> tests/test_quoting.py::test_quote_space[py_quoter] PASSED                [ 
> 43%]
> tests/test_quoting.py::test_quote_space[c_quoter] PASSED                 [ 
> 44%]
> tests/test_quoting.py::test_quote_percent_last_character[py_quoter] PASSED [ 
> 44%]
> tests/test_quoting.py::test_quote_percent_last_character[c_quoter] PASSED [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe[py_unquoter] PASSED           [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe[c_unquoter] PASSED            [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe2[py_unquoter] PASSED          [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe2[c_unquoter] PASSED           [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe3[py_unquoter] PASSED          [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe3[c_unquoter] PASSED           [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe4[py_unquoter] PASSED          [ 
> 44%]
> tests/test_quoting.py::test_unquote_unsafe4[c_unquoter] PASSED           [ 
> 44%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82-%e2%82] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82ac-%e2%82ac] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82%f8-%e2%82%f8] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82%2b-%e2%82+] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82%e2%82%ac-%e2%82\u20ac]
>  PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[py_unquoter-%e2%82%e2%82-%e2%82%e2%82]
>  PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82-%e2%82] PASSED 
> [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82ac-%e2%82ac] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82%f8-%e2%82%f8] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82%2b-%e2%82+] 
> PASSED [ 45%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82%e2%82%ac-%e2%82\u20ac]
>  PASSED [ 46%]
> tests/test_quoting.py::test_unquote_non_utf8[c_unquoter-%e2%82%e2%82-%e2%82%e2%82]
>  PASSED [ 46%]
> tests/test_quoting.py::test_unquote_unsafe_non_utf8[py_unquoter] PASSED  [ 
> 46%]
> tests/test_quoting.py::test_unquote_unsafe_non_utf8[c_unquoter] PASSED   [ 
> 46%]
> tests/test_quoting.py::test_unquote_plus_non_utf8[py_unquoter] PASSED    [ 
> 46%]
> tests/test_quoting.py::test_unquote_plus_non_utf8[c_unquoter] PASSED     [ 
> 46%]
> tests/test_quoting.py::test_quote_non_ascii[py_quoter] PASSED            [ 
> 46%]
> tests/test_quoting.py::test_quote_non_ascii[c_quoter] PASSED             [ 
> 46%]
> tests/test_quoting.py::test_quote_non_ascii2[py_quoter] PASSED           [ 
> 46%]
> tests/test_quoting.py::test_quote_non_ascii2[c_quoter] PASSED            [ 
> 46%]
> tests/test_quoting.py::test_quote_percent_percent_encoded[py_quoter] PASSED [ 
> 46%]
> tests/test_quoting.py::test_quote_percent_percent_encoded[c_quoter] PASSED [ 
> 47%]
> tests/test_quoting.py::test_quote_percent_digit_percent_encoded[py_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_digit_percent_encoded[c_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_safe_percent_encoded[py_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_safe_percent_encoded[c_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_unsafe_percent_encoded[py_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_unsafe_percent_encoded[c_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_non_ascii_percent_encoded[py_quoter]
>  PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_non_ascii_percent_encoded[c_quoter] 
> PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_non_ascii2_percent_encoded[py_quoter]
>  PASSED [ 47%]
> tests/test_quoting.py::test_quote_percent_non_ascii2_percent_encoded[c_quoter]
>  PASSED [ 48%]
> tests/test_quoting.py::test_quote_percent_non_ascii3_percent_encoded[py_quoter]
>  PASSED [ 48%]
> tests/test_quoting.py::test_quote_percent_non_ascii3_percent_encoded[c_quoter]
>  PASSED [ 48%]
> tests/test_quoting.py::test_quote_str_like[py_quoter] PASSED             [ 
> 48%]
> tests/test_quoting.py::test_quote_str_like[c_quoter] PASSED              [ 
> 48%]
> tests/test_quoting.py::test_unquote_str_like[py_unquoter] PASSED         [ 
> 48%]
> tests/test_quoting.py::test_unquote_str_like[c_unquoter] PASSED          [ 
> 48%]
> tests/test_quoting.py::test_quote_sub_delims[py_quoter] PASSED           [ 
> 48%]
> tests/test_quoting.py::test_quote_sub_delims[c_quoter] PASSED            [ 
> 48%]
> tests/test_quoting.py::test_requote_sub_delims[py_quoter] PASSED         [ 
> 48%]
> tests/test_quoting.py::test_requote_sub_delims[c_quoter] PASSED          [ 
> 48%]
> tests/test_quoting.py::test_unquoting_plus[py_unquoter] PASSED           [ 
> 49%]
> tests/test_quoting.py::test_unquoting_plus[c_unquoter] PASSED            [ 
> 49%]
> tests/test_quoting.py::test_unquote_plus_to_space[py_unquoter] PASSED    [ 
> 49%]
> tests/test_quoting.py::test_unquote_plus_to_space[c_unquoter] PASSED     [ 
> 49%]
> tests/test_quoting.py::test_unquote_plus_to_space_unsafe[py_unquoter] PASSED 
> [ 49%]
> tests/test_quoting.py::test_unquote_plus_to_space_unsafe[c_unquoter] PASSED [ 
> 49%]
> tests/test_quoting.py::test_quote_qs_with_colon[py_quoter] PASSED        [ 
> 49%]
> tests/test_quoting.py::test_quote_qs_with_colon[c_quoter] PASSED         [ 
> 49%]
> tests/test_quoting.py::test_quote_protected[py_quoter] PASSED            [ 
> 49%]
> tests/test_quoting.py::test_quote_protected[c_quoter] PASSED             [ 
> 49%]
> tests/test_quoting.py::test_quote_fastpath_safe[py_quoter] PASSED        [ 
> 50%]
> tests/test_quoting.py::test_quote_fastpath_safe[c_quoter] PASSED         [ 
> 50%]
> tests/test_quoting.py::test_quote_fastpath_pct[py_quoter] PASSED         [ 
> 50%]
> tests/test_quoting.py::test_quote_fastpath_pct[c_quoter] PASSED          [ 
> 50%]
> tests/test_quoting.py::test_quote_very_large_string[py_quoter] PASSED    [ 
> 50%]
> tests/test_quoting.py::test_quote_very_large_string[c_quoter] PASSED     [ 
> 50%]
> tests/test_quoting.py::test_space[py_quoter] PASSED                      [ 
> 50%]
> tests/test_quoting.py::test_space[c_quoter] PASSED                       [ 
> 50%]
> tests/test_quoting.py::test_quoter_path_with_plus[py_quoter] PASSED      [ 
> 50%]
> tests/test_quoting.py::test_quoter_path_with_plus[c_quoter] PASSED       [ 
> 50%]
> tests/test_quoting.py::test_unquoter_path_with_plus[py_unquoter] PASSED  [ 
> 51%]
> tests/test_quoting.py::test_unquoter_path_with_plus[c_unquoter] PASSED   [ 
> 51%]
> tests/test_update_query.py::test_with_query PASSED                       [ 
> 51%]
> tests/test_update_query.py::test_update_query PASSED                     [ 
> 51%]
> tests/test_update_query.py::test_update_query_with_args_and_kwargs PASSED [ 
> 51%]
> tests/test_update_query.py::test_update_query_with_multiple_args PASSED  [ 
> 51%]
> tests/test_update_query.py::test_with_query_list_of_pairs PASSED         [ 
> 51%]
> tests/test_update_query.py::test_with_query_list_non_pairs PASSED        [ 
> 51%]
> tests/test_update_query.py::test_with_query_kwargs PASSED                [ 
> 51%]
> tests/test_update_query.py::test_with_query_kwargs_and_args_are_mutually_exclusive
>  PASSED [ 51%]
> tests/test_update_query.py::test_with_query_only_single_arg_is_supported 
> PASSED [ 51%]
> tests/test_update_query.py::test_with_query_empty_dict PASSED            [ 
> 52%]
> tests/test_update_query.py::test_with_query_empty_str PASSED             [ 
> 52%]
> tests/test_update_query.py::test_with_query_empty_value PASSED           [ 
> 52%]
> tests/test_update_query.py::test_with_query_str PASSED                   [ 
> 52%]
> tests/test_update_query.py::test_with_query_str_non_ascii_and_spaces PASSED [ 
> 52%]
> tests/test_update_query.py::test_with_query_int PASSED                   [ 
> 52%]
> tests/test_update_query.py::test_with_query_kwargs_int PASSED            [ 
> 52%]
> tests/test_update_query.py::test_with_query_list_int PASSED              [ 
> 52%]
> tests/test_update_query.py::test_with_query_sequence[empty list] PASSED  [ 
> 52%]
> tests/test_update_query.py::test_with_query_sequence[empty tuple] PASSED [ 
> 52%]
> tests/test_update_query.py::test_with_query_sequence[single list] PASSED [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[single tuple] PASSED [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[list] PASSED        [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[tuple] PASSED       [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[key with braces] PASSED 
> [ 53%]
> tests/test_update_query.py::test_with_query_sequence[quote key] PASSED   [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[mixed types] PASSED [ 
> 53%]
> tests/test_update_query.py::test_with_query_sequence[quote key and value] 
> PASSED [ 53%]
> tests/test_update_query.py::test_with_query_sequence[single then list] PASSED 
> [ 53%]
> tests/test_update_query.py::test_with_query_sequence[list then single] PASSED 
> [ 53%]
> tests/test_update_query.py::test_with_query_sequence[ampersand then int] 
> PASSED [ 53%]
> tests/test_update_query.py::test_with_query_sequence[int then ampersand] 
> PASSED [ 54%]
> tests/test_update_query.py::test_with_query_sequence_invalid_use[nested] 
> PASSED [ 54%]
> tests/test_update_query.py::test_with_query_sequence_invalid_use[tuple list] 
> PASSED [ 54%]
> tests/test_update_query.py::test_with_query_valid_type[str] PASSED       [ 
> 54%]
> tests/test_update_query.py::test_with_query_valid_type[custom str] PASSED [ 
> 54%]
> tests/test_update_query.py::test_with_query_valid_type[int] PASSED       [ 
> 54%]
> tests/test_update_query.py::test_with_query_valid_type[custom int] PASSED [ 
> 54%]
> tests/test_update_query.py::test_with_query_valid_type[float] PASSED     [ 
> 54%]
> tests/test_update_query.py::test_with_query_valid_type[custom float] PASSED [ 
> 54%]
> tests/test_update_query.py::test_with_query_invalid_type[bool] PASSED    [ 
> 54%]
> tests/test_update_query.py::test_with_query_invalid_type[none] PASSED    [ 
> 55%]
> tests/test_update_query.py::test_with_query_invalid_type[non-finite float] 
> PASSED [ 55%]
> tests/test_update_query.py::test_with_query_invalid_type[NaN float] PASSED [ 
> 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[str] PASSED  [ 
> 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[custom str] 
> PASSED [ 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[int] PASSED  [ 
> 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[custom int] 
> PASSED [ 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[float] PASSED [ 
> 55%]
> tests/test_update_query.py::test_with_query_list_valid_type[custom float] 
> PASSED [ 55%]
> tests/test_update_query.py::test_with_query_list_invalid_type[bool] PASSED [ 
> 55%]
> tests/test_update_query.py::test_with_query_list_invalid_type[none] PASSED [ 
> 55%]
> tests/test_update_query.py::test_with_int_enum PASSED                    [ 
> 56%]
> tests/test_update_query.py::test_with_float_enum PASSED                  [ 
> 56%]
> tests/test_update_query.py::test_with_query_multidict PASSED             [ 
> 56%]
> tests/test_update_query.py::test_with_multidict_with_spaces_and_non_ascii 
> PASSED [ 56%]
> tests/test_update_query.py::test_with_query_multidict_with_unsafe PASSED [ 
> 56%]
> tests/test_update_query.py::test_with_query_None PASSED                  [ 
> 56%]
> tests/test_update_query.py::test_with_query_bad_type PASSED              [ 
> 56%]
> tests/test_update_query.py::test_with_query_bytes PASSED                 [ 
> 56%]
> tests/test_update_query.py::test_with_query_bytearray PASSED             [ 
> 56%]
> tests/test_update_query.py::test_with_query_memoryview PASSED            [ 
> 56%]
> tests/test_update_query.py::test_with_query_params[tuple list semicolon] 
> PASSED [ 57%]
> tests/test_update_query.py::test_with_query_params[mapping semicolon] PASSED 
> [ 57%]
> tests/test_update_query.py::test_with_query_params[tuple list ampersand] 
> PASSED [ 57%]
> tests/test_update_query.py::test_with_query_params[mapping ampersand] PASSED 
> [ 57%]
> tests/test_update_query.py::test_with_query_params[tuple list quote key] 
> PASSED [ 57%]
> tests/test_update_query.py::test_with_query_params[mapping quote key] PASSED 
> [ 57%]
> tests/test_update_query.py::test_with_query_params[quote one key braces] 
> PASSED [ 57%]
> tests/test_update_query.py::test_with_query_params[quote many key braces] 
> PASSED [ 57%]
> tests/test_update_query.py::test_with_query_only PASSED                  [ 
> 57%]
> tests/test_update_query.py::test_with_query_complex_url PASSED           [ 
> 57%]
> tests/test_update_query.py::test_update_query_multiple_keys PASSED       [ 
> 57%]
> tests/test_update_query.py::test_update_query_with_mod_operator PASSED   [ 
> 58%]
> tests/test_url.py::test_inheritance PASSED                               [ 
> 58%]
> tests/test_url.py::test_str_subclass PASSED                              [ 
> 58%]
> tests/test_url.py::test_is PASSED                                        [ 
> 58%]
> tests/test_url.py::test_bool PASSED                                      [ 
> 58%]
> tests/test_url.py::test_absolute_url_without_host PASSED                 [ 
> 58%]
> tests/test_url.py::test_url_is_not_str PASSED                            [ 
> 58%]
> tests/test_url.py::test_str PASSED                                       [ 
> 58%]
> tests/test_url.py::test_repr PASSED                                      [ 
> 58%]
> tests/test_url.py::test_origin PASSED                                    [ 
> 58%]
> tests/test_url.py::test_origin_nonascii PASSED                           [ 
> 59%]
> tests/test_url.py::test_origin_ipv6 PASSED                               [ 
> 59%]
> tests/test_url.py::test_origin_not_absolute_url PASSED                   [ 
> 59%]
> tests/test_url.py::test_origin_no_scheme PASSED                          [ 
> 59%]
> tests/test_url.py::test_drop_dots PASSED                                 [ 
> 59%]
> tests/test_url.py::test_abs_cmp PASSED                                   [ 
> 59%]
> tests/test_url.py::test_abs_hash PASSED                                  [ 
> 59%]
> tests/test_url.py::test_scheme PASSED                                    [ 
> 59%]
> tests/test_url.py::test_raw_user PASSED                                  [ 
> 59%]
> tests/test_url.py::test_raw_user_non_ascii PASSED                        [ 
> 59%]
> tests/test_url.py::test_no_user PASSED                                   [ 
> 59%]
> tests/test_url.py::test_user_non_ascii PASSED                            [ 
> 60%]
> tests/test_url.py::test_raw_password PASSED                              [ 
> 60%]
> tests/test_url.py::test_raw_password_non_ascii PASSED                    [ 
> 60%]
> tests/test_url.py::test_password_non_ascii PASSED                        [ 
> 60%]
> tests/test_url.py::test_password_without_user PASSED                     [ 
> 60%]
> tests/test_url.py::test_user_empty_password PASSED                       [ 
> 60%]
> tests/test_url.py::test_raw_host PASSED                                  [ 
> 60%]
> tests/test_url.py::test_raw_host_non_ascii PASSED                        [ 
> 60%]
> tests/test_url.py::test_host_non_ascii PASSED                            [ 
> 60%]
> tests/test_url.py::test_localhost PASSED                                 [ 
> 60%]
> tests/test_url.py::test_host_with_underscore PASSED                      [ 
> 61%]
> tests/test_url.py::test_raw_host_when_port_is_specified PASSED           [ 
> 61%]
> tests/test_url.py::test_raw_host_from_str_with_ipv4 PASSED               [ 
> 61%]
> tests/test_url.py::test_raw_host_from_str_with_ipv6 PASSED               [ 
> 61%]
> tests/test_url.py::test_authority_full PASSED                            [ 
> 61%]
> tests/test_url.py::test_authority_short PASSED                           [ 
> 61%]
> tests/test_url.py::test_authority_full_nonasci PASSED                    [ 
> 61%]
> tests/test_url.py::test_lowercase PASSED                                 [ 
> 61%]
> tests/test_url.py::test_lowercase_nonascii PASSED                        [ 
> 61%]
> tests/test_url.py::test_compressed_ipv6 PASSED                           [ 
> 61%]
> tests/test_url.py::test_ipv6_zone FAILED                                 [ 
> 61%]
> tests/test_url.py::test_ipv4_zone PASSED                                 [ 
> 62%]
> tests/test_url.py::test_port_for_explicit_port PASSED                    [ 
> 62%]
> tests/test_url.py::test_port_for_implicit_port PASSED                    [ 
> 62%]
> tests/test_url.py::test_port_for_relative_url PASSED                     [ 
> 62%]
> tests/test_url.py::test_port_for_unknown_scheme PASSED                   [ 
> 62%]
> tests/test_url.py::test_explicit_port_for_explicit_port PASSED           [ 
> 62%]
> tests/test_url.py::test_explicit_port_for_implicit_port PASSED           [ 
> 62%]
> tests/test_url.py::test_explicit_port_for_relative_url PASSED            [ 
> 62%]
> tests/test_url.py::test_explicit_port_for_unknown_scheme PASSED          [ 
> 62%]
> tests/test_url.py::test_raw_path_string_empty PASSED                     [ 
> 62%]
> tests/test_url.py::test_raw_path PASSED                                  [ 
> 63%]
> tests/test_url.py::test_raw_path_non_ascii PASSED                        [ 
> 63%]
> tests/test_url.py::test_path_non_ascii PASSED                            [ 
> 63%]
> tests/test_url.py::test_path_with_spaces PASSED                          [ 
> 63%]
> tests/test_url.py::test_raw_path_for_empty_url PASSED                    [ 
> 63%]
> tests/test_url.py::test_raw_path_for_colon_and_at PASSED                 [ 
> 63%]
> tests/test_url.py::test_raw_query_string PASSED                          [ 
> 63%]
> tests/test_url.py::test_raw_query_string_non_ascii PASSED                [ 
> 63%]
> tests/test_url.py::test_query_string_non_ascii PASSED                    [ 
> 63%]
> tests/test_url.py::test_path_qs PASSED                                   [ 
> 63%]
> tests/test_url.py::test_raw_path_qs PASSED                               [ 
> 63%]
> tests/test_url.py::test_query_string_spaces PASSED                       [ 
> 64%]
> tests/test_url.py::test_raw_fragment_empty PASSED                        [ 
> 64%]
> tests/test_url.py::test_raw_fragment PASSED                              [ 
> 64%]
> tests/test_url.py::test_raw_fragment_non_ascii PASSED                    [ 
> 64%]
> tests/test_url.py::test_raw_fragment_safe PASSED                         [ 
> 64%]
> tests/test_url.py::test_fragment_non_ascii PASSED                        [ 
> 64%]
> tests/test_url.py::test_raw_parts_empty PASSED                           [ 
> 64%]
> tests/test_url.py::test_raw_parts PASSED                                 [ 
> 64%]
> tests/test_url.py::test_raw_parts_without_path PASSED                    [ 
> 64%]
> tests/test_url.py::test_raw_path_parts_with_2F_in_path PASSED            [ 
> 64%]
> tests/test_url.py::test_raw_path_parts_with_2f_in_path PASSED            [ 
> 65%]
> tests/test_url.py::test_raw_parts_for_relative_path PASSED               [ 
> 65%]
> tests/test_url.py::test_raw_parts_for_relative_path_starting_from_slash 
> PASSED [ 65%]
> tests/test_url.py::test_raw_parts_for_relative_double_path PASSED        [ 
> 65%]
> tests/test_url.py::test_parts_for_empty_url PASSED                       [ 
> 65%]
> tests/test_url.py::test_raw_parts_non_ascii PASSED                       [ 
> 65%]
> tests/test_url.py::test_parts_non_ascii PASSED                           [ 
> 65%]
> tests/test_url.py::test_name_for_empty_url PASSED                        [ 
> 65%]
> tests/test_url.py::test_raw_name PASSED                                  [ 
> 65%]
> tests/test_url.py::test_raw_name_root PASSED                             [ 
> 65%]
> tests/test_url.py::test_raw_name_root2 PASSED                            [ 
> 65%]
> tests/test_url.py::test_raw_name_root3 PASSED                            [ 
> 66%]
> tests/test_url.py::test_relative_raw_name PASSED                         [ 
> 66%]
> tests/test_url.py::test_relative_raw_name_starting_from_slash PASSED     [ 
> 66%]
> tests/test_url.py::test_relative_raw_name_slash PASSED                   [ 
> 66%]
> tests/test_url.py::test_name_non_ascii PASSED                            [ 
> 66%]
> tests/test_url.py::test_suffix_for_empty_url PASSED                      [ 
> 66%]
> tests/test_url.py::test_raw_suffix PASSED                                [ 
> 66%]
> tests/test_url.py::test_raw_suffix_root PASSED                           [ 
> 66%]
> tests/test_url.py::test_raw_suffix_root2 PASSED                          [ 
> 66%]
> tests/test_url.py::test_raw_suffix_root3 PASSED                          [ 
> 66%]
> tests/test_url.py::test_relative_raw_suffix PASSED                       [ 
> 67%]
> tests/test_url.py::test_relative_raw_suffix_starting_from_slash PASSED   [ 
> 67%]
> tests/test_url.py::test_relative_raw_suffix_dot PASSED                   [ 
> 67%]
> tests/test_url.py::test_suffix_non_ascii PASSED                          [ 
> 67%]
> tests/test_url.py::test_suffix_with_empty_name PASSED                    [ 
> 67%]
> tests/test_url.py::test_suffix_multi_dot PASSED                          [ 
> 67%]
> tests/test_url.py::test_suffix_with_dot_name PASSED                      [ 
> 67%]
> tests/test_url.py::test_suffixes_for_empty_url PASSED                    [ 
> 67%]
> tests/test_url.py::test_raw_suffixes PASSED                              [ 
> 67%]
> tests/test_url.py::test_raw_suffixes_root PASSED                         [ 
> 67%]
> tests/test_url.py::test_raw_suffixes_root2 PASSED                        [ 
> 68%]
> tests/test_url.py::test_raw_suffixes_root3 PASSED                        [ 
> 68%]
> tests/test_url.py::test_relative_raw_suffixes PASSED                     [ 
> 68%]
> tests/test_url.py::test_relative_raw_suffixes_starting_from_slash PASSED [ 
> 68%]
> tests/test_url.py::test_relative_raw_suffixes_dot PASSED                 [ 
> 68%]
> tests/test_url.py::test_suffixes_non_ascii PASSED                        [ 
> 68%]
> tests/test_url.py::test_suffixes_with_empty_name PASSED                  [ 
> 68%]
> tests/test_url.py::test_suffixes_multi_dot PASSED                        [ 
> 68%]
> tests/test_url.py::test_suffixes_with_dot_name PASSED                    [ 
> 68%]
> tests/test_url.py::test_plus_in_path PASSED                              [ 
> 68%]
> tests/test_url.py::test_nonascii_in_qs PASSED                            [ 
> 68%]
> tests/test_url.py::test_percent_encoded_in_qs PASSED                     [ 
> 69%]
> tests/test_url.py::test_parent_raw_path PASSED                           [ 
> 69%]
> tests/test_url.py::test_parent_raw_parts PASSED                          [ 
> 69%]
> tests/test_url.py::test_double_parent_raw_path PASSED                    [ 
> 69%]
> tests/test_url.py::test_empty_parent_raw_path PASSED                     [ 
> 69%]
> tests/test_url.py::test_empty_parent_raw_path2 PASSED                    [ 
> 69%]
> tests/test_url.py::test_clear_fragment_on_getting_parent PASSED          [ 
> 69%]
> tests/test_url.py::test_clear_fragment_on_getting_parent_toplevel PASSED [ 
> 69%]
> tests/test_url.py::test_clear_query_on_getting_parent PASSED             [ 
> 69%]
> tests/test_url.py::test_clear_query_on_getting_parent_toplevel PASSED    [ 
> 69%]
> tests/test_url.py::test_div_root PASSED                                  [ 
> 70%]
> tests/test_url.py::test_div_root_with_slash PASSED                       [ 
> 70%]
> tests/test_url.py::test_div PASSED                                       [ 
> 70%]
> tests/test_url.py::test_div_with_slash PASSED                            [ 
> 70%]
> tests/test_url.py::test_div_path_starting_from_slash_is_forbidden PASSED [ 
> 70%]
> tests/test_url.py::test_div_cleanup_query_and_fragment PASSED            [ 
> 70%]
> tests/test_url.py::test_div_for_empty_url PASSED                         [ 
> 70%]
> tests/test_url.py::test_div_for_relative_url PASSED                      [ 
> 70%]
> tests/test_url.py::test_div_for_relative_url_started_with_slash PASSED   [ 
> 70%]
> tests/test_url.py::test_div_non_ascii PASSED                             [ 
> 70%]
> tests/test_url.py::test_div_percent_encoded PASSED                       [ 
> 70%]
> tests/test_url.py::test_div_with_colon_and_at PASSED                     [ 
> 71%]
> tests/test_url.py::test_div_with_dots PASSED                             [ 
> 71%]
> tests/test_url.py::test_with_path PASSED                                 [ 
> 71%]
> tests/test_url.py::test_with_path_nonascii PASSED                        [ 
> 71%]
> tests/test_url.py::test_with_path_percent_encoded PASSED                 [ 
> 71%]
> tests/test_url.py::test_with_path_encoded PASSED                         [ 
> 71%]
> tests/test_url.py::test_with_path_encoded_nonascii PASSED                [ 
> 71%]
> tests/test_url.py::test_with_path_encoded_percent_encoded PASSED         [ 
> 71%]
> tests/test_url.py::test_with_path_dots PASSED                            [ 
> 71%]
> tests/test_url.py::test_with_path_relative PASSED                        [ 
> 71%]
> tests/test_url.py::test_with_path_query PASSED                           [ 
> 72%]
> tests/test_url.py::test_with_path_fragment PASSED                        [ 
> 72%]
> tests/test_url.py::test_with_path_empty PASSED                           [ 
> 72%]
> tests/test_url.py::test_with_path_leading_slash PASSED                   [ 
> 72%]
> tests/test_url.py::test_with_fragment PASSED                             [ 
> 72%]
> tests/test_url.py::test_with_fragment_safe PASSED                        [ 
> 72%]
> tests/test_url.py::test_with_fragment_non_ascii PASSED                   [ 
> 72%]
> tests/test_url.py::test_with_fragment_percent_encoded PASSED             [ 
> 72%]
> tests/test_url.py::test_with_fragment_None PASSED                        [ 
> 72%]
> tests/test_url.py::test_with_fragment_None_matching PASSED               [ 
> 72%]
> tests/test_url.py::test_with_fragment_matching PASSED                    [ 
> 72%]
> tests/test_url.py::test_with_fragment_bad_type PASSED                    [ 
> 73%]
> tests/test_url.py::test_with_name PASSED                                 [ 
> 73%]
> tests/test_url.py::test_with_name_for_naked_path PASSED                  [ 
> 73%]
> tests/test_url.py::test_with_name_for_relative_path PASSED               [ 
> 73%]
> tests/test_url.py::test_with_name_for_relative_path2 PASSED              [ 
> 73%]
> tests/test_url.py::test_with_name_for_relative_path_starting_from_slash 
> PASSED [ 73%]
> tests/test_url.py::test_with_name_for_relative_path_starting_from_slash2 
> PASSED [ 73%]
> tests/test_url.py::test_with_name_empty PASSED                           [ 
> 73%]
> tests/test_url.py::test_with_name_non_ascii PASSED                       [ 
> 73%]
> tests/test_url.py::test_with_name_percent_encoded PASSED                 [ 
> 73%]
> tests/test_url.py::test_with_name_with_slash PASSED                      [ 
> 74%]
> tests/test_url.py::test_with_name_non_str PASSED                         [ 
> 74%]
> tests/test_url.py::test_with_name_within_colon_and_at PASSED             [ 
> 74%]
> tests/test_url.py::test_with_name_dot PASSED                             [ 
> 74%]
> tests/test_url.py::test_with_name_double_dot PASSED                      [ 
> 74%]
> tests/test_url.py::test_with_suffix PASSED                               [ 
> 74%]
> tests/test_url.py::test_with_suffix_for_naked_path PASSED                [ 
> 74%]
> tests/test_url.py::test_with_suffix_for_relative_path PASSED             [ 
> 74%]
> tests/test_url.py::test_with_suffix_for_relative_path2 PASSED            [ 
> 74%]
> tests/test_url.py::test_with_suffix_for_relative_path_starting_from_slash 
> PASSED [ 74%]
> tests/test_url.py::test_with_suffix_for_relative_path_starting_from_slash2 
> PASSED [ 74%]
> tests/test_url.py::test_with_suffix_empty PASSED                         [ 
> 75%]
> tests/test_url.py::test_with_suffix_non_ascii PASSED                     [ 
> 75%]
> tests/test_url.py::test_with_suffix_percent_encoded PASSED               [ 
> 75%]
> tests/test_url.py::test_with_suffix_without_dot PASSED                   [ 
> 75%]
> tests/test_url.py::test_with_suffix_non_str PASSED                       [ 
> 75%]
> tests/test_url.py::test_with_suffix_dot PASSED                           [ 
> 75%]
> tests/test_url.py::test_with_suffix_with_slash PASSED                    [ 
> 75%]
> tests/test_url.py::test_with_suffix_with_slash2 PASSED                   [ 
> 75%]
> tests/test_url.py::test_with_suffix_replace PASSED                       [ 
> 75%]
> tests/test_url.py::test_is_absolute_for_relative_url PASSED              [ 
> 75%]
> tests/test_url.py::test_is_absolute_for_absolute_url PASSED              [ 
> 76%]
> tests/test_url.py::test_is_non_absolute_for_empty_url PASSED             [ 
> 76%]
> tests/test_url.py::test_is_non_absolute_for_empty_url2 PASSED            [ 
> 76%]
> tests/test_url.py::test_is_absolute_path_starting_from_double_slash PASSED [ 
> 76%]
> tests/test_url.py::test_is_default_port_for_relative_url PASSED          [ 
> 76%]
> tests/test_url.py::test_is_default_port_for_absolute_url_without_port PASSED 
> [ 76%]
> tests/test_url.py::test_is_default_port_for_absolute_url_with_default_port 
> PASSED [ 76%]
> tests/test_url.py::test_is_default_port_for_absolute_url_with_nondefault_port 
> PASSED [ 76%]
> tests/test_url.py::test_is_default_port_for_unknown_scheme PASSED        [ 
> 76%]
> tests/test_url.py::test_no_scheme PASSED                                 [ 
> 76%]
> tests/test_url.py::test_no_scheme2 PASSED                                [ 
> 76%]
> tests/test_url.py::test_from_non_allowed PASSED                          [ 
> 77%]
> tests/test_url.py::test_from_idna PASSED                                 [ 
> 77%]
> tests/test_url.py::test_to_idna PASSED                                   [ 
> 77%]
> tests/test_url.py::test_from_ascii_login PASSED                          [ 
> 77%]
> tests/test_url.py::test_from_non_ascii_login PASSED                      [ 
> 77%]
> tests/test_url.py::test_from_ascii_login_and_password PASSED             [ 
> 77%]
> tests/test_url.py::test_from_non_ascii_login_and_password PASSED         [ 
> 77%]
> tests/test_url.py::test_from_ascii_path PASSED                           [ 
> 77%]
> tests/test_url.py::test_from_ascii_path_lower_case PASSED                [ 
> 77%]
> tests/test_url.py::test_from_non_ascii_path PASSED                       [ 
> 77%]
> tests/test_url.py::test_bytes PASSED                                     [ 
> 78%]
> tests/test_url.py::test_from_ascii_query_parts PASSED                    [ 
> 78%]
> tests/test_url.py::test_from_non_ascii_query_parts PASSED                [ 
> 78%]
> tests/test_url.py::test_from_non_ascii_query_parts2 PASSED               [ 
> 78%]
> tests/test_url.py::test_from_ascii_fragment PASSED                       [ 
> 78%]
> tests/test_url.py::test_from_bytes_with_non_ascii_fragment PASSED        [ 
> 78%]
> tests/test_url.py::test_to_str PASSED                                    [ 
> 78%]
> tests/test_url.py::test_to_str_long PASSED                               [ 
> 78%]
> tests/test_url.py::test_decoding_with_2F_in_path PASSED                  [ 
> 78%]
> tests/test_url.py::test_decoding_with_26_and_3D_in_query PASSED          [ 
> 78%]
> tests/test_url.py::test_fragment_only_url PASSED                         [ 
> 78%]
> tests/test_url.py::test_url_from_url PASSED                              [ 
> 79%]
> tests/test_url.py::test_lowercase_scheme PASSED                          [ 
> 79%]
> tests/test_url.py::test_str_for_empty_url PASSED                         [ 
> 79%]
> tests/test_url.py::test_parent_for_empty_url PASSED                      [ 
> 79%]
> tests/test_url.py::test_empty_value_for_query PASSED                     [ 
> 79%]
> tests/test_url.py::test_none_value_for_query PASSED                      [ 
> 79%]
> tests/test_url.py::test_decode_pct_in_path PASSED                        [ 
> 79%]
> tests/test_url.py::test_decode_pct_in_path_lower_case PASSED             [ 
> 79%]
> tests/test_url.py::test_join PASSED                                      [ 
> 79%]
> tests/test_url.py::test_join_absolute PASSED                             [ 
> 79%]
> tests/test_url.py::test_join_non_url PASSED                              [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g:h-g:h] PASSED        [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g-http:/a/b/c/g] PASSED [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[./g-http:/a/b/c/g] PASSED [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g/-http:/a/b/c/g/] PASSED [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[/g-http:/a/g] PASSED   [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[/g-http:/g] PASSED     [ 
> 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[?y-http:/a/b/c/d;p?y] 
> PASSED [ 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g?y-http:/a/b/c/g?y] PASSED 
> [ 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[#s-http:/a/b/c/d;p?q#s] 
> PASSED [ 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g#s-http:/a/b/c/g#s] PASSED 
> [ 80%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g?y#s-http:/a/b/c/g?y#s] 
> PASSED [ 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[;x-http:/a/b/c/;x] PASSED [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g;x-http:/a/b/c/g;x] PASSED 
> [ 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[g;x?y#s-http:/a/b/c/g;x?y#s]
>  PASSED [ 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[-http:/a/b/c/d;p?q] PASSED 
> [ 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[.-http:/a/b/c/] PASSED [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[./-http:/a/b/c/] PASSED [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[..-http:/a/b/] PASSED  [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[../-http:/a/b/] PASSED [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[../g-http:/a/b/g] PASSED [ 
> 81%]
> tests/test_url.py::test_join_from_rfc_3986_normal[../..-http:/a/] PASSED [ 
> 82%]
> tests/test_url.py::test_join_from_rfc_3986_normal[../../-http:/a/] PASSED [ 
> 82%]
> tests/test_url.py::test_join_from_rfc_3986_normal[../../g-http:/a/g] PASSED [ 
> 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[../../../g-http:/a/g] 
> PASSED [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[../../../../g-http:/a/g] 
> PASSED [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[/g-http:/a/g] PASSED [ 
> 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[/../g-http:/a/g] PASSED [ 
> 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g.-http:/a/b/c/g.] PASSED 
> [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[.g-http:/a/b/c/.g] PASSED 
> [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g..-http:/a/b/c/g..] 
> PASSED [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[..g-http:/a/b/c/..g] 
> PASSED [ 82%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[./../g-http:/a/b/g] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[./g/.-http:/a/b/c/g/] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g/h-http:/a/b/c/g/h] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g/../h-http:/a/b/c/h] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g;x=1/y-http:/a/b/c/g;x=1/y]
>  PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g;x=1/../y-http:/a/b/c/y] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g?y/x-http:/a/b/c/g?y/x] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g?y/../x-http:/a/b/c/g?y/../x]
>  PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g#s/x-http:/a/b/c/g#s/x] 
> PASSED [ 83%]
> tests/test_url.py::test_join_from_rfc_3986_abnormal[g#s/../x-http:/a/b/c/g#s/../x]
>  PASSED [ 83%]
> tests/test_url.py::test_split_result_non_decoded PASSED                  [ 
> 84%]
> tests/test_url.py::test_human_repr PASSED                                [ 
> 84%]
> tests/test_url.py::test_human_repr_defaults PASSED                       [ 
> 84%]
> tests/test_url.py::test_human_repr_default_port PASSED                   [ 
> 84%]
> tests/test_url.py::test_human_repr_ipv6 PASSED                           [ 
> 84%]
> tests/test_url.py::test_human_repr_delimiters FAILED                     [ 
> 84%]
> tests/test_url.py::test_human_repr_non_printable PASSED                  [ 
> 84%]
> tests/test_url.py::test_relative PASSED                                  [ 
> 84%]
> tests/test_url.py::test_relative_is_relative PASSED                      [ 
> 84%]
> tests/test_url.py::test_relative_abs_parts_are_removed PASSED            [ 
> 84%]
> tests/test_url.py::test_relative_fails_on_rel_url PASSED                 [ 
> 85%]
> tests/test_url.py::test_slash_and_question_in_query PASSED               [ 
> 85%]
> tests/test_url.py::test_slash_and_question_in_fragment PASSED            [ 
> 85%]
> tests/test_url.py::test_requoting PASSED                                 [ 
> 85%]
> tests/test_url_build.py::test_build_without_arguments PASSED             [ 
> 85%]
> tests/test_url_build.py::test_build_simple PASSED                        [ 
> 85%]
> tests/test_url_build.py::test_build_with_scheme PASSED                   [ 
> 85%]
> tests/test_url_build.py::test_build_with_host PASSED                     [ 
> 85%]
> tests/test_url_build.py::test_build_with_scheme_and_host PASSED          [ 
> 85%]
> tests/test_url_build.py::test_build_with_port PASSED                     [ 
> 85%]
> tests/test_url_build.py::test_build_with_user PASSED                     [ 
> 85%]
> tests/test_url_build.py::test_build_with_user_password PASSED            [ 
> 86%]
> tests/test_url_build.py::test_build_with_query_and_query_string PASSED   [ 
> 86%]
> tests/test_url_build.py::test_build_with_all PASSED                      [ 
> 86%]
> tests/test_url_build.py::test_build_with_authority_and_host PASSED       [ 
> 86%]
> tests/test_url_build.py::test_build_with_authority PASSED                [ 
> 86%]
> tests/test_url_build.py::test_build_with_authority_without_encoding PASSED [ 
> 86%]
> tests/test_url_build.py::test_query_str PASSED                           [ 
> 86%]
> tests/test_url_build.py::test_query_dict PASSED                          [ 
> 86%]
> tests/test_url_build.py::test_build_path_quoting PASSED                  [ 
> 86%]
> tests/test_url_build.py::test_build_query_quoting PASSED                 [ 
> 86%]
> tests/test_url_build.py::test_build_query_only PASSED                    [ 
> 87%]
> tests/test_url_build.py::test_build_drop_dots PASSED                     [ 
> 87%]
> tests/test_url_build.py::test_build_encode PASSED                        [ 
> 87%]
> tests/test_url_build.py::test_build_already_encoded PASSED               [ 
> 87%]
> tests/test_url_build.py::test_build_percent_encoded PASSED               [ 
> 87%]
> tests/test_url_build.py::test_build_with_authority_percent_encoded PASSED [ 
> 87%]
> tests/test_url_build.py::test_build_with_authority_percent_encoded_already_encoded
>  PASSED [ 87%]
> tests/test_url_build.py::test_build_with_authority_with_path_with_leading_slash
>  PASSED [ 87%]
> tests/test_url_build.py::test_build_with_authority_with_empty_path PASSED [ 
> 87%]
> tests/test_url_build.py::test_build_with_authority_with_path_without_leading_slash
>  PASSED [ 87%]
> tests/test_url_build.py::test_build_with_none_path PASSED                [ 
> 87%]
> tests/test_url_build.py::test_build_with_none_query_string PASSED        [ 
> 88%]
> tests/test_url_build.py::test_build_with_none_fragment PASSED            [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_ne_str PASSED                       [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_eq PASSED                           [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_hash PASSED                         [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_hash_double_call PASSED             [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_le_less PASSED                      [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_le_eq PASSED                        [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_le_not_implemented PASSED           [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_lt PASSED                           [ 
> 88%]
> tests/test_url_cmp_and_hash.py::test_lt_not_implemented PASSED           [ 
> 89%]
> tests/test_url_cmp_and_hash.py::test_ge_more PASSED                      [ 
> 89%]
> tests/test_url_cmp_and_hash.py::test_ge_eq PASSED                        [ 
> 89%]
> tests/test_url_cmp_and_hash.py::test_ge_not_implemented PASSED           [ 
> 89%]
> tests/test_url_cmp_and_hash.py::test_gt PASSED                           [ 
> 89%]
> tests/test_url_cmp_and_hash.py::test_gt_not_implemented PASSED           [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_scheme_path PASSED           [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_scheme_path_other PASSED     [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_complex_scheme PASSED        [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_scheme_only PASSED           [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_no_scheme1 PASSED            [ 
> 89%]
> tests/test_url_parsing.py::TestScheme::test_no_scheme2 PASSED            [ 
> 90%]
> tests/test_url_parsing.py::TestScheme::test_not_a_scheme1 PASSED         [ 
> 90%]
> tests/test_url_parsing.py::TestScheme::test_not_a_scheme2 PASSED         [ 
> 90%]
> tests/test_url_parsing.py::TestScheme::test_scheme_rel_path1 PASSED      [ 
> 90%]
> tests/test_url_parsing.py::TestScheme::test_scheme_rel_path2 PASSED      [ 
> 90%]
> tests/test_url_parsing.py::TestScheme::test_scheme_weird PASSED          [ 
> 90%]
> tests/test_url_parsing.py::TestHost::test_canonical PASSED               [ 
> 90%]
> tests/test_url_parsing.py::TestHost::test_absolute_no_scheme PASSED      [ 
> 90%]
> tests/test_url_parsing.py::TestHost::test_absolute_no_scheme_complex_host 
> PASSED [ 90%]
> tests/test_url_parsing.py::TestHost::test_absolute_no_scheme_simple_host 
> PASSED [ 90%]
> tests/test_url_parsing.py::TestHost::test_weird_host PASSED              [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_scheme_no_host PASSED          [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_scheme_no_host2 PASSED         [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_no_scheme_no_host PASSED       [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_ipv4 PASSED                    [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_masked_ipv4 FAILED             [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_ipv6 PASSED                    [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_strange_ip FAILED              [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_strange_ip_2 PASSED            [ 
> 91%]
> tests/test_url_parsing.py::TestHost::test_strange_ip_3 PASSED            [ 
> 91%]
> tests/test_url_parsing.py::TestPort::test_canonical PASSED               [ 
> 91%]
> tests/test_url_parsing.py::TestPort::test_no_path PASSED                 [ 
> 92%]
> tests/test_url_parsing.py::TestPort::test_no_host PASSED                 [ 
> 92%]
> tests/test_url_parsing.py::TestPort::test_double_port PASSED             [ 
> 92%]
> tests/test_url_parsing.py::TestPort::test_bad_port PASSED                [ 
> 92%]
> tests/test_url_parsing.py::TestPort::test_another_bad_port PASSED        [ 
> 92%]
> tests/test_url_parsing.py::TestPort::test_bad_port_again PASSED          [ 
> 92%]
> tests/test_url_parsing.py::TestUserInfo::test_canonical PASSED           [ 
> 92%]
> tests/test_url_parsing.py::TestUserInfo::test_user_pass PASSED           [ 
> 92%]
> tests/test_url_parsing.py::TestUserInfo::test_complex_userinfo PASSED    [ 
> 92%]
> tests/test_url_parsing.py::TestUserInfo::test_no_user PASSED             [ 
> 92%]
> tests/test_url_parsing.py::TestUserInfo::test_weird_user PASSED          [ 
> 93%]
> tests/test_url_parsing.py::TestUserInfo::test_weird_user2 PASSED         [ 
> 93%]
> tests/test_url_parsing.py::TestUserInfo::test_weird_user3 FAILED         [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_simple PASSED          [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_scheme_query PASSED    [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_abs_url_query PASSED   [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_abs_url_path_query PASSED [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_double_question_mark PASSED 
> [ 93%]
> tests/test_url_parsing.py::TestQuery_String::test_complex_query PASSED   [ 
> 93%]
> tests/test_url_parsing.py::TestQuery_String::test_query_in_fragment PASSED [ 
> 93%]
> tests/test_url_parsing.py::TestFragment::test_simple PASSED              [ 
> 93%]
> tests/test_url_parsing.py::TestFragment::test_scheme_frag PASSED         [ 
> 94%]
> tests/test_url_parsing.py::TestFragment::test_host_frag PASSED           [ 
> 94%]
> tests/test_url_parsing.py::TestFragment::test_scheme_path_frag PASSED    [ 
> 94%]
> tests/test_url_parsing.py::TestFragment::test_scheme_query_frag PASSED   [ 
> 94%]
> tests/test_url_parsing.py::TestFragment::test_host_frag_query PASSED     [ 
> 94%]
> tests/test_url_parsing.py::TestFragment::test_complex_frag PASSED        [ 
> 94%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_all_empty PASSED    [ 
> 94%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_path_only PASSED    [ 
> 94%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_user PASSED   [ 
> 94%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_port PASSED   [ 
> 94%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_port_and_path 
> PASSED [ 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_path_only PASSED [ 
> 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_relative_path_only 
> PASSED [ 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_path PASSED         [ 
> 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query_with_path 
> PASSED [ 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query PASSED  [ 
> 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_query_with_frag 
> PASSED [ 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_path_empty_frag PASSED [ 
> 95%]
> tests/test_url_parsing.py::TestStripEmptyParts::test_empty_path PASSED   [ 
> 95%]
> tests/test_url_query.py::test_query_spaces PASSED                        [ 
> 95%]
> tests/test_url_query.py::test_query_empty PASSED                         [ 
> 95%]
> tests/test_url_query.py::test_query PASSED                               [ 
> 96%]
> tests/test_url_query.py::test_query_repeated_args PASSED                 [ 
> 96%]
> tests/test_url_query.py::test_query_empty_arg PASSED                     [ 
> 96%]
> tests/test_url_query.py::test_query_dont_unqoute_twice PASSED            [ 
> 96%]
> tests/test_url_query.py::test_query_nonascii PASSED                      [ 
> 96%]
> tests/test_url_query.py::test_ampersand_as_separator PASSED              [ 
> 96%]
> tests/test_url_query.py::test_ampersand_as_value PASSED                  [ 
> 96%]
> tests/test_url_update_netloc.py::test_with_scheme PASSED                 [ 
> 96%]
> tests/test_url_update_netloc.py::test_with_scheme_uppercased PASSED      [ 
> 96%]
> tests/test_url_update_netloc.py::test_with_scheme_for_relative_url PASSED [ 
> 96%]
> tests/test_url_update_netloc.py::test_with_scheme_invalid_type PASSED    [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user PASSED                   [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_non_ascii PASSED         [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_percent_encoded PASSED   [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_for_relative_url PASSED  [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_invalid_type PASSED      [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_None PASSED              [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_ipv6 PASSED              [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_user_None_when_password_present 
> PASSED [ 97%]
> tests/test_url_update_netloc.py::test_with_password PASSED               [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_password_ipv6 PASSED          [ 
> 97%]
> tests/test_url_update_netloc.py::test_with_password_non_ascii PASSED     [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_password_percent_encoded PASSED [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_password_non_ascii_with_colon 
> PASSED [ 98%]
> tests/test_url_update_netloc.py::test_with_password_for_relative_url PASSED [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_password_None PASSED          [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_password_invalid_type PASSED  [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_password_and_empty_user PASSED [ 
> 98%]
> tests/test_url_update_netloc.py::test_from_str_with_host_ipv4 PASSED     [ 
> 98%]
> tests/test_url_update_netloc.py::test_from_str_with_host_ipv6 PASSED     [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_host PASSED                   [ 
> 98%]
> tests/test_url_update_netloc.py::test_with_host_empty PASSED             [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_host_non_ascii PASSED         [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_host_percent_encoded PASSED   [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_host_for_relative_url PASSED  [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_host_invalid_type PASSED      [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_port PASSED                   [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_port_ipv6 PASSED              [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_port_keeps_query_and_fragment 
> PASSED [ 99%]
> tests/test_url_update_netloc.py::test_with_port_percent_encoded PASSED   [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_port_for_relative_url PASSED  [ 
> 99%]
> tests/test_url_update_netloc.py::test_with_port_invalid_type PASSED      
> [100%]
> 
> =================================== FAILURES 
> ===================================
> ________________________________ test_ipv6_zone 
> ________________________________
> 
>     def test_ipv6_zone():
> >       url = URL("http://[fe80::822a:a8ff:fe49:470c%тест%42]:123";)
> 
> tests/test_url.py:239: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> yarl/_url.py:147: in __new__
>     val = urlsplit(val)
> /usr/lib/python3.11/urllib/parse.py:500: in urlsplit
>     _check_bracketed_host(bracketed_host)
> /usr/lib/python3.11/urllib/parse.py:446: in _check_bracketed_host
>     ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or 
> IPv4
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = 'fe80::822a:a8ff:fe49:470c%тест%42'
> 
>     def ip_address(address):
>         """Take an IP string/int and return an object of the correct type.
>     
>         Args:
>             address: A string or integer, the IP address.  Either IPv4 or
>               IPv6 addresses may be supplied; integers less than 2**32 will
>               be considered to be IPv4 by default.
>     
>         Returns:
>             An IPv4Address or IPv6Address object.
>     
>         Raises:
>             ValueError: if the *address* passed isn't either a v4 or a v6
>               address
>     
>         """
>         try:
>             return IPv4Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
>         try:
>             return IPv6Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
> >       raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 
> > address')
> E       ValueError: 'fe80::822a:a8ff:fe49:470c%тест%42' does not appear to be 
> an IPv4 or IPv6 address
> 
> /usr/lib/python3.11/ipaddress.py:54: ValueError
> __________________________ test_human_repr_delimiters 
> __________________________
> 
>     def test_human_repr_delimiters():
>         url = URL.build(
>             scheme="http",
>             user=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
>             password=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
>             host="хост.домен",
>             port=8080,
>             path="/ !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
>             query={
>                 " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~": " 
> !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"
>             },
>             fragment=" !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~",
>         )
>         s = url.human_repr()
> >       assert URL(s) == url
> 
> tests/test_url.py:1515: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> yarl/_url.py:147: in __new__
>     val = urlsplit(val)
> /usr/lib/python3.11/urllib/parse.py:500: in urlsplit
>     _check_bracketed_host(bracketed_host)
> /usr/lib/python3.11/urllib/parse.py:446: in _check_bracketed_host
>     ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or 
> IPv4
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = '\\'
> 
>     def ip_address(address):
>         """Take an IP string/int and return an object of the correct type.
>     
>         Args:
>             address: A string or integer, the IP address.  Either IPv4 or
>               IPv6 addresses may be supplied; integers less than 2**32 will
>               be considered to be IPv4 by default.
>     
>         Returns:
>             An IPv4Address or IPv6Address object.
>     
>         Raises:
>             ValueError: if the *address* passed isn't either a v4 or a v6
>               address
>     
>         """
>         try:
>             return IPv4Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
>         try:
>             return IPv6Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
> >       raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 
> > address')
> E       ValueError: '\\' does not appear to be an IPv4 or IPv6 address
> 
> /usr/lib/python3.11/ipaddress.py:54: ValueError
> __________________________ TestHost.test_masked_ipv4 
> ___________________________
> 
> self = <test_url_parsing.TestHost object at 0x7f3007ff45d0>
> 
>     def test_masked_ipv4(self):
> >       u = URL("//[127.0.0.1]/")
> 
> tests/test_url_parsing.py:182: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> yarl/_url.py:147: in __new__
>     val = urlsplit(val)
> /usr/lib/python3.11/urllib/parse.py:500: in urlsplit
>     _check_bracketed_host(bracketed_host)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> hostname = '127.0.0.1'
> 
>     def _check_bracketed_host(hostname):
>         if hostname.startswith('v'):
>             if not re.match(r"\Av[a-fA-F0-9]+\..+\Z", hostname):
>                 raise ValueError(f"IPvFuture address is invalid")
>         else:
>             ip = ipaddress.ip_address(hostname) # Throws Value Error if not 
> IPv6 or IPv4
>             if isinstance(ip, ipaddress.IPv4Address):
> >               raise ValueError(f"An IPv4 address cannot be in brackets")
> E               ValueError: An IPv4 address cannot be in brackets
> 
> /usr/lib/python3.11/urllib/parse.py:448: ValueError
> ___________________________ TestHost.test_strange_ip 
> ___________________________
> 
> self = <test_url_parsing.TestHost object at 0x7f3007ff7310>
> 
>     def test_strange_ip(self):
> >       u = URL("//[-1]/")
> 
> tests/test_url_parsing.py:198: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> yarl/_url.py:147: in __new__
>     val = urlsplit(val)
> /usr/lib/python3.11/urllib/parse.py:500: in urlsplit
>     _check_bracketed_host(bracketed_host)
> /usr/lib/python3.11/urllib/parse.py:446: in _check_bracketed_host
>     ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or 
> IPv4
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = '-1'
> 
>     def ip_address(address):
>         """Take an IP string/int and return an object of the correct type.
>     
>         Args:
>             address: A string or integer, the IP address.  Either IPv4 or
>               IPv6 addresses may be supplied; integers less than 2**32 will
>               be considered to be IPv4 by default.
>     
>         Returns:
>             An IPv4Address or IPv6Address object.
>     
>         Raises:
>             ValueError: if the *address* passed isn't either a v4 or a v6
>               address
>     
>         """
>         try:
>             return IPv4Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
>         try:
>             return IPv6Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
> >       raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 
> > address')
> E       ValueError: '-1' does not appear to be an IPv4 or IPv6 address
> 
> /usr/lib/python3.11/ipaddress.py:54: ValueError
> ________________________ TestUserInfo.test_weird_user3 
> _________________________
> 
> self = <test_url_parsing.TestUserInfo object at 0x7f30078be710>
> 
>     def test_weird_user3(self):
> >       u = URL("//[some]@host")
> 
> tests/test_url_parsing.py:323: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> yarl/_url.py:147: in __new__
>     val = urlsplit(val)
> /usr/lib/python3.11/urllib/parse.py:500: in urlsplit
>     _check_bracketed_host(bracketed_host)
> /usr/lib/python3.11/urllib/parse.py:446: in _check_bracketed_host
>     ip = ipaddress.ip_address(hostname) # Throws Value Error if not IPv6 or 
> IPv4
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> address = 'some'
> 
>     def ip_address(address):
>         """Take an IP string/int and return an object of the correct type.
>     
>         Args:
>             address: A string or integer, the IP address.  Either IPv4 or
>               IPv6 addresses may be supplied; integers less than 2**32 will
>               be considered to be IPv4 by default.
>     
>         Returns:
>             An IPv4Address or IPv6Address object.
>     
>         Raises:
>             ValueError: if the *address* passed isn't either a v4 or a v6
>               address
>     
>         """
>         try:
>             return IPv4Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
>         try:
>             return IPv6Address(address)
>         except (AddressValueError, NetmaskValueError):
>             pass
>     
> >       raise ValueError(f'{address!r} does not appear to be an IPv4 or IPv6 
> > address')
> E       ValueError: 'some' does not appear to be an IPv4 or IPv6 address
> 
> /usr/lib/python3.11/ipaddress.py:54: ValueError
> 
> ---------- coverage: platform linux, python 3.11.4-final-0 -----------
> Name                  Stmts   Miss  Cover
> -----------------------------------------
> yarl/__init__.py          3      0   100%
> yarl/_quoting.py         10      2    80%
> yarl/_quoting_py.py     155      0   100%
> yarl/_url.py            582      2    99%
> -----------------------------------------
> TOTAL                   750      4    99%
> 
> =========================== short test summary info 
> ============================
> FAILED tests/test_url.py::test_ipv6_zone - ValueError: 
> 'fe80::822a:a8ff:fe49:...
> FAILED tests/test_url.py::test_human_repr_delimiters - ValueError: '\\' does 
> ...
> FAILED tests/test_url_parsing.py::TestHost::test_masked_ipv4 - ValueError: 
> An...
> FAILED tests/test_url_parsing.py::TestHost::test_strange_ip - ValueError: 
> '-1...
> FAILED tests/test_url_parsing.py::TestUserInfo::test_weird_user3 - 
> ValueError...
> ================== 5 failed, 1040 passed, 2 xfailed in 5.51s 
> ===================
> E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd 
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_yarl/build; python3.11 -m pytest tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 
> returned exit code 13


The full build log is available from:
http://qa-logs.debian.net/2023/07/26/yarl_1.8.2-1_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20230726;[email protected]
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20230726&[email protected]&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

--- End Message ---
--- Begin Message ---
Source: yarl
Source-Version: 1.8.2-2
Done: Michael R. Crusoe <[email protected]>

We believe that the bug you reported is fixed in the latest version of
yarl, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Michael R. Crusoe <[email protected]> (supplier of updated yarl package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Format: 1.8
Date: Tue, 26 Sep 2023 14:35:07 +0200
Source: yarl
Architecture: source
Version: 1.8.2-2
Distribution: unstable
Urgency: medium
Maintainer: Piotr Ożarowski <[email protected]>
Changed-By: Michael R. Crusoe <[email protected]>
Closes: 1042342
Changes:
 yarl (1.8.2-2) unstable; urgency=medium
 .
   * Team upload.
   * d/patches/square_bracket_handling.patch: cherry-picked from upstream.
     Fixes FTBFS. Closes: #1042342
Checksums-Sha1:
 8f5374076279c8faa5cce8be79f26440c4494026 2183 yarl_1.8.2-2.dsc
 6c2b0894e9e62e334d641cdd784adf423660f513 6536 yarl_1.8.2-2.debian.tar.xz
 0a3e774a301effeee3a825dd3094e81d9347d528 10076 yarl_1.8.2-2_source.buildinfo
Checksums-Sha256:
 925193bfa1ead8c2a8cf4eeb2a2b340415e59e12b6e669ce5c215d7b46a0a2b1 2183 
yarl_1.8.2-2.dsc
 0ed060bf2213e1c67ed08b2cc4ccc11b5129c15905057e5191a2edd45f2dc653 6536 
yarl_1.8.2-2.debian.tar.xz
 afde09b6f194ce367b845deb42c50021203ddc4e6e0a292fc502181a72bf0317 10076 
yarl_1.8.2-2_source.buildinfo
Files:
 e13df7c4bdf6fc9e90a6e215790fb148 2183 python optional yarl_1.8.2-2.dsc
 6cb6bbb017bec8626f3f1c8f0a6d43aa 6536 python optional 
yarl_1.8.2-2.debian.tar.xz
 b51378f7ec7344e46a7ac495bfb1f374 10076 python optional 
yarl_1.8.2-2_source.buildinfo

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEck1gkzcRPHEFUNdHPCZ2P2xn5uIFAmUS0BIACgkQPCZ2P2xn
5uK5sA/9FcybNLkqUDj1kr8+cKLl/zfGlgOBp7ek2evrJ20PXANVUZKdmvOZsALH
5VUmohEuX1vvSgHCN1lCliQdxO6xraEvh8OIJuJZqN8qoz/6b3O+4R8WNM5a52q9
m9oR/gw5bBt+y+Ku0q1vCKR7AWU4Bvu8KFePfum3a3CMpabfmDmZFcLx2nXOt8y3
Z3pwDrRLjaxnCYNAu+dS2h6ykemzw0WMXzQWw0LF0GfEHxjeiOA/Rk5JOdejzyli
Z0NgEXl9IaF1dvQm1Gkln34bm0b1eQKfvvi1Wfv5I057yUiRd3Pi8nJfzTbuWP/t
7bEhuwg/xNbUxvkCkUVMx6BvpjRiEW3by5ippDRnBaZYrUlfTL99iHfqT8wtzduo
9JjLXjt+CWcmv7kSIbE6e3lZhfJJ2h5MSSyF07+2GZ+E2BDLSxGJQksZf3zYKAFS
FToyN7j6FAfEwvZN+aGrNDHB59o+Gj5Rfw3VdJdJrQ+ALUkP73prHShHEOC08GqW
cJpmjssJbYv1XXwIyNhXkJPwzLM3Mg4Ad1+6auBwLa5l7qmN0Wyg7fbtuehGaHg3
Qc4AJXCaxMXwAU1OIzcqLfdW7woKQd9HPbz/xQbMPFke4bSIH4I+TDOKma/sZ8xc
08a8AAgzQ/Vpa8EWjWDx5Zjv2AbqRdU9MVedqtjA8fSGXvuwW5o=
=nx95
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to