Files
core/script/translations/develop.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

87 lines
2.7 KiB
Python
Raw Permalink Normal View History

"""Compile the current translation strings files for testing."""
import argparse
import json
from pathlib import Path
import sys
from . import download, upload
from .const import INTEGRATIONS_DIR
from .util import flatten_translations, get_base_arg_parser, substitute_references
def valid_integration(integration):
"""Test if it's a valid integration."""
if not (INTEGRATIONS_DIR / integration).is_dir():
raise argparse.ArgumentTypeError(
f"The integration {integration} does not exist."
)
return integration
def get_arguments() -> argparse.Namespace:
"""Get parsed passed in arguments."""
parser = get_base_arg_parser()
parser.add_argument(
"--integration", type=valid_integration, help="Integration to process."
)
parser.add_argument("--all", action="store_true", help="Process all integrations.")
return parser.parse_args()
def run_single(translations, flattened_translations, integration):
"""Run the script for a single integration."""
print(f"Generating translations for {integration}")
if integration not in translations["component"]:
print("Integration has no strings.json")
sys.exit(1)
integration_strings = translations["component"][integration]
translations["component"][integration] = substitute_references(
integration_strings, flattened_translations, fail_on_missing=True
)
if download.DOWNLOAD_DIR.is_dir():
for lang_file in download.DOWNLOAD_DIR.glob("*.json"):
lang_file.unlink()
else:
download.DOWNLOAD_DIR.mkdir(parents=True)
(download.DOWNLOAD_DIR / "en.json").write_text(
json.dumps({"component": {integration: translations["component"][integration]}})
)
download.save_integrations_translations()
2020-04-15 16:58:20 -07:00
def run():
"""Run the script."""
args = get_arguments()
translations = upload.generate_upload_data()
flattened_translations = flatten_translations(translations)
if args.all:
for integration in translations["component"]:
run_single(translations, flattened_translations, integration)
print("🌎 Generated translation files for all integrations")
return 0
if args.integration:
integration = args.integration
else:
integration = None
while (
integration is None
or not Path(f"homeassistant/components/{integration}").exists()
):
if integration is not None:
print(f"Integration {integration} doesn't exist!")
print()
integration = input("Integration to process: ")
run_single(translations, flattened_translations, integration)
2020-04-15 16:58:20 -07:00
return 0