Releases: smarie/python-pyfields
0.6.0 - default factories and slots
default value factories
default_factory
callables now receive one argument: the object instance. Fixes #6- New decorator
@<field>.default_factory
to define a default value factory. Fixed #27 - New
copy_value
,copy_field
andcopy_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.
0.5.0 - First public version
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. ANativeField
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. ADescriptorField
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. Ifvalidate_type
provided, the descriptor will not be replaced with a native field, and the type will be checked on every value modification. ATypeError
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 onvalid8
. Validators can receive(val)
,(obj, val)
or(obj, field, val)
to support validation based on several fields. The only requirement is to returnTrue
orNone
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 injectfields
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.