diff --git a/src/sourmash/__main__.py b/src/sourmash/__main__.py index 59e59eaa22..74fdf270c0 100644 --- a/src/sourmash/__main__.py +++ b/src/sourmash/__main__.py @@ -7,7 +7,7 @@ def main(arglist=None): import sourmash - args = sourmash.cli.get_parser().parse_args(arglist) + args = sourmash.cli.parse_args(arglist) if hasattr(args, 'subcmd'): mod = getattr(sourmash.cli, args.cmd) submod = getattr(mod, args.subcmd) diff --git a/src/sourmash/cli/__init__.py b/src/sourmash/cli/__init__.py index 297693db45..575bbdb0f5 100644 --- a/src/sourmash/cli/__init__.py +++ b/src/sourmash/cli/__init__.py @@ -141,3 +141,20 @@ def get_parser(): getattr(sys.modules[__name__], op).subparser(sub) parser._action_groups.reverse() return parser + + +def parse_args(arglist=None): + """ + Return an argparse 'args' object from parsing arglist. + + By default pulls arguments from sys.argv. + + Example usage: + + ``` + args = parse_args(['sig', 'filter', '-m', '10']) + + sourmash.sig.filter.__main__.filter(args) + ``` + """ + return get_parser().parse_args(arglist) diff --git a/src/sourmash/sig/__init__.py b/src/sourmash/sig/__init__.py index c3f696f8fd..0fafe39246 100644 --- a/src/sourmash/sig/__init__.py +++ b/src/sourmash/sig/__init__.py @@ -1,2 +1,2 @@ -from .__main__ import main +from .__main__ import * # bring all functions into top-level from . import grep diff --git a/tests/test_cmd_signature.py b/tests/test_cmd_signature.py index 15da197df6..680924568a 100644 --- a/tests/test_cmd_signature.py +++ b/tests/test_cmd_signature.py @@ -45,6 +45,15 @@ def test_run_sourmash_sig_cmd(): assert status != 0 # no args provided, ok ;) +def test_run_cat_via_parse_args(): + # run a command ('sourmash.sig.cat') with args constructed via parse_args + import sourmash.sig, sourmash.cli + sig47 = utils.get_test_data('47.fa.sig') + + args = sourmash.cli.parse_args(['sig', 'cat', sig47]) + sourmash.sig.cat(args) + + def test_sig_merge_1_use_full_signature_in_cmd(runtmp): c = runtmp diff --git a/tests/test_index.py b/tests/test_index.py index f11f5d6853..af0c1da890 100644 --- a/tests/test_index.py +++ b/tests/test_index.py @@ -1947,13 +1947,15 @@ def test_standalone_manifest_signatures_prefix_fail(runtmp): row['internal_location'] = os.path.basename(row['internal_location']) ## got a manifest! ok, now test out StandaloneManifestIndex - mm = StandaloneManifestIndex(mi.manifest, None, prefix='foo') + mm = StandaloneManifestIndex(mi.manifest, None, + prefix=runtmp.output('foo')) # should fail with pytest.raises(ValueError) as exc: list(mm.signatures()) - assert "Error while reading signatures from 'foo/47.fa.sig'" in str(exc) + assert "Error while reading signatures from " in str(exc) + assert "foo/47.fa.sig'" in str(exc) def test_standalone_manifest_load_from_dir(runtmp): diff --git a/tests/test_sourmash.py b/tests/test_sourmash.py index b25ff94bc5..9d113a3c6e 100644 --- a/tests/test_sourmash.py +++ b/tests/test_sourmash.py @@ -332,6 +332,15 @@ def test_compare_quiet(runtmp): assert not c.last_result.err +def test_compare_do_traverse_directory_parse_args(runtmp): + # test 'compare' on a directory, using sourmash.cli.parse_args. + import sourmash.commands, sourmash.cli + args = sourmash.cli.parse_args(['compare', '-k', '21', '--dna', + utils.get_test_data('compare')]) + + sourmash.commands.compare(args) + + def test_compare_do_traverse_directory(runtmp): # test 'compare' on a directory c = runtmp