https://bugzilla.redhat.com/show_bug.cgi?id=1875997
--- Comment #1 from Andy Mender <andymenderunix(a)gmail.com> ---
Koji scratch build:
fails due to missing dependency
Yes, the following needs to be added next to the existing BuildRequires:
BuildRequires: python3dist(typish)
Tested in COPR:
https://copr.fedorainfracloud.org/coprs/andymenderunix/metrics2mqtt-and-d...
There is quite a lot of tests failing, however. I'll look into it.
=================================== FAILURES
===================================
____________ TestSpecificVersions.test_dump_dataclass_with_optional
____________
args = (<tests.test_specific_versions.TestSpecificVersions
testMethod=test_dump_dataclass_with_optional>,)
kwargs = {}
@skipUnless(dont_skip, reason=reason)
def _wrapper(*args, **kwargs):
return decorated(*args, **kwargs)
tests/test_specific_versions.py:31:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_specific_versions.py:88: in test_dump_dataclass_with_optional
self.assertDictEqual(expected, dumped)
E AssertionError: {'x': [42, None, 123]} != {}
E - {'x': [42, None, 123]}
E + {}
______________ TestSpecificVersions.test_namedtuple_with_optional
______________
args = (<tests.test_specific_versions.TestSpecificVersions
testMethod=test_namedtuple_with_optional>,)
kwargs = {}
@skipUnless(dont_skip, reason=reason)
def _wrapper(*args, **kwargs):
return decorated(*args, **kwargs)
tests/test_specific_versions.py:31:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_specific_versions.py:74: in test_namedtuple_with_optional
jsons.load({'arg': None}, NamedTupleWithOptional))
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
jsons/_load_impl.py:110: in _do_load
result = deserializer(json_obj, cls, **kwargs)
jsons/deserializers/default_tuple.py:23: in default_tuple_deserializer
return default_namedtuple_deserializer(obj, cls,
key_transformer=key_transformer, **kwargs)
jsons/deserializers/default_tuple.py:80: in default_namedtuple_deserializer
loaded_field = load(field, cls_, key_transformer=key_transformer, **kwargs)
jsons/_load_impl.py:75: in load
_check_for_none(json_obj, cls)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
json_obj = None, cls = typing.Optional[str]
def _check_for_none(json_obj: object, cls: type):
# Check if the json_obj is None and whether or not that is fine.
if json_obj is None and not can_match_with_none(cls):
cls_name = get_class_name(cls).lower()
raise DeserializationError(
message='NoneType cannot be deserialized into
{}'.format(cls_name),
source=json_obj,
target=cls)
E jsons.exceptions.DeserializationError: NoneType cannot be
deserialized into optional
jsons/_load_impl.py:213: DeserializationError
_________________________ TestUnion.test_load_optional
_________________________
self = <tests.test_union.TestUnion testMethod=test_load_optional>
def test_load_optional(self):
class TestOptionalInt:
def __init__(self, value: Optional[int]):
self.value = value
# This seems fine.
loaded1 = jsons.load({'value': 42},
cls=TestOptionalInt)
tests/test_union.py:102:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
jsons/_load_impl.py:110: in _do_load
result = deserializer(json_obj, cls, **kwargs)
jsons/deserializers/default_object.py:39: in default_object_deserializer
constructor_args = _get_constructor_args(obj, cls, **kwargs)
jsons/deserializers/default_object.py:63: in _get_constructor_args
key, value = _get_value_for_attr(obj=obj,
jsons/deserializers/default_object.py:93: in _get_value_for_attr
result = sig_key, _get_value_from_obj(obj, cls, sig, sig_key,
jsons/deserializers/default_object.py:134: in _get_value_from_obj
value = load(obj[sig_key], cls_, meta_hints=new_hints, **kwargs)
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
json_obj = 42, deserializer = None, cls = typing.Optional[int], initial = False
kwargs = {'_initial': False, 'attr_getters': None, 'fork_inst':
<class
'jsons._common_impl.StateHolder'>, 'meta_hints': {}, ...}
cls_name = 'typing.Optional'
def _do_load(json_obj: object,
deserializer: callable,
cls: type,
initial: bool,
**kwargs):
cls_name = get_class_name(cls, fully_qualified=True)
if deserializer is None:
raise DeserializationError('No deserializer for type
"{}"'.format(cls_name), json_obj, cls)
E
jsons.exceptions.DeserializationError: No deserializer for type
"typing.Optional"
jsons/_load_impl.py:108: DeserializationError
__________________________ TestUnion.test_load_union
___________________________
self = <tests.test_union.TestUnion testMethod=test_load_union>
def test_load_union(self):
class A:
def __init__(self, x):
self.x = x
class B:
def __init__(self, x: Optional[int]):
self.x = x
class C:
def __init__(self, x: Union[datetime.datetime, A]):
self.x = x
# Test loading with None value without type hint.
self.assertEqual(None, jsons.load({'x': None}, A).x)
# Test Optional with a value.
self.assertEqual(1, jsons.load({'x': 1}, B).x)
tests/test_union.py:63:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
jsons/_load_impl.py:110: in _do_load
result = deserializer(json_obj, cls, **kwargs)
jsons/deserializers/default_object.py:39: in default_object_deserializer
constructor_args = _get_constructor_args(obj, cls, **kwargs)
jsons/deserializers/default_object.py:63: in _get_constructor_args
key, value = _get_value_for_attr(obj=obj,
jsons/deserializers/default_object.py:93: in _get_value_for_attr
result = sig_key, _get_value_from_obj(obj, cls, sig, sig_key,
jsons/deserializers/default_object.py:134: in _get_value_from_obj
value = load(obj[sig_key], cls_, meta_hints=new_hints, **kwargs)
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
json_obj = 1, deserializer = None, cls = typing.Optional[int], initial = False
kwargs = {'_initial': False, 'attr_getters': None, 'fork_inst':
<class
'jsons._common_impl.StateHolder'>, 'meta_hints': {}, ...}
cls_name = 'typing.Optional'
def _do_load(json_obj: object,
deserializer: callable,
cls: type,
initial: bool,
**kwargs):
cls_name = get_class_name(cls, fully_qualified=True)
if deserializer is None:
raise DeserializationError('No deserializer for type
"{}"'.format(cls_name), json_obj, cls)
E
jsons.exceptions.DeserializationError: No deserializer for type
"typing.Optional"
jsons/_load_impl.py:108: DeserializationError
__________________ TestVarious.test_load_recursive_structure
___________________
self = <tests.test_various.TestVarious
testMethod=test_load_recursive_structure>
def test_load_recursive_structure(self):
source = {
'value': 10,
'next': {
'value': 20,
'next': {
'value': 30,
'next': None
}
}
}
loaded = jsons.load(source, Node)
tests/test_various.py:53:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
jsons/_load_impl.py:110: in _do_load
result = deserializer(json_obj, cls, **kwargs)
jsons/deserializers/default_object.py:39: in default_object_deserializer
constructor_args = _get_constructor_args(obj, cls, **kwargs)
jsons/deserializers/default_object.py:63: in _get_constructor_args
key, value = _get_value_for_attr(obj=obj,
jsons/deserializers/default_object.py:93: in _get_value_for_attr
result = sig_key, _get_value_from_obj(obj, cls, sig, sig_key,
jsons/deserializers/default_object.py:134: in _get_value_from_obj
value = load(obj[sig_key], cls_, meta_hints=new_hints, **kwargs)
jsons/_load_impl.py:98: in load
return _do_load(json_obj, deserializer, cls, initial, **kwargs_)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
json_obj = {'next': {'next': None, 'value': 30}, 'value':
20}
deserializer = None, cls = typing.Optional[tests.test_various.Node]
initial = False
kwargs = {'_initial': False, 'attr_getters': None, 'fork_inst':
<class
'jsons._common_impl.StateHolder'>, 'meta_hints': {}, ...}
cls_name = 'typing.Optional'
def _do_load(json_obj: object,
deserializer: callable,
cls: type,
initial: bool,
**kwargs):
cls_name = get_class_name(cls, fully_qualified=True)
if deserializer is None:
raise DeserializationError('No deserializer for type
"{}"'.format(cls_name), json_obj, cls)
E
jsons.exceptions.DeserializationError: No deserializer for type
"typing.Optional"
jsons/_load_impl.py:108: DeserializationError
--
You are receiving this mail because:
You are on the CC list for the bug.
You are always notified about changes to this product and component