Adding field transformer according to documentation (i.e. as a function of type Callable[[type, list[attr.Attribute[Any]]], list[attr.Attribute[Any]]])
breaks attrs integration with hypothesis, because attributes transformed with such function are not casted to generated AttrsClass, but remains just an list of attributes (here)
This causes error in hypothesis here, because fields is an list, not an AttrsClass instance, and therefore getattr(fields, name) raises an AttributeError.
Easy workaround for that is just to create an AttrsClass again inside field transformer, like so:
def transformer(cls: type, fields: list[attr.Attribute[Any]]) -> list[attr.Attribute[Any]]:
attr_names = [f.name for f in fields]
AttrsClass = _make_attr_tuple_class(cls.__name__, attr_names)
... do something with fields ...
return AttrsClass(fields)
...but it's not very handy nor pretty, and messes with typing. So, I would very thankful if it could be resolved within attrs (it would be quite easy, I guess).
BTW. I love your package, awesome job! Cheers!
Adding field transformer according to documentation (i.e. as a function of type
Callable[[type, list[attr.Attribute[Any]]], list[attr.Attribute[Any]]])breaks
attrsintegration with hypothesis, because attributes transformed with such function are not casted to generatedAttrsClass, but remains just an list of attributes (here)This causes error in hypothesis here, because
fieldsis an list, not anAttrsClassinstance, and thereforegetattr(fields, name)raises anAttributeError.Easy workaround for that is just to create an
AttrsClassagain inside field transformer, like so:...but it's not very handy nor pretty, and messes with typing. So, I would very thankful if it could be resolved within
attrs(it would be quite easy, I guess).BTW. I love your package, awesome job! Cheers!