37 lines
926 B
Python
37 lines
926 B
Python
"""Utility functions for the scaffold script."""
|
|
|
|
import argparse
|
|
from typing import Any
|
|
|
|
from .const import COMPONENT_DIR
|
|
|
|
|
|
def valid_integration(integration):
|
|
"""Test if it's a valid integration."""
|
|
if not (COMPONENT_DIR / integration).exists():
|
|
raise argparse.ArgumentTypeError(
|
|
f"The integration {integration} does not exist."
|
|
)
|
|
|
|
return integration
|
|
|
|
|
|
_MANIFEST_SORT_KEYS = {"domain": ".domain", "name": ".name"}
|
|
|
|
|
|
def _sort_manifest_keys(key: str) -> str:
|
|
"""Sort manifest keys."""
|
|
return _MANIFEST_SORT_KEYS.get(key, key)
|
|
|
|
|
|
def sort_manifest(manifest: dict[str, Any]) -> bool:
|
|
"""Sort manifest."""
|
|
keys = list(manifest)
|
|
if (keys_sorted := sorted(keys, key=_sort_manifest_keys)) != keys:
|
|
sorted_manifest = {key: manifest[key] for key in keys_sorted}
|
|
manifest.clear()
|
|
manifest.update(sorted_manifest)
|
|
return True
|
|
|
|
return False
|