0
|
1 <tool id="ena_upload" name="ENA Upload tool" version="@VERSION@" profile="20.01" license="MIT">
|
|
2 <macros>
|
|
3 <token name="@VERSION@">0.5.3</token>
|
|
4 <import>samples_macros.xml</import>
|
|
5 </macros>
|
|
6 <requirements>
|
|
7 <requirement type="package" version="@VERSION@">ena-upload-cli</requirement>
|
|
8 </requirements>
|
|
9 <stdio>
|
|
10 <regex match="Oops" source="stderr" level="fatal"/>
|
|
11 <regex match="different file names between command line and RUN table" source="stderr" level="fatal"/>
|
|
12 </stdio>
|
|
13 <command detect_errors="exit_code"><![CDATA[
|
|
14 mkdir ./submission_files;
|
|
15 #set $studies_table_path = './submission_files/studies.tsv'
|
|
16 #set $samples_table_path = './submission_files/samples.tsv'
|
|
17 #set $experiments_table_path = './submission_files/experiments.tsv'
|
|
18 #set $runs_table_path = './submission_files/runs.tsv'
|
|
19
|
|
20 #set $studies_table_path_updated = './submission_files/studies_updated.tsv'
|
|
21 #set $samples_table_path_updated = './submission_files/samples_updated.tsv'
|
|
22 #set $experiments_table_path_updated = './submission_files/experiments_updated.tsv'
|
|
23 #set $runs_table_path_updated = './submission_files/runs_updated.tsv'
|
|
24
|
|
25 #set working_dir = os.getcwd()
|
|
26 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
27 python '$__tool_directory__/extract_tables.py' --action $action_options.action --out_dir ./submission_files --studies $studies_json;
|
|
28 #end if
|
2
|
29
|
|
30 credentials_path='test_fake_path';
|
|
31 echo "username: test_user" > \$credentials_path;
|
|
32 echo "password: test_password" >> \$credentials_path;
|
0
|
33
|
|
34
|
|
35 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
36 cp $studies_table_path $studies_table_out &&
|
|
37 cp $samples_table_path $samples_table_out &&
|
|
38 cp $experiments_table_path $experiments_table_out &&
|
|
39 cp $runs_table_path $runs_table_out &&
|
|
40 #end if
|
|
41 #if $action_options.input_format_conditional.input_format == "user_generated_tables":
|
|
42 ln -s '$action_options.input_format_conditional.experiments_users_table' $experiments_table_path &&
|
|
43 ln -s '$action_options.input_format_conditional.studies_users_table' $studies_table_path &&
|
|
44 ln -s '$action_options.input_format_conditional.runs_users_table' $runs_table_path &&
|
|
45 ln -s '$action_options.input_format_conditional.samples_users_table' $samples_table_path &&
|
|
46 #end if
|
|
47 #if $action_options.input_format_conditional.input_format == "excel_tables":
|
|
48 ln -s '$action_options.input_format_conditional.xlsx_file' ./xlsx_input.xlsx &&
|
|
49 #end if
|
|
50 #if $action_options.test_submit_parameters.dry_run == "false" and $action_options.test_submit == "False":
|
|
51 webin_id=`grep 'username' $credentials`;
|
|
52 if [ "\$webin_id" = "" ]; then
|
|
53 ## No credentials in user defined preferences
|
|
54 ## Fallback to global defined credentials (if exist)
|
|
55 #import os
|
|
56 #if os.path.isfile(os.environ.get('GALAXY_ENA_SECRETS', '')):
|
|
57 credentials_path=\${GALAXY_ENA_SECRETS};
|
|
58 webin_id=`grep 'username' \$GALAXY_ENA_SECRETS`;
|
|
59 if [ "\$webin_id" = "" ]; then
|
|
60 echo "No global credentials defined. Check your GALAXY_ENA_SECRETS file or set your credentials via: User -> Preferences -> Manage Information";
|
|
61 exit 1;
|
|
62 fi;
|
|
63 #else:
|
|
64 echo "No ENA credentials defined. Set your credentials via: User -> Preferences -> Manage Information";
|
|
65 exit 1;
|
|
66 #end if
|
|
67 else
|
|
68 credentials_path='$credentials';
|
|
69 fi;
|
|
70 #end if
|
|
71
|
|
72
|
|
73 ## create the list of files to upload and make the symlinks
|
|
74 #import re
|
|
75 #set $files_to_upload = list()
|
|
76 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
77 #for $study in $action_options.input_format_conditional.conditional_viral_metadata.rep_study:
|
|
78 #for $sample in $study.rep_sample:
|
|
79 #for $experiment in $sample.rep_experiment:
|
|
80 #for $run in $experiment.rep_runs:
|
|
81 #for $file in $run.upload_files:
|
|
82 #set $safename_reads_file = re.sub('[^\w\-_\.]', '_', $file.element_identifier)
|
|
83 #if $action_options.input_format_conditional.add_extension == "true":
|
|
84 #set $extension = '.fastq'
|
|
85 #else
|
|
86 #set $extension = ''
|
|
87 #end if
|
|
88 #if $file.is_of_type('fastq', 'fastqsanger'):
|
|
89 ## compression output is defined as safename_reads_file so no need to symlink
|
|
90 #set $safename_reads_file = $safename_reads_file + $extension + '.gz'
|
|
91 gzip -c '$file' > $safename_reads_file &&
|
|
92 #else:
|
|
93 #if $action_options.input_format_conditional.add_extension == "true":
|
|
94 #if $file.is_of_type('fastq.gz', 'fastqsanger.gz'):
|
|
95 #set $compression = '.gz'
|
|
96 #elif $file.is_of_type('fastqsanger.bz2', 'fastq.bz2'):
|
|
97 #set $compression = '.bz2'
|
|
98 #end if
|
|
99 #set $safename_reads_file = $safename_reads_file + $extension + $compression
|
|
100 #end if
|
|
101 ln -s '$file' $safename_reads_file &&
|
|
102 #end if
|
|
103 $files_to_upload.append(str($safename_reads_file))
|
|
104 #end for
|
|
105 #end for
|
|
106 #end for
|
|
107 #end for
|
|
108 #end for
|
|
109 #else:
|
|
110 #if $action_options.input_format_conditional.run_input_format_conditional.run_input_format == 'paired_list':
|
|
111 #for $pair in $action_options.input_format_conditional.run_input_format_conditional.paired_end_collection:
|
|
112 #set $safename_reads_file = re.sub('[^\w\-_\.]', '_', $pair.name)
|
|
113 ## Always need to add .fastq + compression suffix because the name is based on the pair name which has no extensions
|
|
114 #if $pair.forward.is_of_type('fastq', 'fastqsanger'):
|
|
115 ## compress the file, no need to create the link then
|
|
116 ## always add the compression suffix (.gz)
|
|
117 #set $safename_fwd_reads_file = $safename_reads_file + '_1' + 'fastq' + '.gz'
|
|
118 gzip -c '$file' > $safename_fwd_reads_file &&
|
|
119 #else
|
|
120 #if $pair.forward.is_of_type('fastq.gz', 'fastqsanger.gz'):
|
|
121 #set $compression = '.gz'
|
|
122 #elif $pair.forward.is_of_type('fastqsanger.bz2', 'fastq.bz2'):
|
|
123 #set $compression = '.bz2'
|
|
124 #end if
|
|
125 #set $safename_fwd_reads_file = $safename_reads_file + '_1' + '.fastq' + $compression
|
|
126 ln -s '$pair.forward' $safename_fwd_reads_file &&
|
|
127 #end if
|
|
128
|
|
129 #if $pair.reverse.is_of_type('fastq', 'fastqsanger'):
|
|
130 ## compress the file, no need to create the link then
|
|
131 #set $safename_reverse_reads_file = $safename_reads_file + '_1' + '.fastq' + '.gz'
|
|
132 gzip -c '$file' > $safename_rev_reads_file &&
|
|
133 #else
|
|
134 #if $pair.reverse.is_of_type('fastqsanger.bz2', 'fastq.bz2'):
|
|
135 #set $compression = '.bz2'
|
|
136 #elif $pair.reverse.is_of_type('fastqsanger.gz', 'fastq.gz'):
|
|
137 #set $compression = '.gz'
|
|
138 #end if
|
|
139 #set $safename_rev_reads_file = $safename_reads_file + '_2' + '.fastq' + $compression
|
|
140 ln -s '$pair.reverse' $safename_rev_reads_file &&
|
|
141 #end if
|
|
142 $files_to_upload.append(str($safename_fwd_reads_file))
|
|
143 $files_to_upload.append(str($safename_rev_reads_file))
|
|
144 #end for
|
|
145 #end if
|
|
146 #if $action_options.input_format_conditional.run_input_format_conditional.run_input_format == 'multiple_selection_list':
|
|
147 #for $file in $action_options.input_format_conditional.run_input_format_conditional.data:
|
|
148 #set $safename_reads_file = re.sub('[^\w\-_\.]', '_', $file.element_identifier)
|
|
149 #if $file.is_of_type('fastq', 'fastqsanger'):
|
|
150 ## always compress add the gz extension
|
|
151 #if $action_options.input_format_conditional.run_input_format_conditional.add_extension == "true":
|
|
152 #set $safename_reads_file = $safename_reads_file + '.fastq.gz'
|
|
153 #else
|
|
154 #set $safename_reads_file = $safename_reads_file + '.gz'
|
|
155 #end if
|
|
156 gzip -c '$file' > $safename_reads_file &&
|
|
157 #else
|
|
158 #if $action_options.input_format_conditional.run_input_format_conditional.add_extension == "true":
|
|
159 #if $file.is_of_type('fastq.gz', 'fastqsanger.gz'):
|
|
160 #set $extension = '.fastq.gz'
|
|
161 #elif $file.is_of_type('fastqsanger.bz2', 'fastq.bz2'):
|
|
162 #set $extension = '.fastq.bz2'
|
|
163 #end if
|
|
164 #set $safename_reads_file = $safename_reads_file + $extension
|
|
165 #end if
|
|
166 ln -s '$file' $safename_reads_file &&
|
|
167 #end if
|
|
168 $files_to_upload.append(str($safename_reads_file))
|
|
169 #end for
|
|
170 #end if
|
|
171 #end if
|
|
172
|
|
173 #if $action_options.action == "add":
|
|
174 ena-upload-cli
|
|
175 --tool 'ena-upload-cli v@VERSION@ @ Galaxy'
|
|
176 --action '$action_options.action'
|
|
177 --center '$action_options.center'
|
|
178 --secret \${credentials_path}
|
|
179 --data
|
|
180 #for $dataset in $files_to_upload:
|
|
181 '$dataset'
|
|
182 #end for
|
|
183 #if $action_options.test_submit_parameters.dry_run == "true":
|
|
184 --draft
|
|
185 #end if
|
|
186 #if $action_options.input_format_conditional.input_format != "excel_tables":
|
|
187 --experiment '$experiments_table_path'
|
|
188 --study '$studies_table_path'
|
|
189 --run '$runs_table_path'
|
|
190 --sample '$samples_table_path'
|
|
191 #else
|
|
192 --xlsx ./xlsx_input.xlsx
|
|
193 #end if
|
|
194 --action add
|
|
195 #if $action_options.input_format_conditional.input_format == "user_generated_tables":
|
|
196 --checklist $action_options.input_format_conditional.checklist_id
|
|
197 #else:
|
|
198 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
199 #if $action_options.input_format_conditional.conditional_viral_metadata.viral_sample == "true":
|
|
200 --checklist ERC000033
|
|
201 #end if
|
|
202 #else:
|
|
203 --checklist $action_options.input_format_conditional.checklist_id
|
|
204 #end if
|
|
205 #end if
|
|
206
|
|
207 #if $action_options.test_submit_parameters.submit_dev == "true":
|
|
208 -d
|
|
209 #end if
|
|
210 >> '$output';
|
|
211 #end if
|
|
212
|
2
|
213
|
|
214
|
0
|
215 #if $action_options.action == "modify":
|
|
216 ena-upload-cli
|
|
217 --tool 'ena-upload-cli v@VERSION@ @ Galaxy'
|
|
218 --action '$action_options.action'
|
|
219 --center '$action_options.center'
|
|
220 --secret \${credentials_path}
|
|
221 --data
|
|
222 #for $dataset in $files_to_upload:
|
|
223 '$dataset'
|
|
224 #end for
|
|
225 #if $action_options.test_submit_parameters.dry_run == "true":
|
|
226 --draft
|
|
227 #end if
|
|
228 #if $action_options.input_format_conditional.input_format != "excel_tables":
|
|
229 --experiment '$experiments_table_path'
|
|
230 --study '$studies_table_path'
|
|
231 --run '$runs_table_path'
|
|
232 --sample '$samples_table_path'
|
|
233 #else
|
|
234 --xlsx ./xlsx_input.xlsx
|
|
235 --auto_action
|
|
236 #end if
|
|
237 --action 'modify'
|
|
238 #if $action_options.input_format_conditional.input_format == "user_generated_tables":
|
|
239 --checklist $action_options.input_format_conditional.checklist_id
|
|
240 #else:
|
|
241 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
242 #if $action_options.input_format_conditional.conditional_viral_metadata.viral_sample == "true":
|
|
243 --checklist ERC000033
|
|
244 #end if
|
|
245 #else:
|
|
246 --checklist $action_options.input_format_conditional.checklist_id
|
|
247 #end if
|
|
248 #end if
|
|
249 >> '$output';
|
|
250 #end if
|
2
|
251
|
|
252 #if $action_options.test_submit_parameters.dry_run == "false":
|
|
253 echo -e 'center_name\t$action_options.center' >> '$output';
|
|
254 echo -e 'action_option\t$action_options.action' >> '$output';
|
|
255 #end if
|
|
256
|
|
257 ## copy updated files
|
|
258 #if $action_options.input_format_conditional.input_format == "excel_tables":
|
|
259 ## for the excel input case, copy the upload-cli generated tables to the output files
|
|
260 ## this applies for both draft and real submissions
|
|
261 cp './ENA_template_experiment_updated.tsv' $experiments_table_out;
|
|
262 cp './ENA_template_sample_updated.tsv' $samples_table_out;
|
|
263 cp './ENA_template_study_updated.tsv' $studies_table_out;
|
|
264 cp './ENA_template_run_updated.tsv' $runs_table_out;
|
|
265 #else
|
|
266 cp $studies_table_path_updated $studies_table_out 2>/dev/null;
|
|
267 cp $samples_table_path_updated $samples_table_out 2>/dev/null;
|
|
268 cp $experiments_table_path_updated $experiments_table_out 2>/dev/null;
|
|
269 cp $runs_table_path_updated $runs_table_out 2>/dev/null;
|
0
|
270 #end if
|
|
271
|
2
|
272 python '$__tool_directory__/dump_yaml.py' $studies_table_out $samples_table_out $experiments_table_out $runs_table_out >> $output;
|
0
|
273 ]]></command>
|
|
274 <configfiles>
|
|
275 <configfile name="credentials"><![CDATA[
|
|
276 #set $webin_id = $__user__.extra_preferences.get('ena_webin_account|webin_id', "").strip()
|
|
277 #set $password = $__user__.extra_preferences.get('ena_webin_account|password', "").strip()
|
|
278 #if $webin_id != "":
|
|
279 username: "$webin_id"
|
|
280 password: "$password"
|
|
281 #end if
|
|
282 ]]></configfile>
|
|
283 <configfile name="studies_json">
|
|
284 #import json
|
|
285 #import re
|
|
286 #if $action_options.input_format_conditional.input_format == "build_tables":
|
|
287 #set $files_to_upload = list()
|
|
288 #set $studies = list()
|
|
289 #for $study in $action_options.input_format_conditional.conditional_viral_metadata.rep_study:
|
|
290 #set samples = list()
|
|
291 #for $sample in $study.rep_sample:
|
|
292 #set experiments = list()
|
|
293 #for $experiment in $sample.rep_experiment:
|
|
294 #set runs = list()
|
|
295 #for $run in $experiment.rep_runs:
|
|
296 #set run_files = list()
|
|
297 #for $file in $run.upload_files:
|
|
298 #set $safename_reads_file = re.sub('[^\w\-_\.]', '_', $file.element_identifier)
|
|
299 $run_files.append(str($safename_reads_file))
|
|
300 #end for
|
|
301 $runs.append((str($run.run_base_name),$run_files))
|
|
302 #end for
|
|
303
|
|
304 $experiments.append({'title':str($experiment.experiment_title),'experiment_design':str($experiment.experiment_design),'library_strategy':str($experiment.library_strategy),'library_source':str($experiment.library_source),'library_selection':str($experiment.library_selection),'library_layout':str($experiment.library_layout),'insert_size':str($experiment.insert_size),'library_construction_protocol':str($experiment.library_construction_protocol),'platform':str($experiment.platform),'instrument_model':str($experiment.instrument_model),'runs':$runs})
|
|
305 #end for
|
|
306 #if $action_options.input_format_conditional.conditional_viral_metadata.viral_sample == "true":
|
|
307
|
|
308 $samples.append({'title':str($sample.sample_title),'description':str($sample.sample_description),'tax_name':str($sample.scientific_name),'tax_id':str($sample.tax_id),'collection_date':str($sample.collection_date),'geo_location':str($sample.geo_location_country),'host_common_name':str($sample.host_common_name),'host_subject_id':str($sample.host_subject_id),'host_health_state':str($sample.host_health_state),'host_sex':str($sample.host_sex),'host_scientific_name':str($sample.host_scientific_name),'collector_name':str($sample.collector_name),'collecting_institution':str($sample.collecting_institution),'isolate':str($sample.isolate),'experiments':$experiments})
|
|
309 #else:
|
|
310
|
|
311 $samples.append({'title':str($sample.sample_title),'description':str($sample.sample_description),'tax_name':str($sample.scientific_name),'tax_id':str($sample.tax_id),'experiments':$experiments})
|
|
312 #end if
|
|
313 #end for
|
|
314 $studies.append({'title':str($study.study_title),'type':str($study.study_type),'abstract':str($study.study_abstract),'pubmed_id':str($study.study_pubmed_id),'samples':$samples})
|
|
315 #end for
|
|
316 #echo $json.dumps($studies)
|
|
317 #end if
|
|
318 </configfile>
|
|
319 </configfiles>
|
|
320 <inputs>
|
|
321 <conditional name="action_options">
|
|
322 <param name="action" type="select" label="Action to execute">
|
|
323 <option value="add" selected="True">Add new data</option>
|
|
324 <option value="modify">Modify metadata</option>
|
|
325 </param>
|
|
326 <when value="add">
|
|
327 <expand macro="test_submit_section"/>
|
|
328 <param name="test_submit" type="hidden" value="False" />
|
|
329 <expand macro="table_inputs_macro" />
|
|
330 </when>
|
|
331 <when value="modify">
|
|
332 <expand macro="test_submit_section"/>
|
|
333 <param name="test_submit" type="hidden" value="False" />
|
|
334 <expand macro="table_inputs_macro" />
|
|
335 </when>
|
|
336 </conditional>
|
|
337 </inputs>
|
|
338 <outputs>
|
|
339 <data name="output" format="txt" label="ENA submission receipt"/>
|
|
340 <data name="studies_table_out" format="tabular" label="Studies table">
|
|
341 <filter> action_options['input_format_conditional']['input_format'] == "build_tables" or action_options['input_format_conditional']['input_format'] == "excel_tables"</filter>
|
|
342 </data>
|
|
343 <data name="samples_table_out" format="tabular" label="Samples table">
|
|
344 <filter> action_options['input_format_conditional']['input_format'] == "build_tables" or action_options['input_format_conditional']['input_format'] == "excel_tables"</filter>
|
|
345 </data>
|
|
346 <data name="experiments_table_out" format="tabular" label="Experiments table">
|
|
347 <filter> action_options['input_format_conditional']['input_format'] == "build_tables" or action_options['input_format_conditional']['input_format'] == "excel_tables"</filter>
|
|
348 </data>
|
|
349 <data name="runs_table_out" format="tabular" label="Runs table">
|
|
350 <filter> action_options['input_format_conditional']['input_format'] == "build_tables" or action_options['input_format_conditional']['input_format'] == "excel_tables"</filter>
|
|
351 </data>
|
|
352 </outputs>
|
|
353 <tests>
|
|
354 <!--Test 1: excel input of VIRAL samples -->
|
|
355 <test>
|
|
356 <conditional name="action_options">
|
|
357 <param name="action" value="add"/>
|
|
358 <section name="test_submit_parameters">
|
|
359 <param name="submit_dev" value="false" />
|
|
360 <param name="dry_run" value="true" />
|
|
361 </section>
|
|
362 <conditional name="input_format_conditional">
|
|
363 <param name="input_format" value="excel_tables"/>
|
|
364 <param name="checklist_id" value="ERC000033"/>
|
|
365 <param name="xlsx_file" value="metadata_test_viral.xlsx"/>
|
|
366 <conditional name="run_input_format_conditional">
|
|
367 <param name="add_extension" value="false"/>
|
|
368 <param name="run_input_format" value="multiple_selection_list"/>
|
|
369 <param name="data" value="C030_exp5_clean.fastq,C053_exp5_clean.fastq,C026_exp5_clean.fastq,C067_exp5_clean.fastq"/>
|
|
370 </conditional>
|
|
371 </conditional>
|
|
372 </conditional>
|
|
373 <param name="center" value="Some research center"/>
|
|
374 <output name="experiments_table_out">
|
|
375 <assert_contents>
|
|
376 <has_n_lines n="5"/>
|
|
377 <has_n_columns n="17"/>
|
|
378 <has_line_matching expression="alias\ttitle\tstudy_alias\tsample_alias\tdesign_description\tlibrary_name\tlibrary_strategy\tlibrary_source\tlibrary_selection\tlibrary_layout\tinsert_size\tlibrary_construction_protocol\tplatform\tinstrument_model\taccession\tsubmission_date\tstatus"/>
|
|
379 <has_line_matching expression="e_(.*)_026\tNanopore sequencing\tSARS-CoV-2_genomes_01\ts_(.*)"/>
|
|
380 </assert_contents>
|
|
381 </output>
|
|
382 <output name="studies_table_out">
|
|
383 <assert_contents>
|
|
384 <has_n_lines n="2"/>
|
|
385 <has_n_columns n="7"/>
|
|
386 <has_line_matching expression="SARS-CoV-2_genomes_01\tWhole-genome sequencing of SARS-CoV-2 from Covid-19 patients\tWhole Genome Sequencing\tWhole-genome sequences of SARS-CoV-2 from oro-pharyngeal swabs obtained from Covid-19 patients(.*)"/>
|
|
387 </assert_contents>
|
|
388 </output>
|
|
389 <output name="samples_table_out">
|
|
390 <assert_contents>
|
|
391 <has_n_lines n="5"/>
|
|
392 <has_n_columns n="18"/>
|
|
393 </assert_contents>
|
|
394 </output>
|
|
395 <output name="runs_table_out">
|
|
396 <assert_contents>
|
|
397 <has_n_lines n="5"/>
|
|
398 <has_n_columns n="8"/>
|
|
399 <has_line_matching expression="alias\texperiment_alias\tfile_name\tfile_format\taccession\tsubmission_date\tstatus\tfile_checksum"/>
|
|
400 <has_line_matching expression="r_20201007_026\te_20201007_026\tC026_exp5_clean.fastq.gz\tFASTQ(.*)"/>
|
|
401 </assert_contents>
|
|
402 </output>
|
|
403 </test>
|
|
404 <!--Test 2: excel input of VIRAL samples with extended columns-->
|
|
405 <test>
|
|
406 <conditional name="action_options">
|
|
407 <param name="action" value="add"/>
|
|
408 <section name="test_submit_parameters">
|
|
409 <param name="submit_dev" value="false" />
|
|
410 <param name="dry_run" value="true" />
|
|
411 </section>
|
|
412 <conditional name="input_format_conditional">
|
|
413 <param name="input_format" value="excel_tables"/>
|
|
414 <param name="checklist_id" value="ERC000033"/>
|
|
415 <param name="xlsx_file" value="metadata_test_viral_optional_columns.xlsx"/>
|
|
416 <conditional name="run_input_format_conditional">
|
|
417 <param name="add_extension" value="false"/>
|
|
418 <param name="run_input_format" value="multiple_selection_list"/>
|
|
419 <param name="data" value="C030_exp5_clean.fastq,C053_exp5_clean.fastq,C026_exp5_clean.fastq,C067_exp5_clean.fastq"/>
|
|
420 </conditional>
|
|
421 </conditional>
|
|
422 </conditional>
|
|
423 <param name="center" value="Some research center"/>
|
|
424 <output name="experiments_table_out">
|
|
425 <assert_contents>
|
|
426 <has_n_lines n="5"/>
|
|
427 <has_n_columns n="17"/>
|
|
428 <has_line_matching expression="alias\ttitle\tstudy_alias\tsample_alias\tdesign_description\tlibrary_name\tlibrary_strategy\tlibrary_source\tlibrary_selection\tlibrary_layout\tinsert_size\tlibrary_construction_protocol\tplatform\tinstrument_model\taccession\tsubmission_date\tstatus"/>
|
|
429 <has_line_matching expression="e_(.*)_026\tNanopore sequencing\tSARS-CoV-2_genomes_01\ts_(.*)"/>
|
|
430 </assert_contents>
|
|
431 </output>
|
|
432 <output name="studies_table_out">
|
|
433 <assert_contents>
|
|
434 <has_n_lines n="2"/>
|
|
435 <has_n_columns n="7"/>
|
|
436 <has_line_matching expression="alias\ttitle\tstudy_type\tstudy_abstract\taccession\tsubmission_date\tstatus"/>
|
|
437 <has_line_matching expression="SARS-CoV-2_genomes_01\tWhole-genome sequencing of SARS-CoV-2 from Covid-19 patients\tWhole Genome Sequencing\tWhole-genome sequences of SARS-CoV-2 from oro-pharyngeal swabs obtained from Covid-19 patients(.*)"/>
|
|
438 </assert_contents>
|
|
439 </output>
|
|
440 <output name="samples_table_out">
|
|
441 <assert_contents>
|
|
442 <has_n_lines n="5"/>
|
|
443 <has_n_columns n="43"/>
|
|
444 </assert_contents>
|
|
445 </output>
|
|
446 <output name="runs_table_out">
|
|
447 <assert_contents>
|
|
448 <has_n_lines n="5"/>
|
|
449 <has_n_columns n="8"/>
|
|
450 <has_line_matching expression="alias\texperiment_alias\tfile_name\tfile_format\taccession\tsubmission_date\tstatus\tfile_checksum"/>
|
|
451 <has_line_matching expression="r_20201007_026\te_20201007_026\tC026_exp5_clean.fastq.gz\tFASTQ(.*)"/>
|
|
452 </assert_contents>
|
|
453 </output>
|
2
|
454 <output name="output">
|
|
455 <assert_contents>
|
|
456 <has_line_matching expression="YAML -------------"/>
|
|
457 <has_line_matching expression="ENA_experiment:"/>
|
|
458 <has_line_matching expression="ENA_sample:"/>
|
|
459 <has_line_matching expression="ENA_study:"/>
|
|
460 <has_line_matching expression="ENA_run:"/>
|
|
461 </assert_contents>
|
|
462 </output>
|
0
|
463 </test>
|
|
464 <!--Test 3: excel input of NON-VIRAL samples-->
|
|
465 <test>
|
|
466 <conditional name="action_options">
|
|
467 <param name="action" value="add"/>
|
|
468 <section name="test_submit_parameters">
|
|
469 <param name="submit_dev" value="false" />
|
|
470 <param name="dry_run" value="true" />
|
|
471 </section>
|
|
472 <conditional name="input_format_conditional">
|
|
473 <param name="input_format" value="excel_tables"/>
|
|
474 <param name="checklist_id" value="ERC000011"/>
|
|
475 <param name="xlsx_file" value="metadata_test_nonviral_1_run.xlsx"/>
|
|
476 <conditional name="run_input_format_conditional">
|
|
477 <param name="add_extension" value="true"/>
|
|
478 <param name="run_input_format" value="multiple_selection_list"/>
|
|
479 <param name="data" value="sample_no_extension"/>
|
|
480 </conditional>
|
|
481 </conditional>
|
|
482 </conditional>
|
|
483 <param name="center" value="Some research center"/>
|
|
484 <output name="experiments_table_out">
|
|
485 <assert_contents>
|
|
486 <has_n_lines n="2"/>
|
|
487 <has_n_columns n="17"/>
|
|
488 <has_line_matching expression="alias\ttitle\tstudy_alias\tsample_alias\tdesign_description\tlibrary_name\tlibrary_strategy\tlibrary_source\tlibrary_selection\tlibrary_layout\tinsert_size\tlibrary_construction_protocol\tplatform\tinstrument_model\taccession\tsubmission_date\tstatus"/>
|
|
489 </assert_contents>
|
|
490 </output>
|
|
491 <output name="studies_table_out">
|
|
492 <assert_contents>
|
|
493 <has_n_lines n="2"/>
|
|
494 <has_n_columns n="7"/>
|
|
495 <has_line_matching expression="alias\ttitle\tstudy_type\tstudy_abstract\taccession\tsubmission_date\tstatus"/>
|
|
496 </assert_contents>
|
|
497 </output>
|
|
498 <output name="samples_table_out">
|
|
499 <assert_contents>
|
|
500 <has_n_lines n="2"/>
|
|
501 <has_n_columns n="8"/>
|
|
502 <has_line_matching expression="alias\ttitle\tscientific_name\tsample_description\taccession\tsubmission_date\tstatus\ttaxon_id"/>
|
|
503 </assert_contents>
|
|
504 </output>
|
|
505 <output name="runs_table_out">
|
|
506 <assert_contents>
|
|
507 <has_n_lines n="2"/>
|
|
508 <has_n_columns n="8"/>
|
|
509 <has_line_matching expression="alias\texperiment_alias\tfile_name\tfile_format\taccession\tsubmission_date\tstatus\tfile_checksum"/>
|
|
510 <has_line_matching expression="r_20201007_026\te_20201007_026\tsample_no_extension.fastq.gz\tFASTQ(.*)"/>
|
|
511 </assert_contents>
|
|
512 </output>
|
|
513 </test>
|
|
514 <!--Test 4: failure on excel input of NON-VIRAL samples with runs PAIRED collection -->
|
|
515 <test expect_failure="true">
|
|
516 <conditional name="action_options">
|
|
517 <param name="action" value="add"/>
|
|
518 <section name="test_submit_parameters">
|
|
519 <param name="submit_dev" value="false" />
|
|
520 <param name="dry_run" value="false" />
|
|
521 </section>
|
|
522 <conditional name="input_format_conditional">
|
|
523 <param name="add_extension" value="true"/>
|
|
524 <param name="input_format" value="excel_tables"/>
|
|
525 <param name="checklist_id" value="ERC000011"/>
|
|
526 <param name="xlsx_file" value="metadata_test_nonviral.xlsx"/>
|
|
527 <conditional name="run_input_format_conditional">
|
|
528 <param name="run_input_format" value="paired_list"/>
|
|
529 <param name="paired_end_collection">
|
|
530 <collection type="list:paired">
|
|
531 <element name="paired_run_name">
|
|
532 <collection type="paired">
|
|
533 <element name="forward" value="1.fastqsanger.gz" ftype="fastqsanger.gz" />
|
|
534 <element name="reverse" value="2.fastqsanger.gz" ftype="fastqsanger.gz" />
|
|
535 </collection>
|
|
536 </element>
|
|
537 </collection>
|
|
538 </param>
|
|
539 </conditional>
|
|
540 </conditional>
|
|
541 </conditional>
|
|
542 <param name="center" value="Some research center"/>
|
|
543 <assert_command>
|
|
544 <has_text_matching expression="ena-upload-cli"/>
|
|
545 <has_text_matching expression="--data 'paired_run_name_1.fastq.gz' 'paired_run_name_2.fastq.gz'"/>
|
|
546 <has_text_matching expression="--action 'add' --center 'Some research center'"/>
|
|
547 </assert_command>
|
|
548 </test>
|
|
549 <!--Test 5: build tables from user input fields NON-VIRAL samples-->
|
|
550 <test>
|
|
551 <conditional name="action_options">
|
|
552 <param name="action" value="add"/>
|
|
553 <section name="test_submit_parameters">
|
|
554 <param name="submit_dev" value="false" />
|
|
555 <param name="dry_run" value="true" />
|
|
556 </section>
|
|
557 <conditional name="input_format_conditional">
|
|
558 <param name="input_format" value="build_tables"/>
|
2
|
559 <param name="add_extension" value="false"/>
|
0
|
560 <conditional name="conditional_viral_metadata">
|
|
561 <param name="viral_sample" value="False"/>
|
|
562 <repeat name="rep_study">
|
|
563 <param name="study_title" value="Test study title"/>
|
|
564 <param name="study_abstract" value="Test study abstract"/>
|
|
565 <param name="study_type" value="Epigenetics"/>
|
|
566 <param name="study_pubmed_id" value="Test study pubmedID"/>
|
|
567 <repeat name="rep_sample">
|
|
568 <param name="sample_title" value="Test Sample title"/>
|
|
569 <param name="sample_description" value="Test Sample description"/>
|
|
570 <param name="scientific_name" value="Test Sample scientific name"/>
|
2
|
571 <param name="tax_id" value="2697049"/>
|
0
|
572 <repeat name="rep_experiment">
|
|
573 <param name="experiment_title" value="Test experiment title"/>
|
|
574 <param name="experiment_design" value="Test experiment design description"/>
|
|
575 <param name="library_strategy" value="CTS"/>
|
|
576 <param name="library_source" value="GENOMIC"/>
|
|
577 <param name="library_selection" value="PCR"/>
|
|
578 <param name="library_layout" value="SINGLE"/>
|
|
579 <param name="insert_size" value="150"/>
|
|
580 <param name="library_construction_protocol" value="Test library construction"/>
|
|
581 <param name="platform" value="ILLUMINA"/>
|
|
582 <param name="instrument_model" value="Illumina HiSeq 4000"/>
|
|
583 <repeat name="rep_runs">
|
2
|
584 <param name="upload_files" value="1.fastqsanger.gz,sample.fq" ftype="fastqsanger.gz"/>
|
0
|
585 </repeat>
|
|
586 </repeat>
|
|
587 </repeat>
|
|
588 </repeat>
|
|
589 </conditional>
|
|
590 </conditional>
|
|
591 </conditional>
|
|
592 <param name="center" value="Some research center"/>
|
|
593 <output name="experiments_table_out">
|
|
594 <assert_contents>
|
|
595 <has_n_lines n="2"/>
|
|
596 <has_n_columns n="17"/>
|
|
597 </assert_contents>
|
|
598 </output>
|
|
599 <output name="studies_table_out">
|
|
600 <assert_contents>
|
|
601 <has_n_lines n="2"/>
|
|
602 <has_n_columns n="8"/>
|
|
603 <has_line_matching expression="alias\tstatus\taccession\ttitle\tstudy_type\tstudy_abstract\tpubmed_id\tsubmission_date"/>
|
|
604 </assert_contents>
|
|
605 </output>
|
|
606 <output name="samples_table_out">
|
|
607 <assert_contents>
|
|
608 <has_n_lines n="2"/>
|
|
609 <has_n_columns n="8"/>
|
|
610 </assert_contents>
|
|
611 </output>
|
|
612 <output name="runs_table_out">
|
|
613 <assert_contents>
|
|
614 <has_n_lines n="3"/>
|
|
615 <has_n_columns n="8"/>
|
|
616 <has_line_matching expression="alias\tstatus\taccession\texperiment_alias\tfile_name\tfile_format\tfile_checksum\tsubmission_date"/>
|
|
617 </assert_contents>
|
|
618 </output>
|
|
619 </test>
|
|
620 <!--Test 6: RUN failing build tables from user input fields NON-VIRAL samples-->
|
|
621 <test expect_failure="true">
|
|
622 <conditional name="action_options">
|
|
623 <param name="action" value="add"/>
|
|
624 <section name="test_submit_parameters">
|
|
625 <param name="submit_dev" value="true" />
|
|
626 <param name="dry_run" value="false" />
|
|
627 </section>
|
|
628 <conditional name="input_format_conditional">
|
|
629 <param name="input_format" value="build_tables"/>
|
|
630 <param name="add_extension" value="true"/>
|
|
631 <conditional name="conditional_viral_metadata">
|
|
632 <param name="viral_sample" value="false"/>
|
|
633 <repeat name="rep_study">
|
|
634 <param name="study_title" value="Test study title"/>
|
|
635 <param name="study_abstract" value="Test study abstract"/>
|
|
636 <param name="study_type" value="Epigenetics"/>
|
|
637 <param name="study_pubmed_id" value="Test study pubmedID"/>
|
|
638 <repeat name="rep_sample">
|
|
639 <param name="sample_title" value="Test Sample title"/>
|
|
640 <param name="sample_description" value="Test Sample description"/>
|
|
641 <param name="scientific_name" value="Test Sample scientific name"/>
|
2
|
642 <param name="tax_id" value="2697049"/>
|
0
|
643 <repeat name="rep_experiment">
|
|
644 <param name="experiment_title" value="Test experiment title"/>
|
|
645 <param name="experiment_design" value="Test experiment design description"/>
|
|
646 <param name="library_strategy" value="CTS"/>
|
|
647 <param name="library_source" value="GENOMIC"/>
|
|
648 <param name="library_selection" value="PCR"/>
|
|
649 <param name="library_layout" value="SINGLE"/>
|
|
650 <param name="insert_size" value="150"/>
|
|
651 <param name="library_construction_protocol" value="Test library construction"/>
|
|
652 <param name="platform" value="ILLUMINA"/>
|
|
653 <param name="instrument_model" value="Illumina HiSeq 4000"/>
|
|
654 <repeat name="rep_runs">
|
|
655 <param name="upload_files" value="1.fastqsanger.gz,sample.fq" ftype="fastqsanger"/>
|
|
656 </repeat>
|
|
657 </repeat>
|
|
658 </repeat>
|
|
659 </repeat>
|
|
660 </conditional>
|
|
661 </conditional>
|
|
662 </conditional>
|
|
663 <param name="center" value="Some research center"/>
|
|
664 <assert_stdout>
|
|
665 <has_text_matching expression="No ENA credentials defined"/>
|
|
666 </assert_stdout>
|
|
667 </test>
|
|
668 <!--Test 7: with submit_test to skip credentials checksRUN failing build tables from user input fields NON-VIRAL samples
|
|
669 also tests compression of uncompressed inputs and adding the .gz suffix -->
|
2
|
670 <test expect_failure="false">
|
0
|
671 <conditional name="action_options">
|
|
672 <param name="action" value="add"/>
|
|
673 <section name="test_submit_parameters">
|
|
674 <param name="submit_dev" value="true" />
|
2
|
675 <param name="dry_run" value="true" />
|
0
|
676 </section>
|
|
677 <param name="test_submit" value="True"/>
|
|
678 <conditional name="input_format_conditional">
|
2
|
679 <param name="add_extension" value="false"/>
|
0
|
680 <param name="input_format" value="build_tables"/>
|
|
681 <conditional name="conditional_viral_metadata">
|
|
682 <param name="viral_sample" value="false"/>
|
|
683 <repeat name="rep_study">
|
|
684 <param name="study_title" value="Test study title"/>
|
|
685 <param name="study_abstract" value="Test study abstract"/>
|
|
686 <param name="study_type" value="Epigenetics"/>
|
|
687 <param name="study_pubmed_id" value="Test study pubmedID"/>
|
|
688 <repeat name="rep_sample">
|
|
689 <param name="sample_title" value="Test Sample title"/>
|
|
690 <param name="sample_description" value="Test Sample description"/>
|
|
691 <param name="scientific_name" value="Test Sample scientific name"/>
|
2
|
692 <param name="tax_id" value="2697049"/>
|
0
|
693 <repeat name="rep_experiment">
|
|
694 <param name="experiment_title" value="Test experiment title"/>
|
|
695 <param name="experiment_design" value="Test experiment design description"/>
|
|
696 <param name="library_strategy" value="CTS"/>
|
|
697 <param name="library_source" value="GENOMIC"/>
|
|
698 <param name="library_selection" value="PCR"/>
|
|
699 <param name="library_layout" value="SINGLE"/>
|
|
700 <param name="insert_size" value="150"/>
|
|
701 <param name="library_construction_protocol" value="Test library construction"/>
|
|
702 <param name="platform" value="ILLUMINA"/>
|
|
703 <param name="instrument_model" value="Illumina HiSeq 4000"/>
|
|
704 <repeat name="rep_runs">
|
|
705 <param name="run_base_name" value="run_from_hospital_X"/>
|
2
|
706 <param name="upload_files" value="1.fastqsanger.gz,2.fastqsanger.gz" ftype="fastqsanger.gz"/>
|
0
|
707 </repeat>
|
|
708 </repeat>
|
|
709 </repeat>
|
|
710 </repeat>
|
|
711 </conditional>
|
|
712 </conditional>
|
|
713 </conditional>
|
|
714 <param name="center" value="Some research center"/>
|
|
715 <assert_command>
|
|
716 <has_text_matching expression="ena-upload-cli"/>
|
2
|
717 <has_text_matching expression="--data '1.fastqsanger.gz' '2.fastqsanger.gz'"/>
|
0
|
718 <has_text_matching expression="--action 'add' --center 'Some research center'"/>
|
|
719 <not_has_text text="modify" />
|
|
720 </assert_command>
|
|
721 </test>
|
|
722 <!--Test 8: viral submission - User input metadata - Add extension = False-->
|
2
|
723 <test expect_failure="false">
|
0
|
724 <conditional name="action_options">
|
|
725 <param name="action" value="add"/>
|
|
726 <section name="test_submit_parameters">
|
|
727 <param name="submit_dev" value="false" />
|
2
|
728 <param name="dry_run" value="true" />
|
0
|
729 </section>
|
|
730 <param name="test_submit" value="True"/>
|
|
731 <conditional name="input_format_conditional">
|
2
|
732 <param name="add_extension" value="false"/>
|
0
|
733 <param name="input_format" value="build_tables"/>
|
|
734 <conditional name="conditional_viral_metadata">
|
|
735 <param name="viral_sample" value="true"/>
|
|
736 <repeat name="rep_study">
|
|
737 <param name="study_title" value="Test study title"/>
|
|
738 <param name="study_abstract" value="Test study abstract"/>
|
|
739 <param name="study_type" value="Epigenetics"/>
|
|
740 <param name="study_pubmed_id" value="Test study pubmedID"/>
|
|
741 <repeat name="rep_sample">
|
|
742 <param name="sample_title" value="Test Sample title"/>
|
|
743 <param name="sample_description" value="Test Sample description"/>
|
|
744 <param name="scientific_name" value="Test Sample scientific name"/>
|
2
|
745 <param name="tax_id" value="2697049"/>
|
0
|
746 <param name="collection_date" value="2020"/>
|
|
747 <param name="geo_location_country" value="Belgium"/>
|
|
748 <param name="host_common_name" value="Human"/>
|
|
749 <param name="host_subject_id" value="Patient_001"/>
|
|
750 <param name="host_health_state" value="healthy"/>
|
|
751 <param name="host_sex" value="female"/>
|
|
752 <param name="host_scientific_name" value="homo sapiens"/>
|
|
753 <param name="collector_name" value="John The Collector"/>
|
|
754 <param name="collecting_institution" value="Hospital 01"/>
|
|
755 <param name="isolate" value="sample_001"/>
|
|
756 <repeat name="rep_experiment">
|
|
757 <param name="experiment_title" value="Test experiment title"/>
|
|
758 <param name="experiment_design" value="Test experiment design description"/>
|
|
759 <param name="library_strategy" value="CTS"/>
|
|
760 <param name="library_source" value="GENOMIC"/>
|
|
761 <param name="library_selection" value="PCR"/>
|
|
762 <param name="library_layout" value="SINGLE"/>
|
|
763 <param name="insert_size" value="150"/>
|
|
764 <param name="library_construction_protocol" value="Test library construction"/>
|
|
765 <param name="platform" value="ILLUMINA"/>
|
|
766 <param name="instrument_model" value="Illumina HiSeq 4000"/>
|
|
767 <repeat name="rep_runs">
|
|
768 <param name="run_base_name" value="run_from_hospital_X"/>
|
|
769 <param name="upload_files" value="1.fastqsanger.gz,2.fastqsanger.gz" ftype="fastqsanger.gz"/>
|
|
770 </repeat>
|
|
771 </repeat>
|
|
772 </repeat>
|
|
773 </repeat>
|
|
774 </conditional>
|
|
775 </conditional>
|
|
776 </conditional>
|
|
777 <param name="center" value="Some research center"/>
|
|
778 <assert_command>
|
|
779 <has_text_matching expression="ena-upload-cli"/>
|
|
780 <has_text_matching expression="--data '1.fastqsanger.gz' '2.fastqsanger.gz'"/>
|
|
781 <has_text_matching expression="--action 'add' --center 'Some research center'"/>
|
|
782 <has_text_matching expression="--checklist ERC000033"/>
|
|
783 </assert_command>
|
|
784 </test>
|
|
785 <!--Test 9: modify option and auto compression - viral submission - User input metadata-->
|
2
|
786 <test expect_failure="false">
|
0
|
787 <conditional name="action_options">
|
|
788 <param name="action" value="modify"/>
|
|
789 <section name="test_submit_parameters">
|
|
790 <param name="submit_dev" value="false" />
|
2
|
791 <param name="dry_run" value="true" />
|
0
|
792 </section>
|
|
793 <param name="test_submit" value="True"/>
|
|
794 <conditional name="input_format_conditional">
|
2
|
795 <param name="add_extension" value="fasle"/>
|
0
|
796 <param name="input_format" value="build_tables"/>
|
|
797 <conditional name="conditional_viral_metadata">
|
|
798 <param name="viral_sample" value="True"/>
|
|
799 <repeat name="rep_study">
|
|
800 <param name="study_title" value="Test study title"/>
|
|
801 <param name="study_abstract" value="Test study abstract"/>
|
|
802 <param name="study_type" value="Epigenetics"/>
|
|
803 <param name="study_pubmed_id" value="Test study pubmedID"/>
|
|
804 <repeat name="rep_sample">
|
|
805 <param name="sample_title" value="Test Sample title"/>
|
|
806 <param name="sample_description" value="Test Sample description"/>
|
|
807 <param name="scientific_name" value="Test Sample scientific name"/>
|
2
|
808 <param name="tax_id" value="2697049"/>
|
0
|
809 <param name="collection_date" value="2020"/>
|
|
810 <param name="geo_location_country" value="Belgium"/>
|
|
811 <param name="host_common_name" value="Human"/>
|
|
812 <param name="host_subject_id" value="Patient_001"/>
|
|
813 <param name="host_health_state" value="healthy"/>
|
|
814 <param name="host_sex" value="female"/>
|
|
815 <param name="host_scientific_name" value="homo sapiens"/>
|
|
816 <param name="collector_name" value="John The Collector"/>
|
|
817 <param name="collecting_institution" value="Hospital 01"/>
|
|
818 <param name="isolate" value="sample_001"/>
|
|
819 <repeat name="rep_experiment">
|
|
820 <param name="experiment_title" value="Test experiment title"/>
|
|
821 <param name="experiment_design" value="Test experiment design description"/>
|
|
822 <param name="library_strategy" value="CTS"/>
|
|
823 <param name="library_source" value="GENOMIC"/>
|
|
824 <param name="library_selection" value="PCR"/>
|
|
825 <param name="library_layout" value="SINGLE"/>
|
|
826 <param name="insert_size" value="150"/>
|
|
827 <param name="library_construction_protocol" value="Test library construction"/>
|
|
828 <param name="platform" value="ILLUMINA"/>
|
|
829 <param name="instrument_model" value="Illumina HiSeq 4000"/>
|
|
830 <repeat name="rep_runs">
|
|
831 <param name="run_base_name" value="run_from_hospital_X"/>
|
2
|
832 <param name="upload_files" value="1.fastqsanger.gz" ftype="fastqsanger.gz"/>
|
0
|
833 </repeat>
|
|
834 </repeat>
|
|
835 </repeat>
|
|
836 </repeat>
|
|
837 </conditional>
|
|
838 </conditional>
|
|
839 </conditional>
|
|
840 <param name="center" value="Some research center"/>
|
|
841 <assert_command>
|
|
842 <has_text_matching expression="ena-upload-cli"/>
|
2
|
843 <has_text_matching expression="--data '1.fastqsanger.gz'"/>
|
0
|
844 <has_text_matching expression="--action 'modify' --center 'Some research center'"/>
|
|
845 <has_text_matching expression="--checklist ERC000033"/>
|
|
846 <not_has_text text="add" />
|
|
847 </assert_command>
|
|
848 </test>
|
|
849 </tests>
|
|
850 <help><![CDATA[
|
|
851 This is a wrapper for the ENA upload tool in https://github.com/usegalaxy-eu/ena-upload-cli
|
|
852 The input metadata can be submitted following the tabular format of the templates in https://github.com/usegalaxy-eu/ena-upload-cli/tree/master/example_tables
|
2
|
853 It is also possible to submit an excel file by following the template in https://github.com/ELIXIR-Belgium/ENA-metadata-templates
|
0
|
854 ]]></help>
|
|
855 <citations>
|
|
856 </citations>
|
|
857 </tool>
|