From efd404095ef53af107590c7021787ec6285cf4dc Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Sat, 31 Oct 2015 09:26:57 +0100 Subject: [PATCH] Proper translation integration This reverts Ie518bffe825ae1c6d139a0613c30bc9748b52cd7 and updates the scripts to properly work with the infra scripts. It replicates now the current setup done by horizon - thus moving the babel files to the top-level and adjusting run_tests.sh. This copies over tools/install_venv_common.py from oslo-incubator so that the message extraction works with the parameter that the infra scripts expect. The infra scripts have been adopted to work with this setup, see change I09350bfd384f84d132dc03d9bae2a5015acb6b0f. Change-Id: I6f5c8a4dc8897b27f9f700be42d5dd38f7d278d0 --- .../babel-django.cfg => babel-django.cfg | 0 .../babel-djangojs.cfg => babel-djangojs.cfg | 0 babel.cfg | 1 - magnum-ui/locale/magnum-ui.pot | 31 ---- run_tests.sh | 2 +- setup.cfg | 14 -- tools/install_venv_common.py | 172 ++++++++++++++++++ 7 files changed, 173 insertions(+), 47 deletions(-) rename magnum_ui/babel-django.cfg => babel-django.cfg (100%) rename magnum_ui/babel-djangojs.cfg => babel-djangojs.cfg (100%) delete mode 100644 babel.cfg delete mode 100644 magnum-ui/locale/magnum-ui.pot create mode 100644 tools/install_venv_common.py diff --git a/magnum_ui/babel-django.cfg b/babel-django.cfg similarity index 100% rename from magnum_ui/babel-django.cfg rename to babel-django.cfg diff --git a/magnum_ui/babel-djangojs.cfg b/babel-djangojs.cfg similarity index 100% rename from magnum_ui/babel-djangojs.cfg rename to babel-djangojs.cfg diff --git a/babel.cfg b/babel.cfg deleted file mode 100644 index efceab81..00000000 --- a/babel.cfg +++ /dev/null @@ -1 +0,0 @@ -[python: **.py] diff --git a/magnum-ui/locale/magnum-ui.pot b/magnum-ui/locale/magnum-ui.pot deleted file mode 100644 index 082b439c..00000000 --- a/magnum-ui/locale/magnum-ui.pot +++ /dev/null @@ -1,31 +0,0 @@ -# Translations template for magnum-ui. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the magnum-ui project. -# FIRST AUTHOR , 2015. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: magnum-ui 0.0.1.dev23\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-10-29 08:28+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.1.1\n" - -#: magnum_ui/dashboard.py:21 magnum_ui/containers/panel.py:21 -msgid "Containers" -msgstr "" - -#: magnum_ui/bay/panel.py:22 -msgid "Bays" -msgstr "" - -#: magnum_ui/baymodel/panel.py:22 -msgid "Bay Models" -msgstr "" - diff --git a/run_tests.sh b/run_tests.sh index 87913cc5..70e2a702 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -415,7 +415,7 @@ function babel_extract { KEYWORDS+=" -k ugettext_noop -k ugettext_lazy -k ungettext_lazy:1,2" KEYWORDS+=" -k npgettext:1c,2,3 -k pgettext_lazy:1c,2 -k npgettext_lazy:1c,2,3" - ${command_wrapper} pybabel extract -F babel-${DOMAIN}.cfg -o locale/${DOMAIN}.pot $KEYWORDS . + ${command_wrapper} pybabel extract -F ../babel-${DOMAIN}.cfg -o locale/${DOMAIN}.pot $KEYWORDS . } function run_makemessages { diff --git a/setup.cfg b/setup.cfg index 3c59a775..6f30ca12 100644 --- a/setup.cfg +++ b/setup.cfg @@ -24,17 +24,3 @@ classifier = [files] packages = magnum_ui - -[compile_catalog] -directory = magnum-ui/locale -domain = magnum-ui - -[update_catalog] -domain = magnum-ui -output_dir = magnum-ui/locale -input_file = magnum-ui/locale/magnum-ui.pot - -[extract_messages] -keywords = _ gettext ngettext l_ lazy_gettext -mapping_file = babel.cfg -output_file = magnum-ui/locale/magnum-ui.pot diff --git a/tools/install_venv_common.py b/tools/install_venv_common.py new file mode 100644 index 00000000..e279159a --- /dev/null +++ b/tools/install_venv_common.py @@ -0,0 +1,172 @@ +# Copyright 2013 OpenStack Foundation +# Copyright 2013 IBM Corp. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Provides methods needed by installation script for OpenStack development +virtual environments. + +Since this script is used to bootstrap a virtualenv from the system's Python +environment, it should be kept strictly compatible with Python 2.6. + +Synced in from openstack-common +""" + +from __future__ import print_function + +import optparse +import os +import subprocess +import sys + + +class InstallVenv(object): + + def __init__(self, root, venv, requirements, + test_requirements, py_version, + project): + self.root = root + self.venv = venv + self.requirements = requirements + self.test_requirements = test_requirements + self.py_version = py_version + self.project = project + + def die(self, message, *args): + print(message % args, file=sys.stderr) + sys.exit(1) + + def check_python_version(self): + if sys.version_info < (2, 6): + self.die("Need Python Version >= 2.6") + + def run_command_with_code(self, cmd, redirect_output=True, + check_exit_code=True): + """Runs a command in an out-of-process shell. + + Returns the output of that command. Working directory is self.root. + """ + if redirect_output: + stdout = subprocess.PIPE + else: + stdout = None + + proc = subprocess.Popen(cmd, cwd=self.root, stdout=stdout) + output = proc.communicate()[0] + if check_exit_code and proc.returncode != 0: + self.die('Command "%s" failed.\n%s', ' '.join(cmd), output) + return (output, proc.returncode) + + def run_command(self, cmd, redirect_output=True, check_exit_code=True): + return self.run_command_with_code(cmd, redirect_output, + check_exit_code)[0] + + def get_distro(self): + if (os.path.exists('/etc/fedora-release') or + os.path.exists('/etc/redhat-release')): + return Fedora( + self.root, self.venv, self.requirements, + self.test_requirements, self.py_version, self.project) + else: + return Distro( + self.root, self.venv, self.requirements, + self.test_requirements, self.py_version, self.project) + + def check_dependencies(self): + self.get_distro().install_virtualenv() + + def create_virtualenv(self, no_site_packages=True): + """Creates the virtual environment and installs PIP. + + Creates the virtual environment and installs PIP only into the + virtual environment. + """ + if not os.path.isdir(self.venv): + print('Creating venv...', end=' ') + if no_site_packages: + self.run_command(['virtualenv', '-q', '--no-site-packages', + self.venv]) + else: + self.run_command(['virtualenv', '-q', self.venv]) + print('done.') + else: + print("venv already exists...") + pass + + def pip_install(self, *args): + self.run_command(['tools/with_venv.sh', + 'pip', 'install', '--upgrade'] + list(args), + redirect_output=False) + + def install_dependencies(self): + print('Installing dependencies with pip (this can take a while)...') + + # First things first, make sure our venv has the latest pip and + # setuptools and pbr + self.pip_install('pip>=1.4') + self.pip_install('setuptools') + self.pip_install('pbr') + + self.pip_install('-r', self.requirements, '-r', self.test_requirements) + + def parse_args(self, argv): + """Parses command-line arguments.""" + parser = optparse.OptionParser() + parser.add_option('-n', '--no-site-packages', + action='store_true', + help="Do not inherit packages from global Python " + "install.") + return parser.parse_args(argv[1:])[0] + + +class Distro(InstallVenv): + + def check_cmd(self, cmd): + return bool(self.run_command(['which', cmd], + check_exit_code=False).strip()) + + def install_virtualenv(self): + if self.check_cmd('virtualenv'): + return + + if self.check_cmd('easy_install'): + print('Installing virtualenv via easy_install...', end=' ') + if self.run_command(['easy_install', 'virtualenv']): + print('Succeeded') + return + else: + print('Failed') + + self.die('ERROR: virtualenv not found.\n\n%s development' + ' requires virtualenv, please install it using your' + ' favorite package management tool' % self.project) + + +class Fedora(Distro): + """This covers all Fedora-based distributions. + + Includes: Fedora, RHEL, CentOS, Scientific Linux + """ + + def check_pkg(self, pkg): + return self.run_command_with_code(['rpm', '-q', pkg], + check_exit_code=False)[1] == 0 + + def install_virtualenv(self): + if self.check_cmd('virtualenv'): + return + + if not self.check_pkg('python-virtualenv'): + self.die("Please install 'python-virtualenv'.") + + super(Fedora, self).install_virtualenv()