- Fix an issue with
GenConverter
unstructuringattrs
classes and dataclasses with generic fields. (#65) GenConverter
has support for easy overriding of collection unstructuring types (for example, unstructure all sets to lists) through itsunstruct_collection_overrides
argument. (#137)
- Fix an issue with
GenConverter
un/structuring hooks when a function hook is registered after the converter has already been used. - Add support for
collections.abc.{Sequence, MutableSequence, Set, MutableSet}
. These should be used on 3.9+ instead of theirtyping
alternatives, which are deprecated. (#128) - The
GenConverter
will unstructure iterables (list[T]
,tuple[T, ...]
,set[T]
) using their type argument instead of the runtime class if its elements, if possible. These unstructuring operations are up to 40% faster. (#129) - Flesh out
Converter
andGenConverter
initializer type annotations. (#131) - Add support for
typing.Annotated
on Python 3.9+.cattrs
will use the first annotation present.cattrs
specific annotations may be added in the future. (#127) - Add support for dataclasses. (#43)
cattrs
now has a benchmark suite to help make and keep cattrs the fastest it can be. The instructions on using it can be found under the Benchmarking <https://cattrs.readthedocs.io/en/latest/benchmarking.html> section in the docs. (#123)- Fix an issue unstructuring tuples of non-primitives. (#125)
cattrs
now callsattr.resolve_types
onattrs
classes when registering un/structuring hooks.GenConverter
structuring and unstructuring ofattrs
classes is significantly faster.
converter.unstructure
now supports an optional parameter, unstructure_as, which can be used to unstructure something as a different type. Useful for unions.- Improve support for union un/structuring hooks. Flesh out docs for advanced union handling. (#115)
- Fix GenConverter behavior with inheritance hierarchies of attrs classes. (#117) (#116)
- Refactor GenConverter.un/structure_attrs_fromdict into GenConverter.gen_un/structure_attrs_fromdict to allow calling back to Converter.un/structure_attrs_fromdict without sideeffects. (#118)
- The default disambiguator will not consider non-required fields any more. (#108)
- Fix a couple type annotations. (#107) (#105)
- Fix a GenConverter unstructuring issue and tests.
- Add metadata for supported Python versions. (#103)
- Python 2, 3.5 and 3.6 support removal. If you need it, use a version below 1.1.0.
- Python 3.9 support, including support for built-in generic types (
list[int]
vstyping.List[int]
). cattrs
now includes functions to generate specialized structuring and unstructuring hooks. Specialized hooks are faster and support overrides (omit_if_default
andrename
). See thecattr.gen
module.cattrs
now includes a converter variant,cattr.GenConverter
, that automatically generates specialized hooks for attrs classes. This converter will become the default in the future.- Generating specialized structuring hooks now invokes attr.resolve_types on a class if the class makes use of the new PEP 563 annotations.
cattrs
now depends onattrs
>= 20.1.0, because ofattr.resolve_types
.- Specialized hooks now support generic classes. The default converter will generate and use a specialized hook upon encountering a generic class.
attrs
classes with private attributes can now be structured by default.- Structuring from dictionaries is now more lenient: extra keys are ignored.
cattrs
has improved type annotations for use with Mypy.- Unstructuring sets and frozensets now works properly.
- Python 3.8 support.
- Python 3.7 support.
- The disambiguation function generator now supports unions of
attrs
classes and NoneType.
- Distribution fix.
Removed the undocumented
Converter.unstruct_strat
property setter.- Removed the ability to set the
Converter.structure_attrs
instance field.As an alternative, create a newConverter
::.. code-block:: python>>> converter = cattr.Converter(unstruct_strat=cattr.UnstructureStrategy.AS_TUPLE) Some micro-optimizations were applied; a
structure(unstructure(obj))
roundtrip is now up to 2 times faster.
- Packaging fixes. (#17)
structure/unstructure now supports using functions as well as classes for deciding the appropriate function.
added Converter.register_structure_hook_func, to register a function instead of a class for determining handler func.
added Converter.register_unstructure_hook_func, to register a function instead of a class for determining handler func.
vendored typing is no longer needed, nor provided.
Attributes with default values can now be structured if they are missing in the input. (#15)
- Optional attributes can no longer be structured if they are missing in the input.In other words, this no longer works:.. code-block:: python@attr.sclass A:a: Optional[int] = attr.ib()>>> cattr.structure({}, A)
cattr.typed
removed since the functionality is now present inattrs
itself. Replace instances ofcattr.typed(type)
withattr.ib(type=type)
.
- Converter.loads is now Converter.structure, and Converter.dumps is now Converter.unstructure.
- Python 2.7 is supported.
- Moved
cattr.typing
tocattr.vendor.typing
to support different vendored versions of typing.py for Python 2 and Python 3. - Type metadata can be added to
attrs
classes usingcattr.typed
.
- Python 3.4 is no longer supported.
- Introduced
cattr.typing
for use with Python versions 3.5.2 and 3.6.0. - Minor changes to work with newer versions of
typing
.- Bare Optionals are not supported any more (use
Optional[Any]
).
- Bare Optionals are not supported any more (use
- Attempting to load unrecognized classes will result in a ValueError, and a helpful message to register a loads hook.
- Loading
attrs
classes is now documented. - The global converter is now documented.
cattr.loads_attrs_fromtuple
andcattr.loads_attrs_fromdict
are now exposed.
- Tests and documentation.
- First release on PyPI.