4. Field Assignment
Call .set(value) on a class-level field reference to build a FieldAssignment. This captures the field name and new value without mutating an entity, so a repository can accept a list of partial changes.
Run from the repository root:
Source
"""Field.set(value) -> FieldAssignment[T].
Use FieldAssignment lists as partial-update payloads for repositories
or update endpoints.
"""
from typing import Any
from fastsprout.core.fields import Field
from fastsprout.core.fields.field_assigment import FieldAssignment
from fastsprout.core.schema import BaseSchema
class Hero(BaseSchema):
id: Field[int]
name: Field[str]
is_active: Field[bool]
def main() -> None:
# From a field bound to the entity class.
assignment = Hero.name.set("Spider")
assert isinstance(assignment, FieldAssignment)
assert assignment.name == "name"
assert assignment.value == "Spider"
# From a class attribute (Hero.is_active is a FieldRef, .set works too).
toggled = Hero.is_active.set(False)
assert toggled == FieldAssignment("is_active", False)
# Bundle changes for a hypothetical repo.update call.
changes: list[FieldAssignment[Any]] = [
Hero.name.set("Spider"),
Hero.is_active.set(False),
]
for change in changes:
print(change)
if __name__ == "__main__":
main()