Skip to content

v0.4.0 - Links, Dictionary property, and more

Choose a tag to compare

@fwkoch fwkoch released this 21 Feb 05:26
· 233 commits to master since this release

Backwards-Incompatible Changes

  • Container properties no longer use an empty container as their _class_default; instead, the class default is properties.undefined, like all other built-in property types. This gives consistent behavior across all built-in property defaults. It also avoids unexpected problems with validation outlined in #169. (See #219)

    In order to update code from properties v0.3.5 to v0.4.0, you may simply add the appropriate default on each container property. For example:

    import properties
    assert properties.__version__ == '0.3.5'
    
    class MyClass(properties.HasProperties):
    
        my_list = properties.List(
            doc='List of strings',
            prop=properties.String(''),
        )

    behaves identically to

    import properties
    assert properties.__version__ == '0.4.0'
    
    class MyClass(properties.HasProperties):
    
        my_list = properties.List(
            doc='List of strings',
            prop=properties.String(''),
            default=list,
        )

Major New Features

  • New Dictionary property. (See #188, issue #165)
  • link and directional_link objects allow values for properties (and traits) across HasProperties (and HasTraits) instances to be linked. The API for links mimics that from traitlets: http://traitlets.readthedocs.io/en/stable/utils.html#links. (See #155)
  • properties.Bool has been renamed properties.Boolean to normalize naming conventions across the library (e.g. the integer property is properties.Integer, not property.Int). (See #209)

Minor Changes

  • Properties may now be private (i.e. names may begin with underscore). (See #194, issue #191)
  • Container properties may now leave prop unspecified for untyped contents. (See #188)
  • Array properties:
    • shape may now be unspecified (if set to None) or have multiple valid values (if set to a set of valid shapes). Vector array properties may also specify specific shapes, as long as the second dimension is correct. (See #195, issue #192)
    • complex is now a valid dtype. (See #215, issue #208)
  • Dynamic properties:
    • May be serialized with a HasProperties instance by specifying save_dynamic=True. (See #202)
    • No longer raise an error if they evaluate to None/undefined. (See #187, issue #173)
  • Renamed properties now have an option to not raise a warning. (See #203, issue #201)
  • stop_recursion_with util function has been deprecated. (See #204, issue #168)
  • Docstring improvements:
    • __IPYTHON__ interrogation to determine sphinx or plain text formatting. (See #156)
    • Better wording on limited-size container properties. (See #185, issue #178)
    • Custom docs for renamed properties. (See #207)

Bug Fixes

  • For container properties, when an instance of a subclass of the base container type are assigned to a property, their class is now maintained (e.g. OrderedDict is no longer coerced to standard dict on validate). (See #221)
  • default value validation no longer fails due to the order which property attributes are set. (See #186, issue #177)
  • properties.copy now maintains classes of the original. (See #184, issue #175)
  • Union properties with required=False no longer fail validation when unset. (See #199, issue #198)
  • Deserialization from dictionary that includes a renamed property no longer fails. (See #217)
  • Conflicts can no longer arise from setting dynamic properties on init. (See #187, issue #173)
  • Metaclass setup no longer fails if __setattr__ is overridden. (See #158)
  • Sphinx linking for custom property classes now works. (See #156, issue #153)