Skip to content

Commit

Permalink
Merge pull request #80 from UMCUGenetics/feature/gendercheckY
Browse files Browse the repository at this point in the history
Feature/gendercheckY
  • Loading branch information
melferink authored Mar 5, 2024
2 parents 97a16df + d263926 commit c5d22cd
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 21 deletions.
30 changes: 19 additions & 11 deletions clarity_epp.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,16 @@ def export_removed_samples(args):
clarity_epp.export.sample.removed_samples(lims, args.output_file)


def export_sample_indications(args):
"""Export sample indication table."""
clarity_epp.export.sample.sample_indications(
lims, args.output_file, args.artifact_name, args.sequencing_run, args.sequencing_run_project
def export_sample_udf(args):
"Export sample udf table."""
clarity_epp.export.sample.sample_udf(
lims,
args.output_file,
args.artifact_name,
args.sequencing_run,
args.sequencing_run_project,
args.udf,
args.column_name
)


Expand Down Expand Up @@ -335,16 +341,18 @@ def placement_pipetting(args):
)
parser_export_removed_samples.set_defaults(func=export_removed_samples)

parser_export_sample_indications = subparser_export.add_parser(
'sample_indications', help='Export sample indication table.', parents=[output_parser]
parser_export_sample_udf = subparser_export.add_parser(
'sample_udf', help='Export sample udf table.', parents=[output_parser]
)
parser_export_sample_indications_group = parser_export_sample_indications.add_mutually_exclusive_group(required=True)
parser_export_sample_indications_group.add_argument('-a', '--artifact_name', help='Artifact name')
parser_export_sample_indications_group.add_argument('-r', '--sequencing_run', help='Sequencing run name')
parser_export_sample_indications.add_argument(
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(
'-p', '--sequencing_run_project', nargs='?', help='Sequencing run project name'
)
parser_export_sample_indications.set_defaults(func=export_sample_indications)
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_related_mip = subparser_export.add_parser(
'sample_related_mip', help='Export related mip samples.', parents=[output_parser]
Expand Down
2 changes: 1 addition & 1 deletion clarity_epp/export/ped.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def create_file(lims, process_id, output_file):
ped_sample['sex'] = 0

# Determine affection
ped_sample['affection'] = 0 # unkown
ped_sample['affection'] = 0 # unknown
if 'Bevestiging diagnose' in sample.udf['Dx Onderzoeksreden']:
ped_sample['affection'] = 2 # affected
elif 'Informativiteitstest' in sample.udf['Dx Onderzoeksreden']:
Expand Down
22 changes: 14 additions & 8 deletions clarity_epp/export/sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ def removed_samples(lims, output_file):
))


def sample_indications(lims, output_file, artifact_name=None, sequencing_run=None, sequencing_run_project=None):
"""Export table with sample indications. Lookup samples by sample name or sequencing run (project)."""
def get_samples(lims, artifact_name=None, sequencing_run=None, sequencing_run_project=None):
"""Lookup samples by sample name or sequencing run (project)."""
samples = []

# Get samples by artifact_name
Expand All @@ -142,22 +142,28 @@ def sample_indications(lims, output_file, artifact_name=None, sequencing_run=Non
artifacts = lims.get_artifacts(type='Analyte', udf=udf_query)
samples = {artifact.name: artifact.samples[0] for artifact in artifacts}

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."""
samples = get_samples(lims, artifact_name, sequencing_run, sequencing_run_project)
# Write result
if samples:
output_file.write('Sample\tIndication\n')
output_file.write(f'Sample\t{column_name}\n')
for sample_name, sample in samples.items():
if 'Dx Onderzoeksindicatie' in sample.udf:
if udf in sample.udf:
output_file.write(
'{sample}\t{indication}\n'.format(
'{sample}\t{udf_value}\n'.format(
sample=sample_name,
indication=sample.udf['Dx Onderzoeksindicatie'].split(';')[0] # select newest indication
udf_value=sample.udf[udf].split(';')[0] # select newest udf value
)
)
else:
output_file.write(
'{sample}\t{indication}\n'.format(
'{sample}\t{udf_value}\n'.format(
sample=sample_name,
indication='unkown_indication'
udf_value='unknown'
)
)
else:
Expand Down
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
genologics==0.3.20
argparse==1.4.0
xmltodict==0.12.0
xmltodict==0.12.0
pytest==7.0.1
pytest-mock==3.6.1
49 changes: 49 additions & 0 deletions tests/test_export_sample.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import sys

from clarity_epp.export import sample


class MyMock:
def __init__(self, udf):
self.udf = udf


def test_sample_udf_withudf(mocker, capsys):
# Test output for sample with known udf in database
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)
captured = capsys.readouterr()
assert captured.out == f"Sample\t{column_name}\n{sample_name}\t{geslacht}\n"


def test_sample_udf_withoutudf(mocker, capsys):
# Test output for sample with no known udf in database
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)
captured = capsys.readouterr()
assert captured.out == f"Sample\t{column_name}\n{sample_name}\tunknown\n"


def test_sample_udf_nosamples(mocker, capsys):
# Test output for sample not known in database
patched_clarity_epp = mocker.patch(
'clarity_epp.export.sample.get_samples',
return_value=None
)
sample.sample_udf("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})

0 comments on commit c5d22cd

Please sign in to comment.