diff --git a/monkeytype/cli.py b/monkeytype/cli.py index 21a3a2f..ab85726 100644 --- a/monkeytype/cli.py +++ b/monkeytype/cli.py @@ -6,6 +6,7 @@ import argparse import importlib import inspect +import os import os.path import runpy import subprocess @@ -41,6 +42,11 @@ def module_path(path: str) -> Tuple[str, Optional[str]]: parts = path.split(':', 1) module = parts.pop(0) qualname = parts[0] if parts else None + if os.sep in module: # Smells like a path + raise argparse.ArgumentTypeError( + f'{module} does not look like a valid Python import path' + ) + return module, qualname diff --git a/tests/test_cli.py b/tests/test_cli.py index 9816338..873af71 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -96,3 +96,12 @@ def test_cli_context_manager_activated(capsys, stdout, stderr): assert out == "IN SETUP: stub\nIN TEARDOWN: stub\n" assert err == "" assert ret == 0 + + +def test_pathlike_parameter(store_data, capsys): + store, db_file = store_data + with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): + with pytest.raises(SystemExit): + cli.main(['stub', 'test/foo.py:bar'], stdout, stderr) + out, err = capsys.readouterr() + assert "test/foo.py does not look like a valid Python import path" in err