Skip to content

Commit

Permalink
Merge branch 'main' into 99_transform_amrfinder_metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
VinzentRisch committed Jul 26, 2024
2 parents 9c97cba + a895429 commit a9463bb
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 1 deletion.
5 changes: 5 additions & 0 deletions q2_amr/amrfinderplus/sample_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ def annotate_sample_data_amrfinderplus(
curated_ident: bool = False,
coverage_min: float = 0.5,
translation_table: str = "11",
report_common: bool = False,
gpipe_org: bool = False,
threads: int = None,
) -> (
AMRFinderPlusAnnotationsDirFmt,
Expand Down Expand Up @@ -72,6 +74,9 @@ def annotate_sample_data_amrfinderplus(
curated_ident=curated_ident,
coverage_min=coverage_min,
translation_table=translation_table,
annotation_format=None,
report_common=report_common,
gpipe_org=gpipe_org,
threads=threads,
)

Expand Down
3 changes: 3 additions & 0 deletions q2_amr/amrfinderplus/tests/test_sample_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ def mock_run_amrfinderplus_n(
curated_ident,
coverage_min,
translation_table,
annotation_format,
report_common,
gpipe_org,
threads,
):
with open(os.path.join(working_dir, "amr_annotations.tsv"), "w"):
Expand Down
56 changes: 56 additions & 0 deletions q2_amr/amrfinderplus/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ def test_run_amrfinderplus_n(self, mock_run_command):
curated_ident=False,
coverage_min=1,
translation_table="11",
annotation_format="prodigal",
report_common=True,
gpipe_org=True,
threads=4,
)
mock_run_command.assert_called_once_with(
Expand Down Expand Up @@ -57,6 +60,10 @@ def test_run_amrfinderplus_n(self, mock_run_command):
"1",
"--translation_table",
"11",
"--annotation_format",
"prodigal",
"--report_common",
"--gpipe_org",
],
"path_dir",
verbose=True,
Expand All @@ -77,6 +84,9 @@ def test_run_amrfinderplus_n_minimal(self, mock_run_command):
curated_ident=True,
coverage_min=None,
translation_table=None,
annotation_format=None,
report_common=False,
gpipe_org=False,
threads=None,
)
mock_run_command.assert_called_once_with(
Expand All @@ -93,3 +103,49 @@ def test_run_amrfinderplus_n_minimal(self, mock_run_command):
"path_dir",
verbose=True,
)

@patch("q2_amr.amrfinderplus.utils.run_command")
def test_run_amrfinderplus_n_value_error_report_common(self, mock_run_command):
with self.assertRaisesRegex(
ValueError, "--p-report-common requires " "--p-plus and --p-organism"
):
run_amrfinderplus_n(
working_dir="path_dir",
amrfinderplus_db="amrfinderplus_db",
dna_sequences=None,
protein_sequences=None,
gff=None,
organism=None,
plus=False,
report_all_equal=False,
ident_min=None,
curated_ident=True,
coverage_min=None,
translation_table=None,
annotation_format=None,
report_common=True,
gpipe_org=False,
threads=None,
)

@patch("q2_amr.amrfinderplus.utils.run_command")
def test_run_amrfinderplus_n_value_error_gpipe_org(self, mock_run_command):
with self.assertRaisesRegex(ValueError, "--p-gpipe_org requires --p-organism"):
run_amrfinderplus_n(
working_dir="path_dir",
amrfinderplus_db="amrfinderplus_db",
dna_sequences=None,
protein_sequences=None,
gff=None,
organism=None,
plus=False,
report_all_equal=False,
ident_min=None,
curated_ident=True,
coverage_min=None,
translation_table=None,
annotation_format=None,
report_common=False,
gpipe_org=True,
threads=None,
)
16 changes: 16 additions & 0 deletions q2_amr/amrfinderplus/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,17 @@ def run_amrfinderplus_n(
curated_ident,
coverage_min,
translation_table,
annotation_format,
report_common,
gpipe_org,
threads,
):
# Check for unallowed parameter combinations
if report_common and (not plus or not organism):
raise ValueError("--p-report-common requires --p-plus and --p-organism")
if gpipe_org and not organism:
raise ValueError("--p-gpipe_org requires --p-organism")

cmd = [
"amrfinder",
"--database",
Expand Down Expand Up @@ -73,6 +82,13 @@ def run_amrfinderplus_n(
cmd.extend(["--coverage_min", str(coverage_min)])
if translation_table:
cmd.extend(["--translation_table", str(translation_table)])
if annotation_format:
cmd.extend(["--annotation_format", str(annotation_format)])
if report_common:
cmd.append("--report_common")
if gpipe_org:
cmd.append("--gpipe_org")

try:
run_command(cmd, working_dir, verbose=True)
except subprocess.CalledProcessError as e:
Expand Down
43 changes: 42 additions & 1 deletion q2_amr/plugin_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,35 @@
"Vibrio_vulnificus",
]

organisms_gpipe = [
"Acinetobacter",
"Burkholderia_cepacia_complex",
"Burkholderia_pseudomallei",
"Campylobacter",
"Citrobacter_freundii",
"Clostridioides_difficile",
"Enterobacter_asburiae",
"Enterobacter_cloacae",
"Enterococcus_faecalis",
"Enterococcus_faecium",
"Escherichia_coli_Shigella",
"Klebsiella_oxytoca",
"Klebsiella",
"Neisseria_gonorrhoeae",
"Neisseria_meningitidis",
"Pseudomonas_aeruginosa",
"Salmonella",
"Serratia",
"Staphylococcus_aureus",
"Staphylococcus_pseudintermedius",
"Streptococcus_agalactiae",
"Streptococcus_pneumoniae",
"Streptococcus_pyogenes",
"Vibrio_cholerae",
"Vibrio_parahaemolyticus",
"Vibrio_vulnificus",
]

translation_tables = [
"1",
"2",
Expand Down Expand Up @@ -1156,20 +1185,29 @@
"33",
]

P_gpipe_org, P_organism, _ = TypeMap(
{
(Bool % Choices(True), Str % Choices(organisms_gpipe)): Int,
(Bool % Choices(False), Str % Choices(organisms)): Int,
}
)

plugin.methods.register_function(
function=annotate_sample_data_amrfinderplus,
inputs={
"sequences": SampleData[MAGs | Contigs],
"amrfinderplus_db": AMRFinderPlusDatabase,
},
parameters={
"organism": Str % Choices(organisms),
"organism": P_organism,
"plus": Bool,
"report_all_equal": Bool,
"ident_min": Float % Range(0, 1, inclusive_start=True, inclusive_end=True),
"curated_ident": Bool,
"coverage_min": Float % Range(0, 1, inclusive_start=True, inclusive_end=True),
"translation_table": Str % Choices(translation_tables),
"report_common": Bool,
"gpipe_org": P_gpipe_org,
"threads": Int % Range(0, None, inclusive_start=False),
},
outputs=[
Expand Down Expand Up @@ -1204,6 +1242,9 @@
"coverage_min": "Minimum proportion of reference gene covered for a "
"BLAST-based hit (Methods BLAST or PARTIAL).",
"translation_table": "Translation table used for BLASTX.",
"report_common": "Report proteins common to a taxonomy group.",
"gpipe_org": "Use Pathogen Detection taxgroup names as arguments to the "
"organism option.",
"threads": "The number of threads to use for processing. AMRFinderPlus "
"defaults to 4 on hosts with >= 4 cores. Setting this number higher"
" than the number of cores on the running host may cause blastp to "
Expand Down

0 comments on commit a9463bb

Please sign in to comment.