ansible-module/src/ansible_module/update_doc.py

52 Zeilen
1.8 KiB
Python

2023-11-25 11:31:29 +00:00
#!/usr/bin/python
import importlib
import pathlib
import re
import sys
sys.path.append(".")
mindocstring = "DOCUMENTATION = ''''''"
moduledir = pathlib.Path("plugins/modules")
regex = re.compile("DOCUMENTATION *= *r?(?P<quote>\"{3}|'{3})(---)?.*?(?P=quote)", re.MULTILINE | re.DOTALL)
def main():
2023-11-26 09:11:43 +00:00
try:
modules = moduledir.iterdir()
except:
print("failed to find modules")
return
for modfile in modules:
2023-11-25 11:31:29 +00:00
if modfile.name in ("__init__.py", "__pycache__", "unit.py.example"):
continue
mod = importlib.import_module(".".join((modfile.parts[:-1]) + (modfile.stem,)))
if hasattr(mod, "Module"):
module = mod.Module
elif hasattr(mod, "__module_name__"):
module = getattr(mod, mod.__module_name__)
else:
print("Error loading Module of File: {}. No Module or __module_name__ defined".format(modfile))
continue
try:
moddoc = module.doc()
except AttributeError:
print("Broken module. skipping {}".format(modfile))
continue
except Exception as e:
print("Error in documentation of module {}: {}".format(modfile, e))
continue
moddata = modfile.read_text()
match = regex.search(moddata)
if not match:
print(
"no Documentation set for module {}. Please add at least \"{}\" to the file".format(
modfile.stem, mindocstring
)
)
continue
newmod = "{pre}DOCUMENTATION = {quote}{doc}{quote}{post}".format(
pre=moddata[: match.start()], quote=match.group("quote"), doc=moddoc, post=moddata[match.end() :]
)
modfile.write_text(newmod)
print("updated the documentation of module {}".format(module.name))