Skip to content

Commit 464610e

Browse files
committed
Remove redundant 2 step approach to updating new objects.
1 parent 9b6a91f commit 464610e

File tree

1 file changed

+20
-32
lines changed

1 file changed

+20
-32
lines changed

gel/_internal/_save.py

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1628,20 +1628,31 @@ def _commit(self) -> None:
16281628
for obj, new_id in self.new_object_ids.items():
16291629
assert new_id is not None
16301630

1631-
if self.refetch:
1632-
updated = self.new_objects[new_id]
1633-
pydantic_set_fields = obj.__pydantic_fields_set__
1634-
for field in updated.__dict__:
1635-
if field == "id":
1636-
continue
1637-
obj.__dict__[field] = updated.__dict__[field]
1638-
pydantic_set_fields.add(field)
1639-
16401631
obj.__gel_commit__(new_id=new_id)
16411632

16421633
if self.refetch:
16431634
self._apply_refetched_data()
16441635

1636+
for obj, new_id in self.new_object_ids.items():
1637+
assert new_id is not None
1638+
1639+
updated = self.new_objects[new_id]
1640+
pydantic_set_fields = obj.__pydantic_fields_set__
1641+
1642+
for prop in get_pointers(type(obj)):
1643+
if (
1644+
# id is already set and should never change.
1645+
prop.name == "id"
1646+
# prop not refetched
1647+
or prop.name not in updated.__dict__
1648+
# TODO: Refetching links for new objects
1649+
or prop.kind == PointerKind.Link
1650+
):
1651+
continue
1652+
1653+
obj.__dict__[prop.name] = updated.__dict__[prop.name]
1654+
pydantic_set_fields.add(prop.name)
1655+
16451656
self._commit_recursive()
16461657

16471658
def _commit_recursive(self) -> None:
@@ -1710,29 +1721,6 @@ def _traverse(obj: GelModel) -> None:
17101721
# see the above comment.
17111722
multi_prop_commit_recursive(linked)
17121723

1713-
if (
1714-
self.refetch
1715-
and obj in self.new_object_ids
1716-
and (new_obj_id := self.new_object_ids.get(obj))
1717-
):
1718-
new_obj = self.new_objects.get(new_obj_id)
1719-
1720-
# Update new objects with refetched data
1721-
for prop in get_pointers(type(obj)):
1722-
if (
1723-
# prop not refetched
1724-
prop.name not in new_obj.__dict__
1725-
# TODO: Refetching links for new objects
1726-
or prop.kind == PointerKind.Link
1727-
):
1728-
continue
1729-
1730-
obj.__dict__[prop.name] = new_obj.__dict__[prop.name]
1731-
1732-
if prop.computed:
1733-
# Computed props may not have been "set" yet
1734-
obj.__pydantic_fields_set__.add(prop.name)
1735-
17361724
for o in self.objs:
17371725
_traverse(o)
17381726

0 commit comments

Comments
 (0)