Traitlets validates default even if overrided
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Beginne in traitlets.py bei HasTraits.setup_instance, instance_init und dem im Traceback gezeigten Aufruf von _validate. Reproduziere das Problem mit dem Foo-Beispiel sowohl mit Foo() als auch mit Foo(bar='test'), und untersuche anschließend die vorhandenen Tests zur Trait-Initialisierung. Als erledigt gilt die Änderung, wenn der angegebene Wert akzeptiert wird, ohne den nicht verwendeten ungültigen Standardwert zu validieren, während der Fall eines fehlenden Werts weiterhin den entsprechenden Fehler auslöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
To make a required trait, I thought I could use:
from traitlets import HasTraits, Unicode
class Foo(HasTraits):
bar = Unicode(default_value=None, allow_none=False, required=True)
As expected, this raises a trait error, if Foo is instantiated without arguments:
f = Foo()
But: this also raises, when bar is provided:
f = Foo(bar='test')
This error is raised:
TraitError Traceback (most recent call last)
<ipython-input-8-a25b82aa7a35> in <module>
----> 1 Foo(bar='test')
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in __new__(cls, *args, **kwargs)
956 else:
957 inst = new_meth(cls, *args, **kwargs)
--> 958 inst.setup_instance(*args, **kwargs)
959 return inst
960
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in setup_instance(self, *args, **kwargs)
984 self._trait_notifiers = {}
985 self._trait_validators = {}
--> 986 super(HasTraits, self).setup_instance(*args, **kwargs)
987
988 def __init__(self, *args, **kwargs):
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in setup_instance(self, *args, **kwargs)
975 else:
976 if isinstance(value, BaseDescriptor):
--> 977 value.instance_init(self)
978
979
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in instance_init(self, obj)
520 if (self._dynamic_default_callable(obj) is None) \
521 and (self.default_value is not Undefined):
--> 522 v = self._validate(obj, self.default_value)
523 if self.name is not None:
524 obj._trait_values[self.name] = v
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in _validate(self, obj, value)
589 return value
590 if hasattr(self, 'validate'):
--> 591 value = self.validate(obj, value)
592 if obj._cross_validation_lock is False:
593 value = self._cross_validate(obj, value)
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in validate(self, obj, value)
2052 msg = "Could not decode {!r} for unicode trait '{}' of {} instance."
2053 raise TraitError(msg.format(value, self.name, class_of(obj)))
-> 2054 self.error(obj, value)
2055
2056
/usr/lib/python3.8/site-packages/traitlets/traitlets.py in error(self, obj, value)
623 e = "The '%s' trait must be %s, but a value of %r was specified." \
624 % (self.name, self.info(), repr_type(value))
--> 625 raise TraitError(e)
626
627 def get_metadata(self, key, default=None):
TraitError: The 'bar' trait of a Foo instance must be a unicode string, but a value of None <class 'NoneType'> was specified.
- Vorherrschende Sprache
- Python
- Sterne
- 653
- Forks
- 221
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ipython/traitlets
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 65/100
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 65/100
-
Add Deprecation of Trait Declarations via Classes to Migration NotesEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offengood first issue
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 85/100
-
documentation
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 65/100
-
traitlets.Set should support generic type annotations for type safetyEvtl. vergeben @GruffElixir hat das vor 31 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
Alle Issues in ipython/traitlets
Ähnliche Issues
-
request-theme
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 70/100
LizardByte/ThemerrDB#8877 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/install-update comp/gateway P0 sweeper:risk-compatibility type/bug
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
NousResearch/hermes-agent#135997 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
deepset-ai/haystack#13199 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[BUG] JSONLoader rejects valid UTF-8 BOM filesEvtl. vergeben @zouyonghe hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
anthropics/knowledge-work-plugins#1298 ·
Maintainer antworten meist innerhalb von 1 Tag