Skip to content

Releases: smarie/python-pyfields

0.6.0 - default factories and slots

04 Oct 16:37
Compare
Choose a tag to compare

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 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.

0.5.0 - First public version

03 Oct 16:00
Compare
Choose a tag to compare

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.