Skip to content

Commit ec9c2b0

Browse files
committed
Merge branch 'master' of https://github.com/biocore/qiita into fix-1084
2 parents 6f326eb + 2246242 commit ec9c2b0

24 files changed

+640
-330
lines changed

qiita_db/analysis.py

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from .base import QiitaStatusObject
3333
from .data import ProcessedData
3434
from .study import Study
35-
from .exceptions import QiitaDBStatusError, QiitaDBError
35+
from .exceptions import QiitaDBStatusError, QiitaDBError, QiitaDBUnknownIDError
3636
from .util import (convert_to_id, get_work_base_dir,
3737
get_mountpoint, insert_filepaths)
3838

@@ -66,9 +66,13 @@ class Analysis(QiitaStatusObject):
6666
unshare
6767
build_files
6868
summary_data
69+
exists
70+
create
71+
delete
6972
"""
7073

7174
_table = "analysis"
75+
_analysis_id_column = 'analysis_id'
7276

7377
def _lock_check(self, conn_handler):
7478
"""Raises QiitaDBStatusError if analysis is not in_progress"""
@@ -165,6 +169,73 @@ def create(cls, owner, name, description, parent=None, from_default=False):
165169
a_id = conn_handler.execute_queue(queue)[0]
166170
return cls(a_id)
167171

172+
@classmethod
173+
def delete(cls, _id):
174+
"""Deletes an analysis
175+
176+
Parameters
177+
----------
178+
_id : int
179+
The analysis id
180+
181+
Raises
182+
------
183+
QiitaDBUnknownIDError
184+
If the analysis id doesn't exist
185+
"""
186+
# check if the analysis exist
187+
if not cls.exists(_id):
188+
raise QiitaDBUnknownIDError(_id, "analysis")
189+
190+
queue = "delete_analysis_%d" % _id
191+
conn_handler = SQLConnectionHandler()
192+
conn_handler.create_queue(queue)
193+
194+
sql = ("DELETE FROM qiita.analysis_filepath WHERE "
195+
"{0} = {1}".format(cls._analysis_id_column, _id))
196+
conn_handler.add_to_queue(queue, sql)
197+
198+
sql = ("DELETE FROM qiita.analysis_workflow WHERE "
199+
"{0} = {1}".format(cls._analysis_id_column, _id))
200+
conn_handler.add_to_queue(queue, sql)
201+
202+
sql = ("DELETE FROM qiita.analysis_sample WHERE "
203+
"{0} = {1}".format(cls._analysis_id_column, _id))
204+
conn_handler.add_to_queue(queue, sql)
205+
206+
sql = ("DELETE FROM qiita.collection_analysis WHERE "
207+
"{0} = {1}".format(cls._analysis_id_column, _id))
208+
conn_handler.add_to_queue(queue, sql)
209+
210+
# TODO: issue #1176
211+
212+
sql = ("DELETE FROM qiita.{0} WHERE "
213+
"{1} = {2}".format(cls._table, cls._analysis_id_column, _id))
214+
conn_handler.add_to_queue(queue, sql)
215+
216+
conn_handler.execute_queue(queue)
217+
218+
@classmethod
219+
def exists(cls, analysis_id):
220+
r"""Checks if the given analysis _id exists
221+
222+
Parameters
223+
----------
224+
analysis_id : int
225+
The id of the analysis we are searching for
226+
227+
Returns
228+
-------
229+
bool
230+
True if exists, false otherwise.
231+
"""
232+
conn_handler = SQLConnectionHandler()
233+
234+
return conn_handler.execute_fetchone(
235+
"SELECT EXISTS(SELECT * FROM qiita.{0} WHERE "
236+
"{1}=%s)".format(cls._table, cls._analysis_id_column),
237+
(analysis_id, ))[0]
238+
168239
# ---- Properties ----
169240
@property
170241
def owner(self):

qiita_db/metadata_template/constants.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
SAMPLE_TEMPLATE_COLUMNS = {
1616
# The following columns are required by EBI for submission
1717
'EBI': Restriction(columns={'collection_timestamp': 'timestamp',
18-
'physical_specimen_location': 'varchar'},
18+
'physical_specimen_location': 'varchar',
19+
'taxon_id': 'integer',
20+
'scientific_name': 'varchar'},
1921
error_msg="EBI submission disabled"),
2022
# The following columns are required for the official main QIITA site
2123
'qiita_main': Restriction(columns={'sample_type': 'varchar',

0 commit comments

Comments
 (0)