7
7
# -----------------------------------------------------------------------------
8
8
from unittest import TestCase , main
9
9
from datetime import datetime
10
- from os .path import exists , join , basename , isdir
11
- from os import remove , close , mkdir
10
+ from os .path import exists , join , isdir
11
+ from os import remove
12
12
from shutil import rmtree
13
- from tempfile import mkstemp , mkdtemp
13
+ from tempfile import mkdtemp
14
14
15
15
import pandas as pd
16
16
import numpy .testing as npt
17
17
18
18
from qiita_core .util import qiita_test_checker
19
+ from qiita_core .exceptions import IncompetentQiitaDeveloperError
19
20
import qiita_db as qdb
20
21
from qiita_pet .handlers .api_proxy .studies import (
21
22
data_types_get_req , study_get_req , study_prep_get_req , study_delete_req ,
@@ -282,7 +283,9 @@ def test_study_prep_get_req_failed_EBI(self):
282
283
}
283
284
metadata = pd .DataFrame .from_dict (metadata_dict , orient = 'index' ,
284
285
dtype = str )
285
- qdb .metadata_template .sample_template .SampleTemplate .create (
286
+ npt .assert_warns (
287
+ qdb .exceptions .QiitaDBWarning ,
288
+ qdb .metadata_template .sample_template .SampleTemplate .create ,
286
289
metadata , study )
287
290
288
291
# (C)
@@ -409,6 +412,7 @@ def test_study_files_get_req(self):
409
412
'Cannabis Soils (1) - Raw data 1 (1)' )]}
410
413
self .assertEqual (obs , exp )
411
414
415
+ # adding a new study for further testing
412
416
info = {
413
417
"timeseries_type_id" : 1 ,
414
418
"metadata_complete" : True ,
@@ -422,58 +426,86 @@ def test_study_files_get_req(self):
422
426
"principal_investigator_id" : qdb .study .StudyPerson (3 ),
423
427
"lab_person_id" : qdb .study .StudyPerson (1 )
424
428
}
425
-
426
429
new_study = qdb .study .Study .create (
427
430
qdb .user .User ('test@foo.bar' ), "Some New Study to get files" , [1 ],
428
431
info )
429
432
430
- obs = study_files_get_req ('test@foo.bar' , new_study .id , 1 , 'FASTQ' )
431
- exp = {'status' : 'success' ,
432
- 'message' : '' ,
433
- 'remaining' : [],
434
- 'file_types' : [('raw_barcodes' , True , []),
435
- ('raw_forward_seqs' , True , []),
436
- ('raw_reverse_seqs' , False , [])],
437
- 'num_prefixes' : 1 ,
438
- 'artifacts' : [(1 , 'Identification of the Microbiomes for '
439
- 'Cannabis Soils (1) - Raw data 1 (1)' )]}
433
+ # check that you can't call a this function using two unrelated
434
+ # study_id and prep_template_id
435
+ with self .assertRaises (IncompetentQiitaDeveloperError ):
436
+ study_files_get_req ('test@foo.bar' , new_study .id , 1 , 'FASTQ' )
437
+
438
+ def test_study_files_get_req_per_sample_FASTQ (self ):
439
+ study_id = 1
440
+ # adding a new prep for testing
441
+ PREP = qdb .metadata_template .prep_template .PrepTemplate
442
+ prep_info_dict = {
443
+ 'SKB7.640196' : {'run_prefix' : 'test_1' },
444
+ 'SKB8.640193' : {'run_prefix' : 'test_2' }
445
+ }
446
+ prep_info = pd .DataFrame .from_dict (prep_info_dict ,
447
+ orient = 'index' , dtype = str )
448
+ pt = npt .assert_warns (
449
+ qdb .exceptions .QiitaDBWarning , PREP .create , prep_info ,
450
+ qdb .study .Study (study_id ), "Metagenomic" )
451
+
452
+ # getting the upload folder so we can test
453
+ study_upload_dir = join (
454
+ qdb .util .get_mountpoint ("uploads" )[0 ][1 ], str (study_id ))
455
+
456
+ # adding just foward per sample FASTQ to the upload folder
457
+ filenames = ['test_1.R1.fastq.gz' , 'test_2.R1.fastq.gz' ]
458
+ for f in filenames :
459
+ fpt = join (study_upload_dir , f )
460
+ open (fpt , 'w' , 0 ).close ()
461
+ self ._clean_up_files .append (fpt )
462
+ obs = study_files_get_req (
463
+ 'shared@foo.bar' , 1 , pt .id , 'per_sample_FASTQ' )
464
+ exp = {
465
+ 'status' : 'success' , 'num_prefixes' : 2 , 'artifacts' : [],
466
+ 'remaining' : [], 'message' : '' ,
467
+ 'file_types' : [
468
+ ('raw_forward_seqs' , True ,
469
+ ['test_2.R1.fastq.gz' , 'test_1.R1.fastq.gz' ]),
470
+ ('raw_reverse_seqs' , False , [])]}
440
471
self .assertEqual (obs , exp )
441
472
442
- obs = study_files_get_req ('admin@foo.bar' , new_study .id , 1 , 'FASTQ' )
443
- exp = {'status' : 'success' ,
444
- 'message' : '' ,
445
- 'remaining' : [],
446
- 'file_types' : [('raw_barcodes' , True , []),
447
- ('raw_forward_seqs' , True , []),
448
- ('raw_reverse_seqs' , False , [])],
449
- 'num_prefixes' : 1 ,
450
- 'artifacts' : []}
473
+ # let's add reverse
474
+ filenames = ['test_1.R2.fastq.gz' , 'test_2.R2.fastq.gz' ]
475
+ for f in filenames :
476
+ fpt = join (study_upload_dir , f )
477
+ open (fpt , 'w' , 0 ).close ()
478
+ self ._clean_up_files .append (fpt )
479
+ obs = study_files_get_req (
480
+ 'shared@foo.bar' , 1 , pt .id , 'per_sample_FASTQ' )
481
+ exp = {'status' : 'success' , 'num_prefixes' : 2 , 'artifacts' : [],
482
+ 'remaining' : [], 'message' : '' ,
483
+ 'file_types' : [('raw_forward_seqs' , True ,
484
+ ['test_2.R1.fastq.gz' , 'test_1.R1.fastq.gz' ]),
485
+ ('raw_reverse_seqs' , False ,
486
+ ['test_2.R2.fastq.gz' , 'test_1.R2.fastq.gz' ])]}
451
487
self .assertEqual (obs , exp )
452
488
453
- # Create some 'sff' files
454
- upload_dir = qdb .util .get_mountpoint ("uploads" )[0 ][1 ]
455
- study_upload_dir = join (upload_dir , str (new_study .id ))
456
- fps = []
457
-
458
- for i in range (2 ):
459
- if not exists (study_upload_dir ):
460
- mkdir (study_upload_dir )
461
- fd , fp = mkstemp (suffix = ".sff" , dir = study_upload_dir )
462
- close (fd )
463
- with open (fp , 'w' ) as f :
464
- f .write ('\n ' )
465
- fps .append (fp )
466
-
467
- self ._clean_up_files .extend (fps )
468
-
469
- obs = study_files_get_req ('test@foo.bar' , new_study .id , 1 , 'SFF' )
470
- exp = {'status' : 'success' ,
489
+ # let's an extra file that matches
490
+ filenames = ['test_1.R3.fastq.gz' ]
491
+ for f in filenames :
492
+ fpt = join (study_upload_dir , f )
493
+ open (fpt , 'w' , 0 ).close ()
494
+ self ._clean_up_files .append (fpt )
495
+ obs = study_files_get_req (
496
+ 'shared@foo.bar' , 1 , pt .id , 'per_sample_FASTQ' )
497
+ exp = {'status' : 'success' , 'num_prefixes' : 2 , 'artifacts' : [],
498
+ 'remaining' : ['test_1.R1.fastq.gz' , 'test_1.R2.fastq.gz' ,
499
+ 'test_1.R3.fastq.gz' ],
471
500
'message' : '' ,
472
- 'remaining ' : [basename ( fpath ) for fpath in sorted ( fps )] ,
473
- 'file_types' : [( 'raw_sff' , True , [])] ,
474
- 'num_prefixes' : 0 ,
475
- 'artifacts' : [ ]}
501
+ 'file_types ' : [( 'raw_forward_seqs' , True ,
502
+ [ 'test_2.R1.fastq.gz' ]) ,
503
+ ( 'raw_reverse_seqs' , False ,
504
+ [ 'test_2.R2.fastq.gz' ]) ]}
476
505
self .assertEqual (obs , exp )
477
506
507
+ PREP .delete (pt .id )
508
+
509
+
478
510
if __name__ == '__main__' :
479
511
main ()
0 commit comments