Commit a60e1d6d authored by Duggan, John's avatar Duggan, John
Browse files

Merge branch '17-listen-to-deepdiff-type_changes-when-getting-updated-fields' into 'main'

Add type_changes listener to get_updated_fields

Closes #17

See merge request ndip/public-packages/nova-mvvm!15
parents 5865634a 18c27fed
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
[tool.poetry]
name = "nova-mvvm"
version = "0.7.0"
version = "0.7.1"
description = "A Python Package for Model-View-ViewModel pattern"
authors = ["Yakubov, Sergey <yakubovs@ornl.gov>"]
readme = "README.md"
+2 −0
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ def get_updated_fields(old: BaseModel, new: BaseModel) -> list[str]:
    if "values_changed" in diff:
        # DeepDiff adds .root to the root object, we don't need that
        updates = [k.removeprefix("root.") for k in diff["values_changed"].keys()]
    if "type_changes" in diff:
        updates += [k.removeprefix("root.") for k in diff["type_changes"].keys()]
    for item in ["iterable_item_added", "iterable_item_removed"]:
        # for added/removed items DeepDiff adds its index, we don't need that as well
        if item in diff:
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ class User(BaseModel):
    username: str = Field(
        default="default_user", min_length=2, title="User Name", description="hint", examples=["user"]
    )
    email: Optional[str] = Field(default=None, title="Email Address")
    age: int = Field(default=30, gt=20)
    ranges: List[Range] = Field(
        default_factory=lambda: [
+5 −0
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ test_cases: List[Dict[str, Any]] = [
        "input": {"field": "username", "value": "newname"},
        "result": {"value": "newname", "error": False},
    },
    {
        "test_name": "update email",
        "input": {"field": "email", "value": "test@test.com"},
        "result": {"value": "test@test.com", "error": False},
    },
    {
        "test_name": "empty username",
        "input": {"field": "username", "value": ""},