diff --git a/dataservice/api/study/resources.py b/dataservice/api/study/resources.py index e9312e84c..2eee5d447 100644 --- a/dataservice/api/study/resources.py +++ b/dataservice/api/study/resources.py @@ -133,23 +133,36 @@ def delete(self, kf_id): if st is None: abort(404, 'could not find {} `{}`'.format('study', kf_id)) - db.session.delete(st) + # -- Delete genomic_files from indexd -- + from dataservice.api.participant.models import Participant + from dataservice.api.biospecimen.models import Biospecimen + from dataservice.api.genomic_file.models import GenomicFile + from dataservice.api.common.model import delete_indexd + # GenomicFiles for this study + gfs = (GenomicFile.query.join(GenomicFile.biospecimen) + .join(Biospecimen.participant) + .filter(Participant.study_id == kf_id)).all() + # Delete from indexd + [delete_indexd(None, None, gf) for gf in gfs] + + # Delete study - will execute db cascade delete + Study.query.filter_by(kf_id=kf_id).delete() db.session.commit() - # Delete orphans + # -- Delete orphans --- # Families from dataservice.api.family.models import Family - q = (db.session.query(Family) - .filter(~Family.participants.any())) - q.delete(synchronize_session=False) + (db.session.query(Family) + .filter(~Family.participants.any())).delete( + synchronize_session=False) # Sequencing experiments from dataservice.api.sequencing_experiment.models import ( SequencingExperiment ) - q = (db.session.query(SequencingExperiment) - .filter(~SequencingExperiment.genomic_files.any())) - q.delete(synchronize_session=False) + (db.session.query(SequencingExperiment) + .filter(~SequencingExperiment.genomic_files.any())).delete( + synchronize_session=False) db.session.commit()