Releases: enthought/traits
Traits 6.0.0
This is the final release for Traits 6.0.0. There were no changes (apart from the version number change) between the 6.0.0rc0 release candidate and the final release. See the 6.0.0rc0 release notes for the full list of changes since 5.2.0.
About Traits 6.0
Traits 6.0 is a major update to the Traits package, with a number of
backward incompatible changes from its predecessor. Notable changes:
- Python 2.7 is no longer supported; Traits 6.0 requires Python 3.5 or later.
- Trait types related to Python 2 (for example
Unicode
andLong
) have
been deprecated in favour of their Python 3 equivalents (for exampleStr
andInt
). - Many little-used historical features of Traits have been deprecated, and
are scheduled for removal in Traits 7.0. - Some historical features of Traits that had no evidence of external usage
were removed in Traits 6.0. - Introspection of
CTrait
andHasTraits
objects is greatly improved.
All of the internal state that was previously hidden within the C extension
is now accessible from Python. - The Traits codebase has undergone some significant reorganizations,
reformattings and style cleanups to make it easier to work with, and
to improve the separation between Traits and TraitsUI. - This release was focused mainly on cleanup and bugfixing. Nevertheless,
it contains a sprinkling of new features. There's a newDatetime
trait type. TheEnum
trait type now supports Python enumerations.
TheFile
trait type supports path-like objects.
More than 150 PRs went into this release. The following people contributed
code changes for this release:
- Kit Yan Choi
- Mark Dickinson
- Kevin Duff
- Robert Kern
- Midhun Madhusoodanan
- Shoeb Mohammed
- Sai Rahul Poruri
- Corran Webster
- John Wiggins
First release candidate for Traits 6.0.0
Release notes
Traits 6.0 is a major update to the Traits package, with a number of
backward incompatible changes from its predecessor. Notable changes:
- Python 2.7 is no longer supported; Traits 6.0 requires Python 3.5 or later.
- Trait types related to Python 2 (for example
Unicode
andLong
) have
been deprecated in favour of their Python 3 equivalents (for exampleStr
andInt
). - Many little-used historical features of Traits have been deprecated, and
are scheduled for removal in Traits 7.0. - Some historical features of Traits that had no evidence of external usage
were removed in Traits 6.0. - Introspection of
CTrait
andHasTraits
objects is greatly improved.
All of the internal state that was previously hidden within the C extension
is now accessible from Python. - The Traits codebase has undergone some significant reorganizations,
reformattings and style cleanups to make it easier to work with, and
to improve the separation between Traits and TraitsUI. - This release was focused mainly on cleanup and bugfixing. Nevertheless,
it contains a sprinkling of new features. There's a newDatetime
trait type. TheEnum
trait type now supports Python enumerations.
TheFile
trait type supports path-like objects.
More than 150 PRs went into this release. The following people contributed
code changes for this release:
- Kit Yan Choi
- Mark Dickinson
- Kevin Duff
- Robert Kern
- Midhun Madhusoodanan
- Shoeb Mohammed
- Sai Rahul Poruri
- Corran Webster
- John Wiggins
Porting guide
For the most part, existing code that works with Traits 5.2.0 should
continue to work with Traits 6.0.0 without changes. However, there
are some potentially breaking changes in Traits 6.0.0, and we recommend
applying caution when upgrading.
Here's a guide to dealing with some of the potentially breaking changes.
-
The
Unicode
andCUnicode
trait types are now simply synonyms for
Str
andCStr
.Unicode
andCUnicode
are considered deprecated.
For now, no deprecation warning is issued on use of these deprecated trait
types, but in Traits 6.1.0 and later, warnings may be issued, and in Traits
7.0.0 these trait types may be removed. It's recommended that users update
all uses ofUnicode
toStr
andCUnicode
toCStr
to avoid
warnings or errors in the future. -
Similarly,
Long
andCLong
are now synonyms forInt
andCInt
.
The same recommendations apply as for theUnicode
/Str
trait types. -
Uses of
NO_COMPARE
,OBJECT_IDENTITY_COMPARE
andRICH_COMPARE
should be replaced with the appropriateComparisonMode
enumeration
members. -
The validation for a
Instance(ISomeInterface)
trait type has changed,
whereISomeInterface
is a subclass ofInterface
. Previously, an
assignment to such a trait validated the type of the assigned value against
the interface, method by method. Now anisinstance
check is performed
against the interface instead. Make sure that classes implementing a given
interface have the appropriateprovides
decorator.One notable side-effect of the above change is that plain
mock.Mock
instances can no longer be assigned toInstance(ISomeInterface)
traits.
To get around this, usespec=ISomeInterface
when creating your mock
object.This change does not affect
Instance
traits for non-interface classes. -
The format of
TraitListEvents
has changed: for list events generated from
a slice set or slice delete operation where that slice had a step other
than1
, theadded
andremoved
fields of the event had an extra
level of list wrapping (for example,added
might be[[1, 2, 3]]
instead of[1, 2, 3]
). In Traits 6.0, this extra wrapping has been
removed. There may be existing code that special-cased the extra wrapping. -
Many classes and functions have moved around within the Traits codebase.
If you have code that imports directly from Traits modules and subpackages
instead of fromtraits.api
or the other subpackageapi
modules, some
of those imports may fail. To avoid potential forImportError
s, you
should import fromtraits.api
whenever possible. If you find yourself
needing some piece of Traits functionality that isn't exposed in
traits.api
, and you think it should be, please open an issue on the
Traits bug tracker.
Features
-
Support Python Enums as value sets for the
Enum
trait. (#685, #828, #855) -
Add
Subclass
alias for theType
trait type. (#739) -
Add path-like support for the
File
trait. (#736) -
Add new
ComparisonMode
enumeration type to replace the old
NO_COMPARE
,OBJECT_IDENTITY_COMPARE
andRICH_COMPARE
constants. The old constants are deprecated. (#830, #719, #680) -
Add fast validation for
Callable
trait type; introduce
newBaseCallable
trait type for subclassing purposes.
(#798, #795, #767) -
Add
CTrait.comparison_mode
property to allow inspection and
modification of a trait's comparison mode. (#758, #735) -
Add
as_ctrait
converter function totraits.api
. This function
converts a trait-like object or type to aCTrait
, raisingTypeError
for objects that can't be interpreted as aCTrait
. It's intended
for use by users who want to create their own parameterised trait
types.The
as_ctrait
feature comes with, and relies upon, a new informal
interface: objects that can be converted to something of typeCTrait
can
provide an zero-argumentas_ctrait
method that returns a newCTrait
.
Types can provide aninstantiate_and_get_ctrait
method, which when
called with no arguments provides a newCTrait
for that type.
(#783, #794) -
Add a new
HasTraits._class_traits
method for introspection of an
object's class traits. This parallels the existing
HasTraits._instance_traits
method. This method is intended for use in
debugging. It's not recommended for users to modify the returned dictionary.
(#702) -
Add
CTrait.set_default_value
method for setting information about the
default of aCTrait
. This provides an alternative to the previous method
of usingCTrait.default_value
. The use ofCTrait.default_value
to set
(rather than get) default information is deprecated. (#620) -
Add new methods
HasTraits._trait_notifications_enabled
,
HasTraits._trait_notifications_vetoed
to allow introspection of the
notifications states set by the existing methods
HasTraits._trait_change_notify
andHasTraits._trait_veto_notify
.
(#704) -
Add
TraitKind
,ValidateTrait
andDefaultValue
Python enumeration
types to replace previous uses of magic integers within the Traits codebase.
(#680, #857) -
The various
CTrait
internal flags are now exposed to Python as
properties:CTrait.is_property
(read-only),CTrait.modify_delegate
,
CTrait.setattr_original_value
,CTrait.post_setattr_original_value
,
CTrait.is_mapped
, andCTrait.comparison_mode
. (#666, #693)
Changes
- When pickling a
CTrait
, thepy_post_setattr
andpy_validate
fields are pickled directly. Previously, callables for those fields were
replaced with a-1
sentinel on pickling. (#780) - A
TraitListEvent
is no longer emitted for a slice deletion which
doesn't change the contents of the list. (For example,del obj.mylist[2:]
on a list that only has 2 elements.) (#740) - The
added
andremoved
attributes on aTraitListEvent
are now
always lists containing the added or removed elements. Previously, those
lists were nested inside another list in some cases. (#771) - Change
Instance(ISomeInterface)
to use anisinstance
check on
trait set instead of using the dynamic interface checker. (#630) - Create an new
AbstractViewElement
abstract base class, and register
the TraitsUIViewElement
as implementing it. This paves the way for
removal of Traits UI imports from Traits. (#617) ViewElements
are now computed lazily, instead of atHasTraits
subclass creation time. This removes atraitsui
import from
thetrait.has_traits
module. (#614)- The
traits.util.clean_filename
utility now uses a different algorithm,
and should do a better job with accented and Unicode text. (#589) - Floating-point and integer checks are now more consistent between classes.
In particular,BaseInt
validation now matchesInt
validation, and
Range
type checks now match those used inInt
andFloat
. (#588) - An exception other than
TraitError
raised during validation of a
compound trait will now be propagated. Previously, that exception would
be swallowed. (#581) - Traits no longer has a runtime dependency on the
six
package. (#638) - Use pickle protocol 3 instead of pickle protocol 1 when writing pickled
object state to a file inconfigure_traits
. (#796) - In
traits.testing.optional_dependencies
, make suretraitsui.api
is
available whenevertraitsui
is. (#616) TraitInstance
now inherits directly fromTraitHandler
instead of
(the now removed)ThisClass
. (#761)
Fixes
- Fix a use of the unsupported
ValidateTrait.int_range
. (#805) - Remove unnecessary
copy
method override fromTraitSetObject
. (#759) - Fix
TraitListObject.clear
to issue the appropriate items event. (#732) - Fix confusing error message when
[None]
passed into
List(This(allow_none=False))
. (#734) - Fix name-mangling of double-underscore private methods in classes whose
name begins with an underscore. (#724) - Fix
bytes_editor
and ``passw...
Traits version 5.2.0
This is a minor feature release, with various small updates and bugfixes.
The most notable user-facing changes are the deprecation of the Category
class, which is scheduled for removal in Traits 6.0.0, and the removal of the Class
, ListClass
and ListInstance
Trait types, which relate to old-style Python 2 classes.
Summary of changes since the 5.1.2 release:
Enhancements
- Support installation from source archives. (#528)
Fixes
- Ensure
TraitListEvent.index
is always an integer. (#548) - Update the deprecated
collections.MutableMapping
import. (#530) - Fix inadvertent modification of the
Category
base class. (#509) - Rework version handling in
setup.py
. (#515) - Don't autogenerate documentation for
ViewElement
. (#559) - Ensure that all tests are
unittest
compatible. (#551)
Changes
- Replace occurences of deprecated
AdaptsTo
withSupports
. (#532) - Remove
Class
trait. (#520) - Deprecate
Category
trait. (#510) - Fix typos in docstrings. (#502)
- Use decorator form of
classmethod
. (#500) - Remove redefinition of
NullHandler
. (#518) - Add an import check helper. (#521)
- Clean up Cython tests. (#555)
- Clean up test output. (#553)
Miscellaneous
- Update EDM version on CI to version 2.0.0. (#560)
- Don't finish fast on CI. (#556)
- Use
unittest
to run tests in CI. (#552) - Low-level fixes and style cleanup in
etstool.py
. (#550) - Add
--editable
option forinstall
,update
CI commands. (#546) - Make git commit hash available to archives. (#526)
- Fix use of non-edm envs as bootstrap envs on Windows. (#512)
- Remove edm installed package before installing from source. (#516)
- Add help text to click options. (#514)
- Various cleanups, fixes and enhancements in
etstool.py
. (#511)
Traits version 5.1.2
This is a bugfix release that fixes an issue with the traits-documenter Sphinx extension. This issue produced invalid reST from Traits with multiline definitions, and could prevent PDF documentation builds from completing successfully.
Fixes
- Traits documenter no longer generates bad reST for traits whose definition
spans multiple source lines. (#494)
Traits version 5.1.1
This is a bugfix release, fixing a regression in Traits 5.1.0 that prevented Traits UI applications working correctly on Python 2.7. (The bug does not affect Python 3.)
Released: 2019-04-18
Fixes
Traits version 5.1.0
Summary
This release reverts a feature introduced into the 5.0.0 release, namely pickleability and deep copying of dynamically added traits (traits added via the add_trait
method). That feature unfortunately introduced some unexpected breakage, so has had to be reverted for the time being.
The release also includes various other minor features and fixes.
Enhancements
- Make UUID trait initializable. (#459)
- Change default
FileEditor
behavior for aFile
trait based on
whetherexists=True
is specified for that trait. (#451, #467)
Changes
- The changes made in #373 to make dynamically-added traits pickleable have
been reverted. (#462) traits.api.python_version
has been removed. Internals have been
refactored to usesix.PY2
in preference tosys.version_info
.
(#449)- Don't depend on the 3rd party
mock
library on Python 3; use
unittest.mock
instead. (#446)
Fixes
- Fix a fragile NumPy-related test that failed (
RuntimeError: empty_like method already has a docstring
) with the newest version of NumPy.
(#443)
Miscellaneous
traits._version.git_revision
now gives the full commit hash (for local
builds) instead of an abbreviated 7 hex-digit version. (#453)- Fix copyright years in documentation build. (#445)
- Rename
README.txt
toREADME.rst
, so that GitHub renders it nicely. - Code cleanups: remove "EOF" markers from code. Remove
__main__
blocks
for unit tests. Remove imports ofunittest
fromunittest_tools
.
(#448, #446) - Update Travis CI and Appveyor configurations to run tests against
all PR branches, not just PRs against master. (#466)
5.0.0 release of Traits
This major release accumulates more than an year's worth of improvements,
changes and bug fixes to the code base.
A few highlights of this release are :
- Removal of 2to3 fixers and the use of six to provide Python 2/3 compatibility
- Removal of deprecated
traits.protocols
submodule and related utils. - New
HasRequiredTraits
class - Better IPython tab completion for
HasTraits
subclasses
See the changelog for the complete list of changes included in this release.
Traits 4.6.0
This is an incremental release over 4.5, accumulating over a year's worth of
bugfixes and small improvements to the code.
Highlights of this release include:
- support for Python 3.4 and 3.5.
- new Bytes and ValidatedTuple traits.
- a new ArrayOrNone trait which correctly handles None comparisons with Numpy
arrays. - clean-up of the ETSConfig code for TraitsUI toolkit selection.
- better compatibility with NumPy scalar types.
- many other bugfixes and improvements.