Skip to content

Commit

Permalink
session.merge
Browse files Browse the repository at this point in the history
  • Loading branch information
rienafairefr committed Jul 21, 2017
1 parent fd94323 commit ac81381
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 13 deletions.
19 changes: 7 additions & 12 deletions pynYNAB/ObjClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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)
Expand Down
6 changes: 5 additions & 1 deletion testscripts/test_merge.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)

0 comments on commit ac81381

Please sign in to comment.