Files
OpenBB/custom_pre_commit/check_doc.py
Colin Delahunty 141dd68e68 Removed prints (#5367)
* Removed prints

* FIxed typing

* FIxed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fixed typing

* Fix

* Reverted stuff
2023-08-23 18:40:31 +00:00

100 lines
3.0 KiB
Python

import argparse
import os
import sys
from typing import List, Optional
def clean_input(text: str) -> List[str]:
text = text.replace(" str ", "")
text = text.strip()
text = text.replace("CHOICES_COMMANDS", "")
text = text.replace("=", "")
text = text.replace("[", "")
text = text.replace("]", "")
text = text.replace("[str]", "")
text = text.replace("List", "")
text = text.replace(":", "")
text = text.replace("str ", "")
text = text.replace('"', "")
text = text.replace("'", "")
text_list = text.split(",")
return [x.strip() for x in text_list if x]
def main(ignore_files: Optional[str], ignore_commands: Optional[str]):
"""Checks commands in the repository to ensure they are documented
Parameters
----------
ignore_files : Optional[str]
Files that should not be checked
ignore_commands : Optional[str]
Commands that should not be checked
"""
ignore_file_list = ignore_files.split(",") if ignore_files else []
ignore_cmds_list = ignore_commands.split(",") if ignore_commands else []
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
gst_path = os.path.join(path, "openbb_terminal/")
main_yaml_filename = os.path.join(path, "website/data/menu/main.yml")
files = []
commands = []
for r, _, f in os.walk(gst_path):
for file in f:
if file.endswith("_controller.py") and file not in ignore_file_list:
files.append(os.path.join(r, file))
record = 0
for item in files:
with open(item) as controller:
for line in controller:
if "CHOICES_COMMANDS" in line or record == 1:
commands += clean_input(line)
record = 1
if "]" in line.replace("str]", ""):
record = 0
break
clean_commands = {
x for x in commands if x and "#" not in x and x not in ignore_cmds_list
}
with open(main_yaml_filename) as yaml:
lines = yaml.read()
undocumented = [command for command in clean_commands if command not in lines]
if not undocumented:
sys.exit(0)
else:
print("The following commands do not have documentation:") # noqa: T201
undocumented = list(undocumented)
undocumented.sort()
for item in undocumented:
print(item) # noqa: T201
sys.exit(1)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="check_doc",
description="checks for proper documentation in gst",
)
parser.add_argument(
"--ignore-files",
dest="files",
help="The files to not check.",
type=str,
)
parser.add_argument(
"--ignore-commands",
dest="commands",
help="The commands to not check.",
type=str,
)
ns_parser = parser.parse_args()
main(ns_parser.files, ns_parser.commands)