kopia lustrzana https://github.com/OpenDroneMap/WebODM
82 wiersze
3.1 KiB
Python
82 wiersze
3.1 KiB
Python
from django.http import Http404
|
|
from django.contrib.auth.decorators import user_passes_test
|
|
from django.shortcuts import render
|
|
|
|
from django.contrib import messages
|
|
from django.utils.translation import ugettext as _
|
|
from django import forms
|
|
from webodm import settings
|
|
from django.http import JsonResponse
|
|
from django.utils.translation import get_language
|
|
import requests
|
|
import json, tempfile, os, logging, shutil, subprocess, zipfile, glob, pathlib
|
|
|
|
logger = logging.getLogger('app.logger')
|
|
|
|
def download_file(url, destination):
|
|
download_stream = requests.get(url, stream=True, timeout=90)
|
|
|
|
with open(destination, 'wb') as fd:
|
|
for chunk in download_stream.iter_content(4096):
|
|
fd.write(chunk)
|
|
|
|
def copymerge(src, dst, symlinks=False, ignore=None):
|
|
for item in os.listdir(src):
|
|
s = os.path.join(src, item)
|
|
d = os.path.join(dst, item)
|
|
if os.path.isdir(s):
|
|
pathlib.Path(d).mkdir(parents=True, exist_ok=True)
|
|
copymerge(s, d, symlinks, ignore)
|
|
else:
|
|
shutil.copy2(s, d)
|
|
|
|
|
|
@user_passes_test(lambda u: u.is_superuser)
|
|
def dev_tools(request, action):
|
|
if not settings.DEV:
|
|
raise Http404()
|
|
|
|
if request.method == 'POST':
|
|
if action == "reloadTranslation":
|
|
try:
|
|
args = json.loads(request.body).get('args')
|
|
|
|
fd, tmpzipPath = tempfile.mkstemp(suffix=".zip")
|
|
os.close(fd)
|
|
|
|
logger.info("Downloading %s" % args[0])
|
|
download_file(args[0], tmpzipPath)
|
|
|
|
tmpPath = tempfile.mkdtemp()
|
|
|
|
logger.info("Extracting... %s" % tmpzipPath)
|
|
with zipfile.ZipFile(tmpzipPath, 'r') as zip:
|
|
zip.extractall(path=tmpPath)
|
|
os.unlink(tmpzipPath)
|
|
|
|
locale_paths = glob.glob(os.path.join(tmpPath, "**", "locale"), recursive=True)
|
|
if len(locale_paths) == 0:
|
|
raise Exception(_("Cannot find locale/ folder in .zip archive"))
|
|
|
|
webodm_locale_dir = os.path.join(settings.BASE_DIR, "locale")
|
|
|
|
for locale_path in locale_paths:
|
|
logger.info("Found locale at %s" % locale_path)
|
|
logger.info("Moving %s to %s..." % (locale_path, webodm_locale_dir))
|
|
copymerge(locale_path, webodm_locale_dir)
|
|
|
|
logger.info("Running python manage.py translate extract && python manage.py translate build --safe")
|
|
subprocess.call(['bash', '-c', 'python manage.py translate extract && %s python manage.py translate build --safe'], cwd=settings.BASE_DIR)
|
|
|
|
return JsonResponse({'message': _("Translation files reloaded!"), 'reload': True})
|
|
except Exception as e:
|
|
return JsonResponse({'error': str(e)})
|
|
else:
|
|
return JsonResponse({'error': _("Invalid action")})
|
|
else:
|
|
return render(request, 'app/dev_tools.html', {
|
|
'title': _('Developer Tools'),
|
|
'current_locale': get_language()
|
|
})
|
|
|