Skip to content

Commit 35f6f15

Browse files
[SDBELGA-1059] - Support deletes during init for items marked for deletion (#3178)
* Support tombstone deletes during init * Fix tombstone deletes in init data
1 parent 9960ed6 commit 35f6f15

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

apps/prepopulate/app_initialize.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,29 @@ def import_file(self, entity_name, path, file_name, index_params, do_patch=False
353353
service = superdesk.get_resource_service(entity_name)
354354
json_data = json.loads(app_prepopulation.read())
355355
data = [fillEnvironmentVariables(item) for item in json_data]
356-
data = [app.data.mongo._mongotize(item, service.datasource) for item in data if item]
357-
existing_data = []
356+
deleted_ids = [item["_id"] for item in data if item and item.get("_deleted") and item.get("_id")]
357+
data = [item for item in data if item and not item.get("_deleted")]
358+
data = [app.data.mongo._mongotize(item, service.datasource) for item in data]
359+
360+
if deleted_ids:
361+
delete_lookup = {"_id": {"$in": deleted_ids}}
362+
delete_lookup = app.data.mongo._mongotize(delete_lookup, service.datasource)
363+
deleted_result = service.delete(delete_lookup)
364+
deleted_id_set = set()
365+
for item in deleted_result or []:
366+
if isinstance(item, dict) and "_id" in item:
367+
deleted_id_set.add(str(item["_id"]))
368+
else:
369+
deleted_id_set.add(str(item))
370+
371+
for deleted_id in deleted_ids:
372+
if str(deleted_id) in deleted_id_set:
373+
logger.info(" - deleted tombstone record: %s", deleted_id)
374+
else:
375+
logger.info(" - record marked for deletion already missing: %s", deleted_id)
376+
358377
existing = service.get_from_mongo(None, {})
378+
existing_data = []
359379
update_data = True
360380
if not do_patch and existing.count() > 0:
361381
logger.info(" - data already exists none will be loaded")

tests/prepopulate/app_initialization_test.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,25 @@ def test_init_keeps_user_modifications(self):
101101
self.assertEqual("Urgency", urgency["display_name"])
102102
self.assertEqual("init", urgency["_etag"])
103103

104+
def test_init_deletes_tombstone_records(self):
105+
self._run(["vocabularies"])
106+
urgency = self.app.data.find_one("vocabularies", req=None, _id="urgency")
107+
self.assertIsNotNone(urgency)
108+
109+
init_dir = tempfile.mkdtemp("init", "test")
110+
self.app.config.update({"INIT_DATA_PATH": init_dir})
111+
self.addCleanup(self.app.config.pop, "INIT_DATA_PATH", None)
112+
self.addCleanup(shutil.rmtree, init_dir)
113+
114+
with open(os.path.join(init_dir, "vocabularies.json"), "w") as f:
115+
f.write(json.dumps([{"_id": "urgency", "_deleted": True}]))
116+
f.flush()
117+
118+
self._run(["vocabularies"])
119+
120+
urgency = self.app.data.find_one("vocabularies", req=None, _id="urgency")
121+
self.assertIsNone(urgency)
122+
104123
def test_init_can_combine_files_from_folders(self):
105124
init_dir = tempfile.mkdtemp("init", "test")
106125
self.app.config.update({"INIT_DATA_PATH": init_dir})

0 commit comments

Comments
 (0)