|
from urllib.parse import urlparse |
|
|
|
from openapi_parser import parse |
|
|
|
try: |
|
from application.parser.file.base_parser import BaseParser |
|
except ModuleNotFoundError: |
|
from base_parser import BaseParser |
|
|
|
|
|
class OpenAPI3Parser(BaseParser): |
|
def init_parser(self) -> None: |
|
return super().init_parser() |
|
|
|
def get_base_urls(self, urls): |
|
base_urls = [] |
|
for i in urls: |
|
parsed_url = urlparse(i) |
|
base_url = parsed_url.scheme + "://" + parsed_url.netloc |
|
if base_url not in base_urls: |
|
base_urls.append(base_url) |
|
return base_urls |
|
|
|
def get_info_from_paths(self, path): |
|
info = "" |
|
if path.operations: |
|
for operation in path.operations: |
|
info += ( |
|
f"\n{operation.method.value}=" |
|
f"{operation.responses[0].description}" |
|
) |
|
return info |
|
|
|
def parse_file(self, file_path): |
|
data = parse(file_path) |
|
results = "" |
|
base_urls = self.get_base_urls(link.url for link in data.servers) |
|
base_urls = ",".join([base_url for base_url in base_urls]) |
|
results += f"Base URL:{base_urls}\n" |
|
i = 1 |
|
for path in data.paths: |
|
info = self.get_info_from_paths(path) |
|
results += ( |
|
f"Path{i}: {path.url}\n" |
|
f"description: {path.description}\n" |
|
f"parameters: {path.parameters}\nmethods: {info}\n" |
|
) |
|
i += 1 |
|
with open("results.txt", "w") as f: |
|
f.write(results) |
|
return results |
|
|