68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
"""Check if upstream Alexa locales are subset of the core Alexa supported locales."""
|
|
|
|
from pprint import pprint
|
|
import re
|
|
|
|
from bs4 import BeautifulSoup
|
|
import requests
|
|
|
|
from homeassistant.components.alexa import capabilities
|
|
|
|
SITE = (
|
|
"https://developer.amazon.com/en-GB/docs/alexa/device-apis/list-of-interfaces.html"
|
|
)
|
|
|
|
|
|
def run_script() -> None:
|
|
"""Run the script."""
|
|
response = requests.get(SITE, timeout=10)
|
|
soup = BeautifulSoup(response.text, "html.parser")
|
|
|
|
table = soup.find("table")
|
|
table_body = table.find_all("tbody")[-1]
|
|
rows = table_body.find_all("tr")
|
|
data = [[ele.text.strip() for ele in row.find_all("td") if ele] for row in rows]
|
|
upstream_locales_raw = {row[0]: row[3] for row in data}
|
|
language_pattern = re.compile(r"^[a-z]{2}-[A-Z]{2}$")
|
|
upstream_locales = {
|
|
upstream_interface: {
|
|
name
|
|
for word in upstream_locale.split(" ")
|
|
if (name := word.strip(",")) and language_pattern.match(name) is not None
|
|
}
|
|
for upstream_interface, upstream_locale in upstream_locales_raw.items()
|
|
if upstream_interface.count(".") == 1 # Skip sub-interfaces
|
|
}
|
|
|
|
interfaces_missing = {}
|
|
interfaces_nok = {}
|
|
interfaces_ok = {}
|
|
|
|
for upstream_interface, upstream_locale in upstream_locales.items():
|
|
core_interface_name = upstream_interface.replace(".", "")
|
|
core_interface = getattr(capabilities, core_interface_name, None)
|
|
|
|
if core_interface is None:
|
|
interfaces_missing[upstream_interface] = upstream_locale
|
|
continue
|
|
|
|
core_locale = core_interface.supported_locales
|
|
|
|
if not upstream_locale.issubset(core_locale):
|
|
interfaces_nok[core_interface_name] = core_locale
|
|
else:
|
|
interfaces_ok[core_interface_name] = core_locale
|
|
|
|
print("Missing interfaces:")
|
|
pprint(list(interfaces_missing))
|
|
print("\n")
|
|
print("Interfaces where upstream locales are not subsets of the core locales:")
|
|
pprint(list(interfaces_nok))
|
|
print("\n")
|
|
print("Interfaces checked ok:")
|
|
pprint(list(interfaces_ok))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
run_script()
|