Define fields in python classes. Easily.
BSD-3-CLAUSE License
Bot releases are hidden (Show)
Published by smarie about 5 years ago
Fixed fields initialization order in generated constructor methods:
See documentation page for details.
Published by smarie about 5 years ago
Read-only fields
field(read_only=True)
. Fixes #33.Misc
FieldError
, for easier exception handling.ValueError
when a descriptor field is used with an old-style class in python 2. Fixes #34
See documentation page for details.
Published by smarie about 5 years ago
Converter.create_from_fun()
does not generate a new type
everytime a converter needs to be created from a callable - now a single class ConverterWithFuncs
is used. Fixed #32.See documentation page for details.
Published by smarie about 5 years ago
converters
field(converters=...)
. Fixes #5
trace_convert
to debug conversion issues. It is available both as an independent function and as a method on Field
. Fixes #31
@<field>.converter
to add a converter to a field. Fixed #28.misc
Field
class is now exposed at package level.See documentation page for details.
Published by smarie about 5 years ago
PEP484 type hints support
typing
module (PEP484) are correctly checked using whatever 3d party type checking library is available (typeguard
is first looked for, then pytypes
as a fallback). If none of these providers are available, a fallback implementation is provided, basically flattening Union
s and replacing TypeVar
s before doing is_instance
. It is not guaranteed to support all typing
subtelties. Fixes #7
See documentation page for details.
Published by smarie about 5 years ago
validators
@<field>.validator
to add a validator to a field. Fixed #9.See documentation page for details.
Published by smarie about 5 years ago
default value factories
default_factory
callables now receive one argument: the object instance. Fixes #6
@<field>.default_factory
to define a default value factory. Fixed #27
copy_value
, copy_field
and copy_attr
helper functions to create default value factories. Fixed #26
support for slots
field
now automatically detects when a native field is attached to a class with slots and no __dict__
is present. In that case, the native field is replaced with a descriptor field. Fixed #20.See documentation page for details.
Published by smarie about 5 years ago
fields
field()
method to easily define class fields without necessarily defining a __init__
.
"native" fields are created by default, or if native=True
is set. A NativeField
is a non-data descriptor that replaces itself automatically with a native python attribute after the first read, to get the same performance level on later access.
"descriptor" fields are created when type or value validation is required, or if native=False
is set. A DescriptorField
uses the standard python descriptor protocol so that type and value can be validated on all future access without messing with the __setattr__
method.
support for type_hint
declaration to declare the type of a field. If validate_type
provided, the descriptor will not be replaced with a native field, and the type will be checked on every value modification. A TypeError
will be raised if type does not comply. Type hints are correctly defined so that IDEs can pick them. Fixes #10
support for validators
relying on valid8
. Validators can receive (val)
, (obj, val)
or (obj, field, val)
to support validation based on several fields. The only requirement is to return True
or None
in case of success. Fixes #3
init
make_init
method to create an entire __init__
method with control of which fields are injected, and with possibility to blend a post-init callback in. Fixes #14.
@init_fields
decorator to auto-init fields before your __init__
method.
@inject_fields
decorator to easily inject fields
in an init method and perform the assignment precisely when users want (for easy debugging). Fixes #13
misc
__weakref__
added in all relevant classes. Fixes #21
Now using stubs #17
Fixed bug #11.
Fixed ValueError
with mini-lambda < 2.2. Fixed #22
Because of a limitation in PyCharm type hints we had to remove support for class-level field access. This created #12 which will be fixed as soon as PyCharm issue is fixed.
See documentation page for details.