Source code for pact_testgen.cli
"""Console script for pact_testgen."""
import argparse
import sys
from pathlib import Path
from pact_testgen import __version__
from pact_testgen.pact_testgen import run
from pact_testgen.files import merge_is_available
[docs]def directory(path: str) -> Path:
path = Path(path)
if path.is_dir():
return path
raise argparse.ArgumentError()
[docs]def main():
"""Console script for pact_testgen."""
parser = argparse.ArgumentParser()
parser.add_argument("pact_file", help="Path to a Pact file.")
parser.add_argument(
"output_dir", help="Output for generated Python files.", type=directory
)
parser.add_argument(
"--base-class",
default="django.test.TestCase",
help=("Python path to the TestCase which generated test cases will subclass."),
)
parser.add_argument(
"--line-length",
type=int,
default=88,
help="Target line length for generated files.",
)
parser.add_argument("--debug", action="store_true")
parser.add_argument(
"--version",
action="version",
version="%(prog)s v{version}".format(version=__version__),
)
parser.add_argument("-q", "--quiet", action="store_true", help="Silence output")
parser.add_argument(
"-m",
"--merge-provider-state-file",
action="store_true",
help="Attempt to merge new provider state functions into existing "
"provider state file. Only available on Python 3.9+.",
)
# Reserve -b for Pact Broker support
args = parser.parse_args()
if args.merge_provider_state_file and not merge_is_available():
print(
"Merge provider state file is only available in Python 3.9+.",
file=sys.stderr,
)
return 1
try:
run(
base_class=args.base_class,
pact_file=args.pact_file,
output_dir=args.output_dir,
line_length=args.line_length,
merge_ps_file=args.merge_provider_state_file,
)
return 0
except Exception as e:
if args.debug:
raise
print(f"An error occurred: {e}", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main()) # pragma: no cover