--- Begin Message ---
Source: python-cattrs
Version: 1.10.0-1
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20221023 ftbfs-bookworm
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>>/.pybuild/cpython3_3.10_cattr/build
> http_proxy='http://127.0.0.1:9/' https_proxy='https://127.0.0.1:9/' \
> sphinx-build -N -E -T -b html . /<<PKGBUILDDIR>>/.pybuild/docs/html/
> Running Sphinx v4.5.0
> making output directory... done
> WARNING: html_static_path entry '_static' does not exist
> building [mo]: targets for 0 po files that are out of date
> building [html]: targets for 16 source files that are out of date
> updating environment: [new config] 16 added, 0 changed, 0 removed
> reading sources... [ 6%] benchmarking
> reading sources... [ 12%] cattr
> reading sources... [ 18%] cattr.preconf
> reading sources... [ 25%] contributing
> reading sources... [ 31%] converters
> reading sources... [ 37%] customizing
> reading sources... [ 43%] history
> reading sources... [ 50%] index
> reading sources... [ 56%] installation
> reading sources... [ 62%] modules
> reading sources... [ 68%] preconf
> reading sources... [ 75%] readme
> reading sources... [ 81%] structuring
> reading sources... [ 87%] unions
> reading sources... [ 93%] unstructuring
> reading sources... [100%] usage
>
> /<<PKGBUILDDIR>>/docs/cattr.preconf.rst:5: WARNING: duplicate label
> submodules, other instance in /<<PKGBUILDDIR>>/docs/cattr.rst
> /<<PKGBUILDDIR>>/docs/cattr.preconf.rst:64: WARNING: duplicate label module
> contents, other instance in /<<PKGBUILDDIR>>/docs/cattr.rst
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:94: WARNING: duplicate label
> ``typing.annotated``, other instance in /<<PKGBUILDDIR>>/docs/structuring.rst
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:100: WARNING: duplicate label
> ``attrs`` classes and dataclasses, other instance in
> /<<PKGBUILDDIR>>/docs/structuring.rst
> looking for now-outdated files... none found
> pickling environment... done
> checking consistency... /<<PKGBUILDDIR>>/docs/modules.rst: WARNING: document
> isn't included in any toctree
> done
> preparing documents... done
> writing output... [ 6%] benchmarking
> writing output... [ 12%] cattr
> writing output... [ 18%] cattr.preconf
> writing output... [ 25%] contributing
> writing output... [ 31%] converters
> writing output... [ 37%] customizing
> writing output... [ 43%] history
> writing output... [ 50%] index
> writing output... [ 56%] installation
> writing output... [ 62%] modules
> writing output... [ 68%] preconf
> writing output... [ 75%] readme
> writing output... [ 81%] structuring
> writing output... [ 87%] unions
> writing output... [ 93%] unstructuring
> writing output... [100%] usage
>
> /<<PKGBUILDDIR>>/src/cattr/gen.py:docstring of
> cattr.gen.make_dict_structure_fn:: WARNING: more than one target found for
> cross-reference 'Converter': cattr.converters.Converter, cattr.Converter
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:14: WARNING: more than one target
> found for cross-reference 'Converter.unstructure':
> cattr.converters.Converter.unstructure, cattr.Converter.unstructure
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:102: WARNING: more than one target
> found for cross-reference 'Converter': cattr.converters.Converter,
> cattr.Converter
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:125: WARNING: more than one target
> found for cross-reference 'Converter.unstructure_attrs_asdict':
> cattr.converters.Converter.unstructure_attrs_asdict,
> cattr.Converter.unstructure_attrs_asdict
> /<<PKGBUILDDIR>>/docs/unstructuring.rst:125: WARNING: more than one target
> found for cross-reference 'Converter.unstructure_attrs_astuple':
> cattr.converters.Converter.unstructure_attrs_astuple,
> cattr.Converter.unstructure_attrs_astuple
> /<<PKGBUILDDIR>>/docs/usage.rst:29: WARNING: more than one target found for
> cross-reference 'Converter': cattr.converters.Converter, cattr.Converter
> generating indices... genindex py-modindex done
> highlighting module code... [ 7%] cattr.converters
> highlighting module code... [ 15%] cattr.disambiguators
> highlighting module code... [ 23%] cattr.dispatch
> highlighting module code... [ 30%] cattr.errors
> highlighting module code... [ 38%] cattr.gen
> highlighting module code... [ 46%] cattr.preconf
> highlighting module code... [ 53%] cattr.preconf.bson
> highlighting module code... [ 61%] cattr.preconf.json
> highlighting module code... [ 69%] cattr.preconf.msgpack
> highlighting module code... [ 76%] cattr.preconf.orjson
> highlighting module code... [ 84%] cattr.preconf.pyyaml
> highlighting module code... [ 92%] cattr.preconf.tomlkit
> highlighting module code... [100%] cattr.preconf.ujson
>
> 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, 12 warnings.
>
> The HTML pages are in ../.pybuild/docs/html.
> rm -rf /<<PKGBUILDDIR>>/.pybuild/docs/html/.doctrees
> make[1]: Leaving directory '/<<PKGBUILDDIR>>'
> dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:240: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_cattr/build;
> python3.10 -m pytest -v --ignore tests/test_unstructure_collections.py -k
> 'not test_orjson'
> ============================= test session starts
> ==============================
> platform linux -- Python 3.10.7, pytest-7.1.2, pluggy-1.0.0+repack --
> /usr/bin/python3.10
> cachedir: .pytest_cache
> hypothesis profile 'tests' -> deadline=None,
> suppress_health_check=[HealthCheck.too_slow],
> database=DirectoryBasedExampleDatabase('/<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_cattr/build/.hypothesis/examples')
> benchmark: 3.2.2 (defaults: timer=time.perf_counter disable_gc=False
> min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10
> warmup=True warmup_iterations=5)
> rootdir: /<<PKGBUILDDIR>>, configfile: pyproject.toml
> plugins: hypothesis-6.36.0, benchmark-3.2.2
> collecting ... collected 141 items / 1 deselected / 140 selected
>
> tests/test_converter_inheritance.py::test_inheritance[GenConverter] PASSED [
> 0%]
> tests/test_converter_inheritance.py::test_inheritance[Converter] PASSED [
> 1%]
> tests/test_converter_inheritance.py::test_gen_hook_priority[Converter] PASSED
> [ 2%]
> tests/test_converter_inheritance.py::test_gen_hook_priority[GenConverter]
> PASSED [ 2%]
> tests/test_dataclasses.py::test_dataclasses_in_attrs[GenConverter] PASSED [
> 3%]
> tests/test_dataclasses.py::test_dataclasses_in_attrs[Converter] PASSED [
> 4%]
> tests/test_dataclasses.py::test_dataclasses_in_container[GenConverter] PASSED
> [ 5%]
> tests/test_dataclasses.py::test_dataclasses_in_container[Converter] PASSED [
> 5%]
> tests/test_dataclasses.py::test_dataclasses[GenConverter] PASSED [
> 6%]
> tests/test_dataclasses.py::test_dataclasses[Converter] PASSED [
> 7%]
> tests/test_disambigutors.py::test_edge_errors PASSED [
> 7%]
> tests/test_disambigutors.py::test_fallback PASSED [
> 8%]
> tests/test_disambigutors.py::test_disambiguation PASSED [
> 9%]
> tests/test_factory_hooks.py::test_snake_to_camel[Converter] PASSED [
> 10%]
> tests/test_factory_hooks.py::test_snake_to_camel[GenConverter] PASSED [
> 10%]
> tests/test_function_dispatch.py::test_function_dispatch PASSED [
> 11%]
> tests/test_function_dispatch.py::test_function_clears_cache_after_function_added
> PASSED [ 12%]
> tests/test_gen.py::test_structure_linecache PASSED [
> 12%]
> tests/test_gen.py::test_unstructure_linecache PASSED [
> 13%]
> tests/test_gen.py::test_no_linecache PASSED [
> 14%]
> tests/test_gen_dict.py::test_unmodified_generated_unstructuring PASSED [
> 15%]
> tests/test_gen_dict.py::test_nodefs_generated_unstructuring PASSED [
> 15%]
> tests/test_gen_dict.py::test_nodefs_generated_unstructuring_cl PASSED [
> 16%]
> tests/test_gen_dict.py::test_individual_overrides PASSED [
> 17%]
> tests/test_gen_dict.py::test_unmodified_generated_structuring PASSED [
> 17%]
> tests/test_gen_dict.py::test_renaming PASSED [
> 18%]
> tests/test_gen_dict.py::test_renaming_forbid_extra_keys PASSED [
> 19%]
> tests/test_gen_dict.py::test_omitting PASSED [
> 20%]
> tests/test_gen_dict.py::test_omitting_structure PASSED [
> 20%]
> tests/test_gen_dict_563.py::test_roundtrip PASSED [
> 21%]
> tests/test_gen_dict_563.py::test_roundtrip_dc PASSED [
> 22%]
> tests/test_generics.py::test_deep_copy PASSED [
> 22%]
> tests/test_generics.py::test_able_to_structure_generics[int-str-result0]
> PASSED [ 23%]
> tests/test_generics.py::test_able_to_structure_generics[str-str-result1]
> PASSED [ 24%]
> tests/test_generics.py::test_able_to_structure_generics[List-str-result2]
> PASSED [ 25%]
> tests/test_generics.py::test_structure_generics_with_cols[int-result0] PASSED
> [ 25%]
> tests/test_generics.py::test_structure_generics_with_cols[str-result1] PASSED
> [ 26%]
> tests/test_generics.py::test_39_structure_generics_with_cols[int-result0]
> PASSED [ 27%]
> tests/test_generics.py::test_39_structure_generics_with_cols[str-result1]
> PASSED [ 27%]
> tests/test_generics.py::test_structure_nested_generics_with_cols[int-result0]
> PASSED [ 28%]
> tests/test_generics.py::test_structure_nested_generics_with_cols[int-result1]
> PASSED [ 29%]
> tests/test_generics.py::test_structure_nested_generics[TClass-str-result0]
> PASSED [ 30%]
> tests/test_generics.py::test_structure_nested_generics[List-str-result1]
> PASSED [ 30%]
> tests/test_generics.py::test_able_to_structure_deeply_nested_generics_gen
> PASSED [ 31%]
> tests/test_generics.py::test_structure_unions_of_generics PASSED [
> 32%]
> tests/test_generics.py::test_structure_list_of_generic_unions PASSED [
> 32%]
> tests/test_generics.py::test_raises_if_no_generic_params_supplied PASSED [
> 33%]
> tests/test_generics.py::test_unstructure_generic_attrs PASSED [
> 34%]
> tests/test_generics.py::test_unstructure_deeply_nested_generics PASSED [
> 35%]
> tests/test_generics.py::test_unstructure_deeply_nested_generics_list PASSED [
> 35%]
> tests/test_generics.py::test_unstructure_protocol PASSED [
> 36%]
> tests/test_multistrategy_dispatch.py::test_multistrategy_dispatch_register_cls
> PASSED [ 37%]
> tests/test_multistrategy_dispatch.py::test_multistrategy_dispatch_register_func
> PASSED [ 37%]
> tests/test_multistrategy_dispatch.py::test_multistrategy_dispatch_conflict_class_wins
> PASSED [ 38%]
> tests/test_preconf.py::test_stdlib_json PASSED [
> 39%]
> tests/test_preconf.py::test_ujson PASSED [
> 40%]
> tests/test_preconf.py::test_msgpack PASSED [
> 40%]
> tests/test_preconf.py::test_bson PASSED [
> 41%]
> tests/test_preconf.py::test_pyyaml PASSED [
> 42%]
> tests/test_preconf.py::test_tomlkit FAILED [
> 42%]
> tests/test_recursive.py::test_simple_recursive PASSED [
> 43%]
> tests/test_structure.py::test_structuring_primitives PASSED [
> 44%]
> tests/test_structure.py::test_structuring_seqs PASSED [
> 45%]
> tests/test_structure.py::test_structuring_sets PASSED [
> 45%]
> tests/test_structure.py::test_stringifying_sets PASSED [
> 46%]
> tests/test_structure.py::test_structuring_hetero_tuples PASSED [
> 47%]
> tests/test_structure.py::test_stringifying_tuples PASSED [
> 47%]
> tests/test_structure.py::test_structuring_dicts PASSED [
> 48%]
> tests/test_structure.py::test_structuring_dicts_opts PASSED [
> 49%]
> tests/test_structure.py::test_stringifying_dicts PASSED [
> 50%]
> tests/test_structure.py::test_structuring_optional_primitives PASSED [
> 50%]
> tests/test_structure.py::test_structuring_lists_of_opt PASSED [
> 51%]
> tests/test_structure.py::test_stringifying_lists_of_opt PASSED [
> 52%]
> tests/test_structure.py::test_structuring_primitive_union_hook PASSED [
> 52%]
> tests/test_structure.py::test_structure_hook_func PASSED [
> 53%]
> tests/test_structure.py::test_structuring_enums PASSED [
> 54%]
> tests/test_structure.py::test_structuring_unsupported PASSED [
> 55%]
> tests/test_structure.py::test_subclass_registration_is_honored PASSED [
> 55%]
> tests/test_structure.py::test_structure_union_edge_case PASSED [
> 56%]
> tests/test_structure_attrs.py::test_structure_simple_from_dict PASSED [
> 57%]
> tests/test_structure_attrs.py::test_structure_simple_from_dict_default PASSED
> [ 57%]
> tests/test_structure_attrs.py::test_roundtrip PASSED [
> 58%]
> tests/test_structure_attrs.py::test_structure_tuple PASSED [
> 59%]
> tests/test_structure_attrs.py::test_structure_union PASSED [
> 60%]
> tests/test_structure_attrs.py::test_structure_union_none PASSED [
> 60%]
> tests/test_structure_attrs.py::test_structure_union_explicit PASSED [
> 61%]
> tests/test_structure_attrs.py::test_structure_literal[Converter] PASSED [
> 62%]
> tests/test_structure_attrs.py::test_structure_literal[GenConverter] PASSED [
> 62%]
> tests/test_structure_attrs.py::test_structure_literal_multiple[Converter]
> PASSED [ 63%]
> tests/test_structure_attrs.py::test_structure_literal_multiple[GenConverter]
> PASSED [ 64%]
> tests/test_structure_attrs.py::test_structure_literal_error[Converter] PASSED
> [ 65%]
> tests/test_structure_attrs.py::test_structure_literal_error[GenConverter]
> PASSED [ 65%]
> tests/test_structure_attrs.py::test_structure_literal_multiple_error[Converter]
> PASSED [ 66%]
> tests/test_structure_attrs.py::test_structure_literal_multiple_error[GenConverter]
> PASSED [ 67%]
> tests/test_structure_attrs.py::test_structure_fallback_to_attrib_converters[Converter]
> PASSED [ 67%]
> tests/test_structure_attrs.py::test_structure_fallback_to_attrib_converters[GenConverter]
> PASSED [ 68%]
> tests/test_structure_attrs.py::test_structure_prefers_attrib_converters[Converter]
> PASSED [ 69%]
> tests/test_structure_attrs.py::test_structure_prefers_attrib_converters[GenConverter]
> PASSED [ 70%]
> tests/test_unions.py::test_custom_union_toplevel_roundtrip[Converter] PASSED
> [ 70%]
> tests/test_unions.py::test_custom_union_toplevel_roundtrip[GenConverter]
> PASSED [ 71%]
> tests/test_unions.py::test_310_custom_union_toplevel_roundtrip[Converter]
> PASSED [ 72%]
> tests/test_unions.py::test_310_custom_union_toplevel_roundtrip[GenConverter]
> PASSED [ 72%]
> tests/test_unions.py::test_custom_union_clsfield_roundtrip[Converter] PASSED
> [ 73%]
> tests/test_unions.py::test_custom_union_clsfield_roundtrip[GenConverter]
> PASSED [ 74%]
> tests/test_unstructure.py::test_seq_unstructure PASSED [
> 75%]
> tests/test_unstructure.py::test_set_unstructure PASSED [
> 75%]
> tests/test_unstructure.py::test_mapping_unstructure PASSED [
> 76%]
> tests/test_unstructure.py::test_enum_unstructure PASSED [
> 77%]
> tests/test_unstructure.py::test_attrs_asdict_unstructure PASSED [
> 77%]
> tests/test_unstructure.py::test_attrs_astuple_unstructure PASSED [
> 78%]
> tests/test_unstructure.py::test_unstructure_hooks PASSED [
> 79%]
> tests/test_unstructure.py::test_unstructure_hook_func PASSED [
> 80%]
> tests/test_unstructure.py::test_seq_of_simple_classes_unstructure PASSED [
> 80%]
> tests/metadata/test_genconverter.py::test_simple_roundtrip PASSED [
> 81%]
> tests/metadata/test_genconverter.py::test_simple_roundtrip_defaults PASSED [
> 82%]
> tests/metadata/test_genconverter.py::test_simple_roundtrip_with_extra_keys_forbidden
> PASSED [ 82%]
> tests/metadata/test_genconverter.py::test_forbid_extra_keys PASSED [
> 83%]
> tests/metadata/test_genconverter.py::test_forbid_extra_keys_defaults PASSED [
> 84%]
> tests/metadata/test_genconverter.py::test_forbid_extra_keys_nested_override
> PASSED [ 85%]
> tests/metadata/test_genconverter.py::test_nested_roundtrip PASSED [
> 85%]
> tests/metadata/test_genconverter.py::test_union_field_roundtrip PASSED [
> 86%]
> tests/metadata/test_genconverter.py::test_310_union_field_roundtrip PASSED [
> 87%]
> tests/metadata/test_genconverter.py::test_optional_field_roundtrip PASSED [
> 87%]
> tests/metadata/test_genconverter.py::test_310_optional_field_roundtrip PASSED
> [ 88%]
> tests/metadata/test_genconverter.py::test_omit_default_roundtrip PASSED [
> 89%]
> tests/metadata/test_genconverter.py::test_type_overrides PASSED [
> 90%]
> tests/metadata/test_genconverter.py::test_calling_back PASSED [
> 90%]
> tests/metadata/test_genconverter.py::test_overriding_generated_unstructure
> PASSED [ 91%]
> tests/metadata/test_genconverter.py::test_overriding_generated_unstructure_hook_func
> PASSED [ 92%]
> tests/metadata/test_genconverter.py::test_overriding_generated_structure
> PASSED [ 92%]
> tests/metadata/test_genconverter.py::test_overriding_generated_structure_hook_func
> PASSED [ 93%]
> tests/metadata/test_genconverter.py::test_seq_of_simple_classes_unstructure
> PASSED [ 94%]
> tests/metadata/test_genconverter.py::test_annotated_attrs PASSED [
> 95%]
> tests/metadata/test_roundtrips.py::test_simple_roundtrip PASSED [
> 95%]
> tests/metadata/test_roundtrips.py::test_simple_roundtrip_defaults PASSED [
> 96%]
> tests/metadata/test_roundtrips.py::test_nested_roundtrip PASSED [
> 97%]
> tests/metadata/test_roundtrips.py::test_union_field_roundtrip PASSED [
> 97%]
> tests/metadata/test_roundtrips.py::test_310_union_field_roundtrip PASSED [
> 98%]
> tests/metadata/test_roundtrips.py::test_optional_field_roundtrip PASSED [
> 99%]
> tests/metadata/test_roundtrips.py::test_310_optional_field_roundtrip PASSED
> [100%]
>
> =================================== FAILURES
> ===================================
> _________________________________ test_tomlkit
> _________________________________
>
> @given(
> > everythings(
> min_key_length=1,
> allow_null_bytes_in_keys=False,
> allow_quotes_in_keys=False,
> allow_control_characters_in_values=False,
> )
> )
> E hypothesis.errors.MultipleFailures: Hypothesis found 3 distinct failures.
>
> f = <function given.<locals>.run_test_as_given.<locals>.wrapped_test
> at 0x7f01ad9f5f30>
>
> tests/test_preconf.py:270: MultipleFailures
> ---------------------------------- Hypothesis
> ----------------------------------
> Falsifying example: test_tomlkit(
> everything=Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('', 0, 0.0),
> a_counter=Counter({'\\U': 0}), a_mapping={}, a_mutable_mapping={},
> a_sequence=[], a_mutable_sequence=[], a_set=set(), a_mutable_set=set(),
> a_frozenset=frozenset(), an_int_enum=<AnIntEnum.A: 1>,
> a_str_enum=<AStringEnum.A: 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0,
> 0, tzinfo=datetime.timezone.utc), a_string_enum_dict={}),
> )
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
>
> @given(
> everythings(
> min_key_length=1,
> allow_null_bytes_in_keys=False,
> allow_quotes_in_keys=False,
> allow_control_characters_in_values=False,
> )
> )
> def test_tomlkit(everything: Everything):
> from tomlkit import dumps as tomlkit_dumps
> from tomlkit import loads as tomlkit_loads
>
> converter = tomlkit_make_converter()
> unstructured = converter.unstructure(everything)
> raw = tomlkit_dumps(unstructured)
> > assert converter.structure(tomlkit_loads(raw), Everything) ==
> > everything
>
> converter = <cattr.converters.GenConverter object at 0x7f01a972f640>
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
> raw = 'string = ""\nbytes = ""\nan_int = 0\na_float = 0.0\na_list =
> []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\U" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> tomlkit_dumps = <function dumps at 0x7f01abd85f30>
> tomlkit_loads = <function loads at 0x7f01acb552d0>
> unstructured = {'a_counter': {'\\U': 0}, 'a_datetime':
> datetime.datetime(2000, 1, 1, 0, 0, tzinfo=datetime.timezone.utc), 'a_dict':
> {}, 'a_float': 0.0, ...}
>
> tests/test_preconf.py:284:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> /usr/lib/python3/dist-packages/tomlkit/api.py:42: in loads
> return parse(string)
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\U" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/api.py:82: in parse
> return Parser(string).parse()
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\U" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/parser.py:158: in parse
> key, value = self._parse_table()
> body = {'string': '', 'bytes': '', 'an_int': 0, 'a_float': 0.0,
> 'a_list': [], 'a_homogenous_tuple': [], 'a_hetero_tuple': [''...': 'a',
> 'a_datetime': DateTime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')), 'a_dict': {}}
> item = (None, <Whitespace '\n'>)
> key = <Key a_dict>
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> value = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:998: in _parse_table
> item = self._parse_item()
> comment = ''
> cws = ''
> full_key = <Key a_counter>
> indent = ''
> is_aot = False
> key = <Key a_counter>
> missing_table = False
> name_parts = (<Key a_counter>,)
> parent = None
> parent_name = None
> parent_name_parts = ()
> result = <tomlkit.items.Null object at 0x7f01a9768640>
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> table = {}
> trail = '\n'
> values = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:242: in _parse_item
> return self._parse_key_value(True)
> c = '"'
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> state = <tomlkit.source._State object at 0x7f01a9769720>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:315: in _parse_key_value
> key = self._parse_key()
> indent = ''
> parse_comment = True
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:362: in _parse_key
> return self._parse_quoted_key()
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:378: in _parse_quoted_key
> key_str = self._parse_string(
> key_type = <KeyType.Basic: '"'>
> original = ''
> quote_style = '"'
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:864: in _parse_string
> value += self._parse_escaped_char(delim.is_multiline())
> code = 85
> delim = <StringType.SLB: '"'>
> escaped = True
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> value = ''
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>, multiline = False
>
> def _parse_escaped_char(self, multiline):
> if multiline and self._current.is_ws():
> # When the last non-whitespace character on a line is
> # a \, it will be trimmed along with all whitespace
> # (including newlines) up to the next non-whitespace
> # character or closing delimiter.
> # """\
> # hello \
> # world"""
> tmp = ""
> while self._current.is_ws():
> tmp += self._current
> # consume the whitespace, EOF here is an issue
> # (middle of string)
> self.inc(exception=UnexpectedEofError)
> continue
>
> # the escape followed by whitespace must have a newline
> # before any other chars
> if "\n" not in tmp:
> raise self.parse_error(InvalidCharInStringError,
> self._current)
>
> return ""
>
> if self._current in _escaped:
> c = _escaped[self._current]
>
> # consume this char, EOF here is an issue (middle of string)
> self.inc(exception=UnexpectedEofError)
>
> return c
>
> if self._current in {"u", "U"}:
> # this needs to be a unicode
> u, ue = self._peek_unicode(self._current == "U")
> if u is not None:
> # consume the U char and the unicode value
> self.inc_n(len(ue) + 1)
>
> return u
>
> > raise self.parse_error(InvalidUnicodeValueError)
> E tomlkit.exceptions.InvalidUnicodeValueError: Invalid unicode
> value at line 20 col 2
>
> multiline = False
> self = <tomlkit.parser.Parser object at 0x7f01acefa290>
> u = None
> ue = '" = 0\n\n['
>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:773: InvalidUnicodeValueError
>
> Falsifying example: test_tomlkit(
> everything=Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('', 0, 0.0),
> a_counter=Counter({'\\0': 0}), a_mapping={}, a_mutable_mapping={},
> a_sequence=[], a_mutable_sequence=[], a_set=set(), a_mutable_set=set(),
> a_frozenset=frozenset(), an_int_enum=<AnIntEnum.A: 1>,
> a_str_enum=<AStringEnum.A: 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0,
> 0, tzinfo=datetime.timezone.utc), a_string_enum_dict={}),
> )
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
>
> @given(
> everythings(
> min_key_length=1,
> allow_null_bytes_in_keys=False,
> allow_quotes_in_keys=False,
> allow_control_characters_in_values=False,
> )
> )
> def test_tomlkit(everything: Everything):
> from tomlkit import dumps as tomlkit_dumps
> from tomlkit import loads as tomlkit_loads
>
> converter = tomlkit_make_converter()
> unstructured = converter.unstructure(everything)
> raw = tomlkit_dumps(unstructured)
> > assert converter.structure(tomlkit_loads(raw), Everything) ==
> > everything
>
> converter = <cattr.converters.GenConverter object at 0x7f01a972f4c0>
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
> raw = 'string = ""\nbytes = ""\nan_int = 0\na_float = 0.0\na_list =
> []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\0" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> tomlkit_dumps = <function dumps at 0x7f01abd85f30>
> tomlkit_loads = <function loads at 0x7f01acb552d0>
> unstructured = {'a_counter': {'\\0': 0}, 'a_datetime':
> datetime.datetime(2000, 1, 1, 0, 0, tzinfo=datetime.timezone.utc), 'a_dict':
> {}, 'a_float': 0.0, ...}
>
> tests/test_preconf.py:284:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> /usr/lib/python3/dist-packages/tomlkit/api.py:42: in loads
> return parse(string)
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\0" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/api.py:82: in parse
> return Parser(string).parse()
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\0" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/parser.py:158: in parse
> key, value = self._parse_table()
> body = {'string': '', 'bytes': '', 'an_int': 0, 'a_float': 0.0,
> 'a_list': [], 'a_homogenous_tuple': [], 'a_hetero_tuple': [''...': 'a',
> 'a_datetime': DateTime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')), 'a_dict': {}}
> item = (None, <Whitespace '\n'>)
> key = <Key a_dict>
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> value = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:998: in _parse_table
> item = self._parse_item()
> comment = ''
> cws = ''
> full_key = <Key a_counter>
> indent = ''
> is_aot = False
> key = <Key a_counter>
> missing_table = False
> name_parts = (<Key a_counter>,)
> parent = None
> parent_name = None
> parent_name_parts = ()
> result = <tomlkit.items.Null object at 0x7f01a9929c90>
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> table = {}
> trail = '\n'
> values = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:242: in _parse_item
> return self._parse_key_value(True)
> c = '"'
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> state = <tomlkit.source._State object at 0x7f01a97e4340>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:315: in _parse_key_value
> key = self._parse_key()
> indent = ''
> parse_comment = True
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:362: in _parse_key
> return self._parse_quoted_key()
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:378: in _parse_quoted_key
> key_str = self._parse_string(
> key_type = <KeyType.Basic: '"'>
> original = ''
> quote_style = '"'
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:864: in _parse_string
> value += self._parse_escaped_char(delim.is_multiline())
> code = 48
> delim = <StringType.SLB: '"'>
> escaped = True
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
> value = ''
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>, multiline = False
>
> def _parse_escaped_char(self, multiline):
> if multiline and self._current.is_ws():
> # When the last non-whitespace character on a line is
> # a \, it will be trimmed along with all whitespace
> # (including newlines) up to the next non-whitespace
> # character or closing delimiter.
> # """\
> # hello \
> # world"""
> tmp = ""
> while self._current.is_ws():
> tmp += self._current
> # consume the whitespace, EOF here is an issue
> # (middle of string)
> self.inc(exception=UnexpectedEofError)
> continue
>
> # the escape followed by whitespace must have a newline
> # before any other chars
> if "\n" not in tmp:
> raise self.parse_error(InvalidCharInStringError,
> self._current)
>
> return ""
>
> if self._current in _escaped:
> c = _escaped[self._current]
>
> # consume this char, EOF here is an issue (middle of string)
> self.inc(exception=UnexpectedEofError)
>
> return c
>
> if self._current in {"u", "U"}:
> # this needs to be a unicode
> u, ue = self._peek_unicode(self._current == "U")
> if u is not None:
> # consume the U char and the unicode value
> self.inc_n(len(ue) + 1)
>
> return u
>
> raise self.parse_error(InvalidUnicodeValueError)
>
> > raise self.parse_error(InvalidCharInStringError, self._current)
> E tomlkit.exceptions.InvalidCharInStringError: Invalid character '0' in
> string at line 20 col 2
>
> multiline = False
> self = <tomlkit.parser.Parser object at 0x7f01a9715db0>
>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:775: InvalidCharInStringError
>
> Falsifying example: test_tomlkit(
> everything=Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('', 0, 0.0),
> a_counter=Counter({'\\': 0}), a_mapping={}, a_mutable_mapping={},
> a_sequence=[], a_mutable_sequence=[], a_set=set(), a_mutable_set=set(),
> a_frozenset=frozenset(), an_int_enum=<AnIntEnum.A: 1>,
> a_str_enum=<AStringEnum.A: 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0,
> 0, tzinfo=datetime.timezone.utc), a_string_enum_dict={}),
> )
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
>
> @given(
> everythings(
> min_key_length=1,
> allow_null_bytes_in_keys=False,
> allow_quotes_in_keys=False,
> allow_control_characters_in_values=False,
> )
> )
> def test_tomlkit(everything: Everything):
> from tomlkit import dumps as tomlkit_dumps
> from tomlkit import loads as tomlkit_loads
>
> converter = tomlkit_make_converter()
> unstructured = converter.unstructure(everything)
> raw = tomlkit_dumps(unstructured)
> > assert converter.structure(tomlkit_loads(raw), Everything) ==
> > everything
>
> converter = <cattr.converters.GenConverter object at 0x7f01a972dd40>
> everything = Everything(string='', bytes=b'', an_int=0, a_float=0.0,
> a_dict={}, a_list=[], a_homogenous_tuple=(), a_hetero_tuple=('...tringEnum.A:
> 'a'>, a_datetime=datetime.datetime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone.utc), a_string_enum_dict={})
> raw = 'string = ""\nbytes = ""\nan_int = 0\na_float = 0.0\na_list =
> []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....0-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> tomlkit_dumps = <function dumps at 0x7f01abd85f30>
> tomlkit_loads = <function loads at 0x7f01acb552d0>
> unstructured = {'a_counter': {'\\': 0}, 'a_datetime': datetime.datetime(2000,
> 1, 1, 0, 0, tzinfo=datetime.timezone.utc), 'a_dict': {}, 'a_float': 0.0, ...}
>
> tests/test_preconf.py:284:
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
> /usr/lib/python3/dist-packages/tomlkit/api.py:42: in loads
> return parse(string)
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....0-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/api.py:82: in parse
> return Parser(string).parse()
> string = 'string = ""\nbytes = ""\nan_int = 0\na_float =
> 0.0\na_list = []\na_homogenous_tuple = []\na_hetero_tuple = ["", 0,
> 0....0-01-01T00:00:00Z\n\n[a_dict]\n\n[a_counter]\n"\\" =
> 0\n\n[a_mapping]\n\n[a_mutable_mapping]\n\n[a_string_enum_dict]\n'
> /usr/lib/python3/dist-packages/tomlkit/parser.py:158: in parse
> key, value = self._parse_table()
> body = {'string': '', 'bytes': '', 'an_int': 0, 'a_float': 0.0,
> 'a_list': [], 'a_homogenous_tuple': [], 'a_hetero_tuple': [''...': 'a',
> 'a_datetime': DateTime(2000, 1, 1, 0, 0,
> tzinfo=datetime.timezone(datetime.timedelta(0), 'UTC')), 'a_dict': {}}
> item = (None, <Whitespace '\n'>)
> key = <Key a_dict>
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> value = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:998: in _parse_table
> item = self._parse_item()
> comment = ''
> cws = ''
> full_key = <Key a_counter>
> indent = ''
> is_aot = False
> key = <Key a_counter>
> missing_table = False
> name_parts = (<Key a_counter>,)
> parent = None
> parent_name = None
> parent_name_parts = ()
> result = <tomlkit.items.Null object at 0x7f01a9681990>
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> table = {}
> trail = '\n'
> values = {}
> /usr/lib/python3/dist-packages/tomlkit/parser.py:242: in _parse_item
> return self._parse_key_value(True)
> c = '"'
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> state = <tomlkit.source._State object at 0x7f01a9683340>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:315: in _parse_key_value
> key = self._parse_key()
> indent = ''
> parse_comment = True
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:362: in _parse_key
> return self._parse_quoted_key()
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:378: in _parse_quoted_key
> key_str = self._parse_string(
> key_type = <KeyType.Basic: '"'>
> original = ''
> quote_style = '"'
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> _
>
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> delim = <StringType.SLB: '"'>
>
> def _parse_string(self, delim: StringType) -> String:
> # only keep parsing for string if the current character matches the
> delim
> if self._current != delim.unit:
> raise self.parse_error(
> InternalParserError,
> f"Invalid character for string type {delim}",
> )
>
> # consume the opening/first delim, EOF here is an issue
> # (middle of string or middle of delim)
> self.inc(exception=UnexpectedEofError)
>
> if self._current == delim.unit:
> # consume the closing/second delim, we do not care if EOF occurs
> as
> # that would simply imply an empty single line string
> if not self.inc() or self._current != delim.unit:
> # Empty string
> return String(delim, "", "", Trivia())
>
> # consume the third delim, EOF here is an issue (middle of string)
> self.inc(exception=UnexpectedEofError)
>
> delim = delim.toggle() # convert delim to multi delim
>
> self.mark() # to extract the original string with whitespace and all
> value = ""
>
> # A newline immediately following the opening delimiter will be
> trimmed.
> if delim.is_multiline() and self._current == "\n":
> # consume the newline, EOF here is an issue (middle of string)
> self.inc(exception=UnexpectedEofError)
>
> escaped = False # whether the previous key was ESCAPE
> while True:
> code = ord(self._current)
> if (
> delim.is_singleline()
> and not escaped
> and (code == CHR_DEL or code <= CTRL_CHAR_LIMIT and code !=
> CTRL_I)
> ) or (
> delim.is_multiline()
> and not escaped
> and (
> code == CHR_DEL
> or code <= CTRL_CHAR_LIMIT
> and code not in [CTRL_I, CTRL_J, CTRL_M]
> )
> ):
> > raise self.parse_error(InvalidControlChar, code, "strings")
> E tomlkit.exceptions.InvalidControlChar: Control characters
> (codes less than 0x1f and 0x7f) are not allowed in strings, use \u000a
> instead at line 20 col 7
>
> code = 10
> delim = <StringType.SLB: '"'>
> escaped = False
> self = <tomlkit.parser.Parser object at 0x7f01a967aa70>
> value = '" = 0'
>
> /usr/lib/python3/dist-packages/tomlkit/parser.py:825: InvalidControlChar
> =============================== warnings summary
> ===============================
> .pybuild/cpython3_3.10_cattr/build/tests/test_preconf.py: 190 warnings
> /usr/lib/python3/dist-packages/hypothesis/internal/escalation.py:131:
> PytestDeprecationWarning: A private pytest class or function was used.
> return str(item.repr_failure(ExceptionInfo((type(err), err, tb)))) + "\n"
>
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info
> ============================
> FAILED tests/test_preconf.py::test_tomlkit -
> hypothesis.errors.MultipleFailur...
> ==== 1 failed, 139 passed, 1 deselected, 190 warnings in 273.12s (0:04:33)
> =====
> E: pybuild pybuild:379: test: plugin pyproject failed with: exit code=1: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.10_cattr/build; python3.10 -m pytest -v
> --ignore tests/test_unstructure_collections.py -k 'not test_orjson'
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.10
> returned exit code 13
The full build log is available from:
http://qa-logs.debian.net/2022/10/23/python-cattrs_1.10.0-1_unstable.log
All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20221023;users=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20221023&fusertaguser=lu...@debian.org&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 marking 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 ---