def delete(self): """Delete a deposit.""" deposit_pid = self.pid pid_value = deposit_pid.pid_value record_pid = RecordUUIDProvider.get(pid_value).pid version_master = PIDNodeVersioning(child=record_pid) # every deposit has a parent version after the 2.1.0 upgrade # except deleted ones. We check the parent version in case of a delete # revert. assert version_master is not None, 'Unexpected deposit without versioning.' # if the record is unpublished hard delete it if record_pid.status == PIDStatus.RESERVED: version_master.remove_draft_child() db.session.delete(record_pid) # if the parent doesn't have any published records hard delete it if version_master.parent.status == PIDStatus.RESERVED: db.session.delete(version_master.parent) deposit_pid.delete() # delete all buckets linked to the deposit res = Bucket.query.join(RecordsBuckets).\ filter(RecordsBuckets.bucket_id == Bucket.id, RecordsBuckets.record_id == self.id).all() # remove the deposit from ES self.indexer.delete(self) # we call the super of Invenio deposit instead of B2Share deposit as # Invenio deposit doesn't support the deletion of published deposits super(InvenioDeposit, self).delete(force=True) for bucket in res: bucket.locked = False bucket.remove()
def test_versioning_remove_draft_child(db, version_pids, build_pid): """Test the remove_draft_child method of PIDNodeVersioning.""" parent_pid = build_pid(version_pids[0]['parent']) h1 = PIDNodeVersioning(parent_pid) h1.remove_draft_child() assert h1.draft_child is None