PropsBase nested serialization applies parent include/exclude filters to child fields
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
Rechercherichtung
Beginne in packages/reflex-base/src/reflex_base/components/props.py, insbesondere bei _convert_to_camel_case() und den rekursiven Aufrufen von PropsBase.dict(). Prüfe, wie include und exclude auf der Parent- und Child-Ebene angewendet werden, und führe anschließend gezielte Tests für die verschachtelte Reproduktion mit Child und Parent aus oder ergänze sie. Fertig ist es, wenn Parent-Filter die verschachtelte Eigenschaft auswählen oder ausschließen, während die Felder des Child intakt bleiben, sofern nicht ausdrücklich ein verschachtelter Filter angegeben wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
PropsBase.dict(include=...) and PropsBase.dict(exclude=...) apply the parent object's field filters unchanged when recursively serializing nested PropsBase values. As a result, selecting or excluding a parent field can incorrectly remove every field from the nested object.
Reproduction
from reflex_base.components.component import field
from reflex_base.components.props import PropsBase
class Child(PropsBase):
first_name: str = field()
age: int = field()
class Parent(PropsBase):
child: Child = field()
value = Parent(child=Child(first_name=A, age=1))
print(value.dict(include={child}))
Actual behavior
{child: {}}
The parent-level include={child} is passed into Child.dict(), where child is not a field, so all child fields are filtered out.
Expected behavior
{child: {firstName: A, age: 1}}
The parent filter should select the child property while nested serialization should retain the child's fields unless a nested filter is explicitly provided.
Relevant code
packages/reflex-base/src/reflex_base/components/props.py passes the same include and exclude sets into nested PropsBase.dict() calls in _convert_to_camel_case().
This also affects exclude, and can affect any component or integration that uses nested PropsBase values with selective serialization.
- Vorherrschende Sprache
- Python
- Sterne
- 29k
- Forks
- 1.8k
- Ø Merge
- 2 T. 22 Std.
- Gemergte PRs (30 T.)
- 143
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine 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 reflex-dev/reflex
-
Operations on a list[T] | None var throw when the value is NoneEvtl. vergeben @masenf hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
reflex-dev/reflex#7826 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
A dev run stopped before its backend loads leaves .web/nocompile, so the next run or export skips the compileEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
reflex-dev/reflex#7825 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
OTel: add trace_flags to JSON log records so unsampled trace ids are recognizableEvtl. vergeben @ShaanGS hat das vor 7 Tagen übernommen. Offenenhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
reflex-dev/reflex#7729 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
0.9.12 changelog follow-ups: the #7132 "_get_was_touched" entry describes unreachable behaviour, #7115's hasattr/getattr change is undocumented, #7131's wordingEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
reflex-dev/reflex#7260 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
ClientStateVar: a component that mounts while the value is non-default never re-renders on the push back to the defaultEvtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
reflex-dev/reflex#6823 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in reflex-dev/reflex
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_ai#6512 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/c++ area/core kind/bug-report
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
tensorflow/quantum#1140 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
Kav-K/GPTDiscord#501 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
UKGovernmentBEIS/inspect_evals#2863 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag