def remove_bucket(self, force=False): """Remove the bucket.""" if self.bucket: bucket = self.bucket self.unset_bucket() # TODO: not sure this makes sense??? if force: bucket.remove() else: Bucket.delete(bucket.id)
def post_delete(self, record, force=False): """Called after a record is deleted.""" if self._delete: files = getattr(record, self.attr_name) if files is not None: if record.bucket: bucket = record.bucket if force: record.bucket = None record.bucket_id = None bucket.remove() else: Bucket.delete(bucket.id)
def delete_record(pid, record): """Delete a published record.""" # Fetch deposit id from record and resolve deposit record and pid. depid = b2share_deposit_uuid_fetcher(None, record) if not depid: abort(404) depid, deposit = Resolver( pid_type=depid.pid_type, object_type='rec', # Retrieve the deposit with the Record class on purpose as the current # Deposit api prevents the deletion of published deposits. getter=Record.get_record, ).resolve(depid.pid_value) # Note: the record is unindexed from Elasticsearch via the # signal handlers in triggers.py try: RecordIndexer().delete(deposit) except NotFoundError: pass # Mark connected buckets as DELETED record_bucket = record.files.bucket deposit_bucket = deposit.files.bucket Bucket.delete(deposit_bucket.id) Bucket.delete(record_bucket.id) # mark all PIDs as DELETED all_pids = PersistentIdentifier.query.filter( PersistentIdentifier.object_type == pid.object_type, PersistentIdentifier.object_uuid == pid.object_uuid, ).all() for rec_pid in all_pids: if not rec_pid.is_deleted(): rec_pid.delete() depid.delete() # Mark the record and deposit as deleted record.delete() deposit.delete()