Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions bench/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
5 changes: 3 additions & 2 deletions bench/commands/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
65 changes: 10 additions & 55 deletions bench/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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')