def test_run_form_invalid_lowercase(self): form = RunNameForm({ 'run_name': '1234567_aaa' }) self.assertFalse(form.is_valid()) try: form.cleaned_data.get('run_name') except forms.ValidationError as e: self.assertEqual('BadRunName', e.code)
def test_run_form_invalid_name_date_second(self): form = RunNameForm({ 'run_name': 'M02345_191215' }) self.assertFalse(form.is_valid()) try: form.cleaned_data.get('run_name') except forms.ValidationError as e: self.assertEqual('BadRunName', e.code)
def upload_metadata(request): form = RunNameForm() if request.method == 'POST': form = RunNameForm(request.POST) if form.is_valid(): if not SequencingRun.objects.filter( run_name=form.cleaned_data.get('run_name')).exists(): sequencing_run, created = SequencingRun.objects.update_or_create( run_name=form.cleaned_data.get('run_name'), seqids=list()) else: sequencing_run = SequencingRun.objects.get( run_name=form.cleaned_data.get('run_name')) files = [ request.FILES.get('file[%d]' % i) for i in range(0, len(request.FILES)) ] container_name = sequencing_run.run_name.lower().replace('_', '-') blob_client = BlockBlobService( account_name=settings.AZURE_ACCOUNT_NAME, account_key=settings.AZURE_ACCOUNT_KEY) blob_client.create_container(container_name) for item in files: blob_client.create_blob_from_bytes( container_name=container_name, blob_name=item.name, blob=item.read()) if item.name == 'SampleSheet.csv': instance = DataFile(sequencing_run=sequencing_run, data_file=item) instance.save() with open( 'olc_webportalv2/media/{run_name}/SampleSheet.csv'. format(run_name=str(sequencing_run))) as f: lines = f.readlines() seqid_start = False seqid_list = list() for i in range(len(lines)): if seqid_start: seqid = lines[i].split(',')[0] seqid_list.append(seqid) if 'Sample_ID' in lines[i]: seqid_start = True SequencingRun.objects.filter(pk=sequencing_run.pk).update( seqids=seqid_list) return redirect('cowbat:upload_interop', sequencing_run_pk=sequencing_run.pk) return render(request, 'cowbat/upload_metadata.html', {'form': form})
def test_run_form_external_lab(self): form = RunNameForm({ 'run_name': '191218_CAL' }) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data.get('run_name'), '191218_CAL')
def test_run_form_miseq_id(self): form = RunNameForm({ 'run_name': '191218_M02345' }) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data.get('run_name'), '191218_M02345')
def upload_metadata(request): form = RunNameForm() if request.method == 'POST': form = RunNameForm(request.POST) if form.is_valid(): if not SequencingRun.objects.filter( run_name=form.cleaned_data.get('run_name')).exists(): sequencing_run, created = SequencingRun.objects\ .update_or_create(run_name=form.cleaned_data.get('run_name'), seqids=list()) else: sequencing_run = SequencingRun.objects.get( run_name=form.cleaned_data.get('run_name')) files = [ request.FILES.get('file[%d]' % i) for i in range(0, len(request.FILES)) ] container_name = sequencing_run.run_name.lower().replace('_', '-') blob_client = BlockBlobService( account_name=settings.AZURE_ACCOUNT_NAME, account_key=settings.AZURE_ACCOUNT_KEY) blob_client.create_container(container_name) for item in files: blob_client.create_blob_from_bytes( container_name=container_name, blob_name=item.name, blob=item.read()) if item.name == 'SampleSheet.csv': instance = DataFile(sequencing_run=sequencing_run, data_file=item) instance.save() with open( 'olc_webportalv2/media/{run_name}/SampleSheet.csv'. format(run_name=str(sequencing_run))) as f: lines = f.readlines() seqid_start = False seqid_list = list() realtime_dict = dict() # Sample plate column in SampleSheet should have Lab/Whatever other ID. # Store that data in a dictionary with SeqIDs as keys and LabIDs as values sample_plate_dict = dict() for i in range(len(lines)): if seqid_start: seqid = lines[i].split(',')[0] labid = lines[i].split(',')[2] sample_plate_dict[seqid] = labid try: realtime = lines[i].rstrip().split(',')[9] except IndexError: realtime = '' seqid_list.append(seqid) if realtime == 'TRUE' or realtime == 'VRAI': realtime_dict[ seqid] = 'True' # Not sure JSONField this gets stored in can handle bool else: realtime_dict[seqid] = 'False' if 'Sample_ID' in lines[i]: seqid_start = True SequencingRun.objects.filter(pk=sequencing_run.pk).update( seqids=seqid_list, realtime_strains=realtime_dict, sample_plate=sample_plate_dict) # TODO: Change this back to verify_realtime once we've gotten the OK from external labs to make them # validate their data. # return redirect('cowbat:verify_realtime', sequencing_run_pk=sequencing_run.pk) return redirect('cowbat:upload_interop', sequencing_run_pk=sequencing_run.pk) return render(request, 'cowbat/upload_metadata.html', {'form': form})