diff --git a/bench/app.py b/bench/app.py index 9fe122abb..b8bd7cf73 100755 --- a/bench/app.py +++ b/bench/app.py @@ -190,6 +190,9 @@ def install_app(app, bench_path=".", verbose=False, no_cache=False, restart_benc if not skip_assets: build_assets(bench_path=bench_path, app=app) + from bench.utils import download_translations_f + download_translations_f(app) + if restart_bench: if conf.get('restart_supervisor_on_update'): restart_supervisor_processes(bench_path=bench_path) diff --git a/bench/commands/update.py b/bench/commands/update.py index 16ffefbf2..26c55a03f 100755 --- a/bench/commands/update.py +++ b/bench/commands/update.py @@ -18,9 +18,10 @@ @click.option('--no-compile', is_flag=True, help="If set, Python bytecode won't be compiled before restarting the processes") @click.option('--force', is_flag=True, help="Forces major version upgrades") @click.option('--reset', is_flag=True, help="Hard resets git branch's to their new states overriding any changes and overriding rebase on pull") -def update(pull, apps, patch, build, requirements, restart_supervisor, restart_systemd, no_backup, no_compile, force, reset): +@click.option('--download-translations', is_flag=True, help="Update Translations files for all apps.") +def update(pull, apps, patch, build, requirements, restart_supervisor, restart_systemd, no_backup, no_compile, force, reset, download_translations): from bench.utils import update - update(pull=pull, apps=apps, patch=patch, build=build, requirements=requirements, restart_supervisor=restart_supervisor, restart_systemd=restart_systemd, backup=not no_backup, compile=not no_compile, force=force, reset=reset) + update(pull=pull, apps=apps, patch=patch, build=build, requirements=requirements, restart_supervisor=restart_supervisor, restart_systemd=restart_systemd, backup=not no_backup, compile=not no_compile, force=force, reset=reset, download_translations=download_translations) @click.command('retry-upgrade', help="Retry a failed upgrade") diff --git a/bench/utils.py b/bench/utils.py index 99f7870bc..3f34da5b9 100755 --- a/bench/utils.py +++ b/bench/utils.py @@ -185,7 +185,7 @@ def init(path, apps_path=None, no_procfile=False, no_backups=False, def update(pull=False, apps=None, patch=False, build=False, requirements=False, backup=True, compile=True, - force=False, reset=False, restart_supervisor=False, restart_systemd=False): + force=False, reset=False, restart_supervisor=False, restart_systemd=False, download_translations=False): """command: bench update""" import re from bench import patches @@ -275,6 +275,9 @@ def update(pull=False, apps=None, patch=False, build=False, requirements=False, if restart_systemd or conf.get('restart_systemd_on_update'): restart_systemd_processes(bench_path=bench_path) + if download_translations: + download_translations_f() + conf.update({ "maintenance_mode": 0, "pause_scheduler": 0 }) update_config(conf, bench_path=bench_path) @@ -832,60 +835,6 @@ def post_upgrade(from_ver, to_ver, bench_path='.'): print(message) -def update_translations_p(args): - import requests - - try: - update_translations(*args) - except requests.exceptions.HTTPError: - print('Download failed for', args[0], args[1]) - - -def download_translations_p(): - import multiprocessing - - pool = multiprocessing.Pool(multiprocessing.cpu_count()) - - langs = get_langs() - apps = ('frappe', 'erpnext') - args = list(itertools.product(apps, langs)) - - pool.map(update_translations_p, args) - - -def download_translations(): - langs = get_langs() - apps = ('frappe', 'erpnext') - for app, lang in itertools.product(apps, langs): - update_translations(app, lang) - - -def get_langs(): - lang_file = 'apps/frappe/frappe/geo/languages.json' - with open(lang_file) as f: - langs = json.loads(f.read()) - return [d['code'] for d in langs] - - -def update_translations(app, lang): - import requests - - translations_dir = os.path.join('apps', app, app, 'translations') - csv_file = os.path.join(translations_dir, lang + '.csv') - url = f"https://translate.erpnext.com/files/{app}-{lang}.csv" - r = requests.get(url, stream=True) - r.raise_for_status() - - with open(csv_file, 'wb') as f: - for chunk in r.iter_content(chunk_size=1024): - # filter out keep-alive new chunks - if chunk: - f.write(chunk) - f.flush() - - print('downloaded for', app, lang) - - def print_output(p): from select import select @@ -1108,3 +1057,9 @@ def clear_command_cache(bench_path='.'): os.remove(bench_cache_file) else: print("Bench command cache doesn't exist in this folder!") + +def download_translations_f(app=None): + if app: + run_frappe_cmd('download-translations', '--app', app) + return + run_frappe_cmd('download-translations')