enthought / enthought/traits

Regression: Dynamic defaults for dynamic Enums are now validated

Open
#1,434 4 comments 0 reactions 0 assignees View on GitHub
type: bug
Dominant language
Python
Stars
462
Forks
90
PR merge metrics
No merged PRs in 30d

Description

PR #1388 fixed validation for dynamic `Enum`s inside a container (e.g., a `List` or `Tuple`).

An unanticipated side-effect of that change is that dynamic defaults for dynamic `Enum`s are also now validated, where previously they weren't. (The same will be true for dynamic `Range` traits.) This broke some code in a Traits-using project.

Given the following code:

```python
from traits.api import Enum, HasStrictTraits, List

class HasDynamicEnumTrait(HasStrictTraits):
allowed_languages = List(["JavaScript", "PHP"])

selected_language = Enum(values="allowed_languages")

def _selected_language_default(self):
return "Python"

print(HasDynamicEnumTrait().selected_language)
```

Running this code under Traits 6.1.1 gives:
```
(traits) mdickinson@mirzakhani canopy_data % python ~/Desktop/bug.py
JavaScript
```

while running the code under Traits 6.2.0 gives:
```
(traits) mdickinson@mirzakhani canopy_data % python ~/Desktop/bug.py
Traceback (most recent call last):
File "/Users/mdickinson/Desktop/bug.py", line 13, in
print(HasDynamicEnumTrait().selected_language)
File "/Users/mdickinson/.venvs/traits/lib/python3.9/site-packages/traits/trait_types.py", line 2101, in _get
value = self.get_value(object, name, trait)
File "/Users/mdickinson/.venvs/traits/lib/python3.9/site-packages/traits/trait_type.py", line 323, in get_value
object.__dict__[cname] = value = trait.default_value_for(
File "/Users/mdickinson/.venvs/traits/lib/python3.9/site-packages/traits/trait_types.py", line 2119, in _validate
self.error(object, name, value)
File "/Users/mdickinson/.venvs/traits/lib/python3.9/site-packages/traits/base_trait_handler.py", line 74, in error
raise TraitError(
traits.trait_errors.TraitError: The 'selected_language' trait of a HasDynamicEnumTrait instance must be 'JavaScript' or 'PHP', but a value of 'Python' was specified.
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.