Skip to content

Commit 3752b2e

Browse files
Updated stats returned by bulk_sync to reflect what actually happened given the flags rather than what would have happend if all flags are false.
1 parent d06725c commit 3752b2e

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

bulk_sync/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ def get_key(obj):
6161

6262
assert len(existing_objs) == len(new_models) - len(new_objs)
6363

64-
stats = {"created": len(new_objs), "updated": len(new_models) - len(new_objs), "deleted": len(obj_dict)}
64+
stats = {
65+
"created": 0 if skip_creates else len(new_objs),
66+
"updated": 0 if skip_updates else (len(new_models) - len(new_objs)),
67+
"deleted": 0 if skip_deletes else len(obj_dict)
68+
}
6569

6670
logger.debug(
6771
"{}: {} created, {} updated, {} deleted.".format(

tests/tests.py

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,9 +118,17 @@ def test_skip_deletes(self):
118118
# but Isaac should remain when the skip_deletes flag is True
119119
ret = bulk_sync(new_models=new_objs, filters=None, key_fields=("name",), skip_deletes=True)
120120

121-
self.assertEqual(2, Employee.objects.count())
122121
self.assertEqual(["Scott", "Isaac"], [x.name for x in Employee.objects.all().order_by('id')])
123122

123+
new_e1 = Employee.objects.get(id=e1.id)
124+
self.assertEqual(41, new_e1.age)
125+
126+
self.assertEqual(2, Employee.objects.count())
127+
128+
self.assertEqual(1, ret["stats"]["updated"])
129+
self.assertEqual(0, ret["stats"]["created"])
130+
self.assertEqual(0, ret["stats"]["deleted"])
131+
124132
def test_skip_creates(self):
125133
c1 = Company.objects.create(name="My Company LLC")
126134

@@ -137,15 +145,20 @@ def test_skip_creates(self):
137145
self.assertEqual(2, Employee.objects.count())
138146
self.assertEqual(["Scott", "Isaac"], [x.name for x in Employee.objects.all().order_by('id')])
139147

148+
self.assertEqual(0, ret["stats"]["updated"])
149+
self.assertEqual(0, ret["stats"]["created"])
150+
self.assertEqual(0, ret["stats"]["deleted"])
151+
140152
def test_skip_updates(self):
141153
c1 = Company.objects.create(name="My Company LLC")
142154

143155
e1 = Employee.objects.create(name="Scott", age=40, company=c1)
144156
e2 = Employee.objects.create(name="Isaac", age=9, company=c1)
145157

146-
# create a new employee that will be ignored
158+
# update employee that will be ignored, create a new one
147159
new_objs = [
148-
Employee(name="Scott", age=100, company=c1)
160+
Employee(name="Scott", age=100, company=c1),
161+
Employee(name="Alice", age=36, company=c1)
149162
]
150163

151164
ret = bulk_sync(new_models=new_objs, filters=None, key_fields=("name",), skip_updates=True)
@@ -154,6 +167,15 @@ def test_skip_updates(self):
154167
new_e1 = Employee.objects.get(id=e1.id)
155168
self.assertEqual(40, new_e1.age)
156169

170+
# Isaac is "stale" object - was deleted, Alice was created
171+
self.assertEqual(2, Employee.objects.count())
172+
self.assertEqual(["Scott", "Alice"], [x.name for x in Employee.objects.all().order_by('id')])
173+
174+
175+
self.assertEqual(0, ret["stats"]["updated"])
176+
self.assertEqual(1, ret["stats"]["created"])
177+
self.assertEqual(1, ret["stats"]["deleted"])
178+
157179

158180

159181
class BulkCompareTests(TestCase):

0 commit comments

Comments
 (0)