|
14 | 14 |
|
15 | 15 | from qiita_db.software import Software
|
16 | 16 | from qiita_db.study import Study
|
| 17 | +from qiita_db.exceptions import QiitaDBUnknownIDError |
17 | 18 |
|
18 | 19 | from json import dumps
|
19 | 20 |
|
@@ -101,32 +102,39 @@ class SampleValidation(AdminProcessingJobBaseClass):
|
101 | 102 | def get(self):
|
102 | 103 | self._check_access()
|
103 | 104 |
|
104 |
| - self.render("sample_validation.html", input=True) |
| 105 | + self.render("sample_validation.html", input=True, error=None) |
105 | 106 |
|
106 | 107 | @execute_as_transaction
|
107 | 108 | def post(self):
|
108 |
| - |
109 | 109 | # Get user-inputted qiita id and sample names
|
110 | 110 | qid = self.get_argument("qid")
|
111 | 111 | snames = self.get_argument("snames").split()
|
| 112 | + error, matching, missing, extra, blank = [None]*5 |
112 | 113 |
|
113 | 114 | # Stripping leading qiita id from sample names
|
114 | 115 | # Example: 1.SKB1.640202 -> SKB1.640202
|
115 |
| - qsnames = list(Study(qid).sample_template) |
116 |
| - for i, qsname in enumerate(qsnames): |
117 |
| - if qsname.startswith(qid): |
118 |
| - qsnames[i] = qsname.replace(f'{qid}.', "", 1) |
119 |
| - |
120 |
| - # Remove blank samples from sample names |
121 |
| - blank = [x for x in snames if x.lower().startswith('blank')] |
122 |
| - snames = [x for x in snames if 'blank' not in x.lower()] |
123 |
| - |
124 |
| - # Validate user's sample names against qiita study |
125 |
| - qsnames = set(qsnames) |
126 |
| - snames = set(snames) |
127 |
| - matching = qsnames.intersection(snames) |
128 |
| - missing = qsnames.difference(snames) |
129 |
| - extra = snames.difference(qsnames) |
| 116 | + try: |
| 117 | + qsnames = list(Study(qid).sample_template) |
| 118 | + except TypeError: |
| 119 | + error = f'Study {qid} seems to have no sample template' |
| 120 | + except QiitaDBUnknownIDError: |
| 121 | + error = f'Study {qid} does not exist' |
| 122 | + |
| 123 | + if error is None: |
| 124 | + for i, qsname in enumerate(qsnames): |
| 125 | + if qsname.startswith(qid): |
| 126 | + qsnames[i] = qsname.replace(f'{qid}.', "", 1) |
| 127 | + |
| 128 | + # Remove blank samples from sample names |
| 129 | + blank = [x for x in snames if x.lower().startswith('blank')] |
| 130 | + snames = set(snames) - set(blank) |
| 131 | + |
| 132 | + # Validate user's sample names against qiita study |
| 133 | + qsnames = set(qsnames) |
| 134 | + snames = set(snames) |
| 135 | + matching = qsnames.intersection(snames) |
| 136 | + missing = qsnames.difference(snames) |
| 137 | + extra = snames.difference(qsnames) |
130 | 138 |
|
131 | 139 | self.render("sample_validation.html", input=False, matching=matching,
|
132 |
| - missing=missing, extra=extra, blank=blank) |
| 140 | + missing=missing, extra=extra, blank=blank, error=error) |
0 commit comments