diff --git a/clarity_epp.py b/clarity_epp.py index 88ecfc6..917124c 100755 --- a/clarity_epp.py +++ b/clarity_epp.py @@ -115,9 +115,9 @@ def export_removed_samples(args): clarity_epp.export.sample.removed_samples(lims, args.output_file) -def export_sample_udf(args): - "Export sample udf table.""" - clarity_epp.export.sample.sample_udf( +def export_sample_udf_dx(args): + "Export table sample udf (Dx-udf only)""" + clarity_epp.export.sample.sample_udf_dx( lims, args.output_file, args.artifact_name, @@ -341,18 +341,18 @@ def placement_pipetting(args): ) parser_export_removed_samples.set_defaults(func=export_removed_samples) - parser_export_sample_udf = subparser_export.add_parser( - 'sample_udf', help='Export sample udf table.', parents=[output_parser] + parser_export_sample_udf_dx = subparser_export.add_parser( + 'sample_udf_dx', help='Export sample udf table (Dx-udf only).', parents=[output_parser] ) - parser_export_sample_udf_group = parser_export_sample_udf.add_mutually_exclusive_group(required=True) - parser_export_sample_udf_group.add_argument('-a', '--artifact_name', help='Artifact name') - parser_export_sample_udf_group.add_argument('-r', '--sequencing_run', help='Sequencing run name') - parser_export_sample_udf.add_argument( + parser_export_sample_udf_dx_group = parser_export_sample_udf_dx.add_mutually_exclusive_group(required=True) + parser_export_sample_udf_dx_group.add_argument('-a', '--artifact_name', help='Artifact name') + parser_export_sample_udf_dx_group.add_argument('-r', '--sequencing_run', help='Sequencing run name') + parser_export_sample_udf_dx.add_argument( '-p', '--sequencing_run_project', nargs='?', help='Sequencing run project name' ) - parser_export_sample_udf.add_argument('-u', '--udf', help='udf to query') - parser_export_sample_udf.add_argument('-c', '--column_name', help='naming of column') - parser_export_sample_udf.set_defaults(func=export_sample_udf) + parser_export_sample_udf_dx.add_argument('-u', '--udf', help='udf to query (limited to only Dx-udf)') + parser_export_sample_udf_dx.add_argument('-c', '--column_name', help='naming of column') + parser_export_sample_udf_dx.set_defaults(func=export_sample_udf_dx) parser_export_sample_related_mip = subparser_export.add_parser( 'sample_related_mip', help='Export related mip samples.', parents=[output_parser] diff --git a/clarity_epp/export/sample.py b/clarity_epp/export/sample.py index 5a61432..1d02d84 100644 --- a/clarity_epp/export/sample.py +++ b/clarity_epp/export/sample.py @@ -145,20 +145,30 @@ def get_samples(lims, artifact_name=None, sequencing_run=None, sequencing_run_pr return samples -def sample_udf(lims, output_file, artifact_name=None, sequencing_run=None, sequencing_run_project=None, udf=None, column_name=None): - """Export table with sample udf.""" +def sample_udf_dx(lims, output_file, artifact_name=None, sequencing_run=None, sequencing_run_project=None, udf=None, column_name=None): + """Export table with sample udf (Dx-udf only).""" samples = get_samples(lims, artifact_name, sequencing_run, sequencing_run_project) # Write result if samples: output_file.write(f'Sample\t{column_name}\n') for sample_name, sample in samples.items(): if udf in sample.udf: - output_file.write( - '{sample}\t{udf_value}\n'.format( - sample=sample_name, + if 'Dx' in udf: + if type (sample.udf[udf]) == str: udf_value=sample.udf[udf].split(';')[0] # select newest udf value + else: + udf_value=sample.udf[udf] + + output_file.write( + '{sample}\t{udf_value}\n'.format( + sample=sample_name, + udf_value=udf_value + ) + ) + else: + output_file.write( + f'Warning, udf is not type \'Dx\'\n' ) - ) else: output_file.write( '{sample}\t{udf_value}\n'.format( diff --git a/tests/test_export_sample.py b/tests/test_export_sample.py index 92df0b0..e62fded 100644 --- a/tests/test_export_sample.py +++ b/tests/test_export_sample.py @@ -9,41 +9,51 @@ def __init__(self, udf): def test_sample_udf_withudf(mocker, capsys): - # Test output for sample with known udf in database + # Test output for sample with known Dx-udf in database + samples_mock[sample_name] = MyMock({"Dx geslacht": "Vrouw"}) patched_clarity_epp = mocker.patch( 'clarity_epp.export.sample.get_samples', return_value=samples_mock ) - sample.sample_udf("lims", sys.stdout, udf=udf_value, column_name=column_name) + sample.sample_udf_dx("lims", sys.stdout, udf="Dx geslacht", column_name=column_name) captured = capsys.readouterr() - assert captured.out == f"Sample\t{column_name}\n{sample_name}\t{geslacht}\n" + assert captured.out == f"Sample\t{column_name}\n{sample_name}\tVrouw\n" def test_sample_udf_withoutudf(mocker, capsys): # Test output for sample with no known udf in database + samples_mock[sample_name] = MyMock({"Dx geslacht": "Vrouw"}) patched_clarity_epp = mocker.patch( 'clarity_epp.export.sample.get_samples', return_value=samples_mock ) - sample.sample_udf("lims", sys.stdout, udf="udf2", column_name=column_name) + sample.sample_udf_dx("lims", sys.stdout, udf="udf2", column_name=column_name) captured = capsys.readouterr() assert captured.out == f"Sample\t{column_name}\n{sample_name}\tunknown\n" +def test_sample_udf_withoutdxudf(mocker, capsys): + # Test output for sample with known udf in database, but not Dx-udf + samples_mock[sample_name] = MyMock({"Geslacht": "Vrouw"}) + patched_clarity_epp = mocker.patch( + 'clarity_epp.export.sample.get_samples', + return_value=samples_mock + ) + sample.sample_udf_dx("lims", sys.stdout, udf="Geslacht", column_name=column_name) + captured = capsys.readouterr() + assert captured.out == f"Sample\t{column_name}\nWarning, udf is not type \'Dx\'\n" + def test_sample_udf_nosamples(mocker, capsys): # Test output for sample not known in database + samples_mock[sample_name] = MyMock({"Dx geslacht": "Vrouw"}) patched_clarity_epp = mocker.patch( 'clarity_epp.export.sample.get_samples', return_value=None ) - sample.sample_udf("lims", sys.stdout) + sample.sample_udf_dx("lims", sys.stdout) captured = capsys.readouterr() assert captured.out == "no_sample_found\n" - column_name = "test_column" sample_name = "test_sample" -udf_value = "Dx geslacht" -geslacht = "Vrouw" samples_mock = {} -samples_mock[sample_name] = MyMock({udf_value: geslacht})