Migrate translations_develop script (#33933)

* Migrate translations_develop script

* Fix lint
This commit is contained in:
Paulus Schoutsen
2020-04-10 14:17:09 -07:00
committed by GitHub
parent 294a2d2460
commit 8e6e8dfbe0
6 changed files with 76 additions and 68 deletions

View File

@@ -1,20 +1,15 @@
"""Validate manifests."""
import argparse
import importlib
from pathlib import Path
import sys
from . import clean, download, error, upload
from . import error, util
def get_arguments() -> argparse.Namespace:
"""Get parsed passed in arguments."""
parser = argparse.ArgumentParser(description="Home Assistant Scaffolder")
parser.add_argument("action", type=str, choices=["download", "clean", "upload"])
parser.add_argument("--debug", action="store_true", help="Enable log output")
arguments = parser.parse_args()
return arguments
return util.get_base_arg_parser().parse_known_args()[0]
def main():
@@ -25,12 +20,8 @@ def main():
args = get_arguments()
if args.action == "download":
download.run(args)
elif args.action == "upload":
upload.run(args)
elif args.action == "clean":
clean.run()
module = importlib.import_module(f".{args.action}", "script.translations")
module.run()
return 0
@@ -42,3 +33,7 @@ if __name__ == "__main__":
print()
print(f"Fatal Error: {err.reason}")
sys.exit(err.exit_code)
except (KeyboardInterrupt, EOFError):
print()
print("Aborted!")
sys.exit(2)

View File

@@ -0,0 +1,63 @@
"""Compile the current translation strings files for testing."""
import argparse
import json
from pathlib import Path
from shutil import rmtree
import sys
from . import download, upload
from .const import INTEGRATIONS_DIR
from .util import get_base_arg_parser
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."
)
return parser.parse_args()
def run():
"""Run the script."""
args = get_arguments()
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: ")
translations = upload.generate_upload_data()
if integration not in translations["component"]:
print("Integration has no strings.json")
sys.exit(1)
if download.DOWNLOAD_DIR.is_dir():
rmtree(str(download.DOWNLOAD_DIR))
download.DOWNLOAD_DIR.mkdir(parents=True)
(download.DOWNLOAD_DIR / "en.json").write_text(
json.dumps({"component": {integration: translations["component"][integration]}})
)
download.write_integration_translations()

View File

@@ -13,7 +13,7 @@ from .error import ExitApp
from .util import get_lokalise_token
FILENAME_FORMAT = re.compile(r"strings\.(?P<suffix>\w+)\.json")
LOCAL_DIR = pathlib.Path("build/translations-download").absolute()
DOWNLOAD_DIR = pathlib.Path("build/translations-download").absolute()
def run_download_docker():
@@ -24,7 +24,7 @@ def run_download_docker():
"docker",
"run",
"-v",
f"{LOCAL_DIR}:/opt/dest/locale",
f"{DOWNLOAD_DIR}:/opt/dest/locale",
"--rm",
f"lokalise/lokalise-cli@sha256:{DOCKER_IMAGE}",
# Lokalise command
@@ -133,14 +133,19 @@ def save_language_translations(lang, translations):
save_json(path, platform_translations)
def run(args):
"""Run the script."""
LOCAL_DIR.mkdir(parents=True, exist_ok=True)
run_download_docker()
def write_integration_translations():
"""Write integration translations."""
paths = glob.iglob("build/translations-download/*.json")
for path in paths:
lang = get_language(path)
translations = load_json(path)
save_language_translations(lang, translations)
def run():
"""Run the script."""
DOWNLOAD_DIR.mkdir(parents=True, exist_ok=True)
run_download_docker()
write_integration_translations()

View File

@@ -49,13 +49,8 @@ def run_upload_docker():
raise ExitApp("Failed to download translations")
def run(args):
"""Run the script."""
if get_current_branch() != "dev" and os.environ.get("AZURE_BRANCH") != "dev":
raise ExitApp(
"Please only run the translations upload script from a clean checkout of dev."
)
def generate_upload_data():
"""Generate the data for uploading."""
translations = {"component": {}}
for path in INTEGRATIONS_DIR.glob(f"*{os.sep}strings*.json"):
@@ -71,7 +66,19 @@ def run(args):
parent.update(json.loads(path.read_text()))
return translations
def run():
"""Run the script."""
if get_current_branch() != "dev" and os.environ.get("AZURE_BRANCH") != "dev":
raise ExitApp(
"Please only run the translations upload script from a clean checkout of dev."
)
translations = generate_upload_data()
LOCAL_FILE.parent.mkdir(parents=True, exist_ok=True)
LOCAL_FILE.write_text(json.dumps(translations, indent=4, sort_keys=True))
# run_upload_docker()
run_upload_docker()

View File

@@ -1,4 +1,5 @@
"""Translation utils."""
import argparse
import os
import pathlib
import subprocess
@@ -6,6 +7,16 @@ import subprocess
from .error import ExitApp
def get_base_arg_parser():
"""Get a base argument parser."""
parser = argparse.ArgumentParser(description="Home Assistant Translations")
parser.add_argument(
"action", type=str, choices=["download", "clean", "upload", "develop"]
)
parser.add_argument("--debug", action="store_true", help="Enable log output")
return parser
def get_lokalise_token():
"""Get lokalise token."""
token = os.environ.get("LOKALISE_TOKEN")