Skip to content

Commit 00b317e

Browse files
committed
study delete func
1 parent 3a76380 commit 00b317e

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

qiita_db/study.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
from .util import (check_required_columns, check_table_cols, convert_to_id,
108108
get_environmental_packages, get_table_cols, infer_status)
109109
from .sql_connection import SQLConnectionHandler
110+
from .util import exists_table
110111

111112

112113
class Study(QiitaObject):
@@ -347,6 +348,58 @@ def create(cls, owner, title, efo, info, investigation=None):
347348

348349
return cls(study_id)
349350

351+
@classmethod
352+
def delete(cls, id_):
353+
r"""Deletes the study from the database
354+
355+
Parameters
356+
----------
357+
id_ : integer
358+
The object identifier
359+
360+
Raises
361+
------
362+
QiitaDBError
363+
If the sample_(_id) table exists == a sample template exists
364+
"""
365+
cls._check_subclass()
366+
367+
study = cls(id_)
368+
369+
conn_handler = SQLConnectionHandler()
370+
if exists_table('sample_%d' % id_, conn_handler):
371+
raise QiitaDBError('Study "%s" can not be erased because it has a '
372+
'sample template' % cls(id_).title)
373+
374+
queue = "delete_study_%d" % id_
375+
conn_handler.create_queue(queue)
376+
377+
conn_handler.add_to_queue(
378+
queue,
379+
"DELETE FROM qiita.study_sample_columns WHERE study_id = %s",
380+
(id_, ))
381+
382+
conn_handler.add_to_queue(
383+
queue,
384+
"DELETE FROM qiita.study_experimental_factor WHERE study_id = %s",
385+
(id_, ))
386+
387+
conn_handler.add_to_queue(
388+
queue,
389+
"DELETE FROM qiita.study_pmid WHERE study_id = %s", (id_, ))
390+
391+
conn_handler.add_to_queue(
392+
queue,
393+
"DELETE FROM qiita.study_environmental_package WHERE study_id = "
394+
"%s", (id_, ))
395+
396+
conn_handler.add_to_queue(
397+
queue,
398+
"DELETE FROM qiita.study WHERE study_id = %s", (id_, ))
399+
400+
conn_handler.execute_queue(queue)
401+
402+
350403
# --- Attributes ---
351404
@property
352405
def title(self):

qiita_db/test/test_study.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
from qiita_db.user import User
1212
from qiita_db.data import RawData
1313
from qiita_db.util import convert_to_id
14-
from qiita_db.exceptions import QiitaDBColumnError, QiitaDBStatusError
14+
from qiita_db.exceptions import (
15+
QiitaDBColumnError, QiitaDBStatusError, QiitaDBError)
1516

1617
# -----------------------------------------------------------------------------
1718
# Copyright (c) 2014--, The Qiita Development Team.
@@ -438,6 +439,15 @@ def test_create_unknown_db_col(self):
438439
Study.create(User('test@foo.bar'), "Fried Chicken Microbiome",
439440
[1], self.info)
440441

442+
def test_delete(self):
443+
title = "Fried chicken microbiome"
444+
study = Study.create(User('test@foo.bar'), title, [1], self.info)
445+
study.delete(study.id)
446+
self.assertFalse(study.exists(title))
447+
448+
with self.assertRaises(QiitaDBError):
449+
Study.delete(1)
450+
441451
def test_retrieve_title(self):
442452
self.assertEqual(self.study.title, 'Identification of the Microbiomes'
443453
' for Cannabis Soils')

0 commit comments

Comments
 (0)