From ac81381c20eb8ab09f12d732fb2ca24adde4ca8d Mon Sep 17 00:00:00 2001 From: rienafairefr Date: Fri, 21 Jul 2017 11:54:01 +0200 Subject: [PATCH] session.merge --- pynYNAB/ObjClient.py | 19 +++++++------------ testscripts/test_merge.py | 6 +++++- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/pynYNAB/ObjClient.py b/pynYNAB/ObjClient.py index a06361e..3f5b495 100644 --- a/pynYNAB/ObjClient.py +++ b/pynYNAB/ObjClient.py @@ -36,6 +36,7 @@ def update_from_api_changed_entitydicts(self, changed_entitydicts, update_keys=N newlist = [] if changed_entitydicts[listfield_name] is not None: for entitydict in changed_entitydicts[listfield_name]: + entitydict['parent_id'] = self.obj.id newlist.append(self.obj.listfields[listfield_name].from_apidict(entitydict)) modified_entitydicts[listfield_name] = newlist for scalarfield_name in self.obj.scalarfields: @@ -46,25 +47,19 @@ def update_from_api_changed_entitydicts(self, changed_entitydicts, update_keys=N self.update_from_changed_entities(modified_entitydicts) def update_from_changed_entities(self, changed_entities): - to_add =[] for name in changed_entities: value = changed_entities[name] if not isinstance(value, list): continue for incoming_obj in value: - current_obj = self.session.query(self.obj.listfields[name]).get(incoming_obj.id) - if current_obj is not None: - if incoming_obj.is_tombstone: - self.session.delete(current_obj) - else: - self.session.merge(incoming_obj) + if incoming_obj.is_tombstone: + self.session.delete(incoming_obj) else: - if not incoming_obj.is_tombstone: - incoming_obj.parent = self.obj - to_add.append(incoming_obj) - self.session.add_all(to_add) + self.session.merge(incoming_obj) + attr = getattr(self.obj,name) + attr.dirty = True + self.session.commit() - pass def update_from_sync_data(self, sync_data, update_keys=None): self.update_from_api_changed_entitydicts(sync_data['changed_entities'],update_keys) diff --git a/testscripts/test_merge.py b/testscripts/test_merge.py index e2dabb7..c36c8bb 100644 --- a/testscripts/test_merge.py +++ b/testscripts/test_merge.py @@ -1,5 +1,7 @@ import unittest +from sqlalchemy import create_engine + from pynYNAB.ClientFactory import nYnabClientFactory from pynYNAB.schema import BudgetVersion from pynYNAB.schema import Transaction @@ -46,6 +48,8 @@ def dorequest(self, request_data, opname): connection = DummyConnection() connection.transactions=[Transaction(memo=str(i)) for i in range(500)] -client = nYnabClientFactory().create_client(connection=connection, budget_name='Test', sync=False) +#engine= create_engine('sqlite:///:memory:',echo=True) +engine= create_engine('sqlite:///:memory:') +client = nYnabClientFactory(engine=engine).create_client(connection=connection, budget_name='Test', sync=False) client.sync() assert (client.budget.be_transactions == connection.transactions)