64 lines
1.7 KiB
Python
Executable File
64 lines
1.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Inspect all component SCHEMAS."""
|
|
import importlib
|
|
import os
|
|
import pkgutil
|
|
|
|
from homeassistant.config import _identify_config_schema
|
|
from homeassistant.scripts.check_config import color
|
|
|
|
|
|
def explore_module(package):
|
|
"""Explore the modules."""
|
|
module = importlib.import_module(package)
|
|
if not hasattr(module, "__path__"):
|
|
return []
|
|
for _, name, _ in pkgutil.iter_modules(module.__path__, f"{package}."):
|
|
yield name
|
|
|
|
|
|
def main():
|
|
"""Run the script."""
|
|
if not os.path.isfile("requirements_all.txt"):
|
|
print("Run this from HA root dir")
|
|
return
|
|
|
|
msg = {}
|
|
|
|
def add_msg(key, item):
|
|
"""Add a message."""
|
|
if key not in msg:
|
|
msg[key] = []
|
|
msg[key].append(item)
|
|
|
|
for package in explore_module("homeassistant.components"):
|
|
module = importlib.import_module(package)
|
|
module_name = getattr(module, "DOMAIN", module.__name__)
|
|
|
|
if hasattr(module, "PLATFORM_SCHEMA"):
|
|
if hasattr(module, "CONFIG_SCHEMA"):
|
|
add_msg(
|
|
"WARNING",
|
|
f"Module {module_name} contains PLATFORM and CONFIG schemas",
|
|
)
|
|
add_msg("PLATFORM SCHEMA", module_name)
|
|
continue
|
|
|
|
if not hasattr(module, "CONFIG_SCHEMA"):
|
|
add_msg("NO SCHEMA", module_name)
|
|
continue
|
|
|
|
schema_type, schema = _identify_config_schema(module)
|
|
|
|
add_msg(
|
|
f"CONFIG_SCHEMA {schema_type}",
|
|
f"{module_name} {color('cyan', str(schema)[:60])}",
|
|
)
|
|
|
|
for key in sorted(msg):
|
|
print("\n{}\n - {}".format(key, "\n - ".join(msg[key])))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|