You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitmproxy2swagger/mitmproxy2swagger/testing_util.py

75 lines
1.7 KiB

# -*- coding: utf-8 -*-
import tempfile
from typing import Any, List, Optional
import ruamel.yaml as ruamel
from .mitmproxy2swagger import main
def get_nested_key(obj: Any, path: str) -> Any:
"""Gets a nested key from a dict."""
keys = path.split(".")
for key in keys:
if not isinstance(obj, dict):
return None
if key not in obj:
return None
obj = obj[key]
return obj
def mitmproxy2swagger_e2e_test(
input_file: str, url_prefix: str, extra_args: Optional[List[str]] = None
) -> Any:
"""Runs mitmproxy2swagger on the given input file twice, and returns the detected
endpoints."""
yaml_tmp_path = tempfile.mktemp(suffix=".yaml", prefix="sklep.lisek.")
main(
[
"-i",
input_file,
"-o",
yaml_tmp_path,
"-p",
url_prefix,
]
+ (extra_args or [])
)
yaml = ruamel.YAML()
data = None
# try to parse the file
with open(yaml_tmp_path, "r") as f:
data = yaml.load(f.read())
assert data is not None
assert "x-path-templates" in data
assert "servers" in data
# remove all of the ignore:prefixes in x-path-templates
data["x-path-templates"] = [
x.replace("ignore:", "") for x in data["x-path-templates"]
]
# save the file
with open(yaml_tmp_path, "w") as f:
yaml.dump(data, f)
# run mitmproxy2swagger again
main(
[
"-i",
input_file,
"-o",
yaml_tmp_path,
"-p",
url_prefix,
]
+ (extra_args or [])
)
# load the file again
with open(yaml_tmp_path, "r") as f:
data = yaml.load(f.read())
return data