Branch: refs/heads/master Author: Enrico Tröger enrico.troeger@uvena.de Committer: Enrico Tröger enrico.troeger@uvena.de Date: Tue, 07 May 2019 21:48:37 UTC Commit: c3d138d1eb5e27a267deb0a91cde2d604f636aab https://github.com/geany/www.geany.org/commit/c3d138d1eb5e27a267deb0a91cde2d...
Log Message: ----------- Rework translation statistic update to operate on a Geany source tarball
Modified Paths: -------------- README.dev.md geany/settings.py static_docs/generate_i18n_statistics.py static_docs/management/commands/generate_i18n_statistics.py
Modified: README.dev.md 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -103,7 +103,7 @@ the settings to your needs:
LOGGING['handlers']['file']['filename'] = '/tmp/geany_django.log'
- STATIC_DOCS_GEANY_SOURCE_DIR = '/path/to/geany/source/or/just/empty' + STATIC_DOCS_GEANY_SOURCE_TARBALL = '/path/to/geany/source/tarball/or/just/empty' IRC_USER_LIST_FILE = '/path/to/irc/data/or/just/empty'
Modified: geany/settings.py 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -448,7 +448,7 @@
NIGHTLYBUILDS_BASE_DIR = '/path/to/nightly/builds'
-STATIC_DOCS_GEANY_SOURCE_DIR = '/home/geany/geany/geany_git/po' +STATIC_DOCS_GEANY_SOURCE_TARBALL = '/srv/www/download.geany.org/geany_git.tar.gz' STATIC_DOCS_GEANY_DESTINATION_DIR = os.path.join(MEDIA_ROOT, 'i18n') STATIC_DOCS_GEANY_DESTINATION_URL = os.path.join(MEDIA_URL, 'i18n') STATIC_DOCS_GEANY_I18N_STATISTICS_FILENAME = 'i18n_statistics.json'
Modified: static_docs/generate_i18n_statistics.py 48 lines changed, 40 insertions(+), 8 deletions(-) =================================================================== @@ -13,9 +13,11 @@ # along with this program. If not, see http://www.gnu.org/licenses/.
from json import dump, JSONEncoder -from os import listdir +from os import listdir, makedirs from os.path import join, splitext +from shutil import rmtree from subprocess import CalledProcessError, check_output, STDOUT +from tempfile import TemporaryDirectory from time import time import re
@@ -67,18 +69,22 @@ def default(self, o): # pylint: disable=method-hidden class TranslationStatisticsGenerator:
# ---------------------------------------------------------------------- - def __init__(self, domain, source_path, destination_path, target_filename): + def __init__(self, domain, source_tarball, destination_path, target_filename): self._domain = domain - self._source_path = source_path + self._source_tarball = source_tarball self._destination_path = destination_path self._target_filename = target_filename + self._temp_path = None + self._source_path = None self._pot_stats = None self._message_catalogs = None self._message_catalog = None self._overall_statistics = None
# ---------------------------------------------------------------------- def generate(self): + self._create_destionation_path_if_necessary() + self._extract_geany_source_tarball() self._update_pot_file() self._fetch_pot_stats() self._fetch_message_catalogs() @@ -88,6 +94,25 @@ def generate(self):
self._factor_overall_statistics() self._write_overall_statistics() + self._remove_extracted_geany_source() + + # ---------------------------------------------------------------------- + def _create_destionation_path_if_necessary(self): + makedirs(self._destination_path, mode=0o755, exist_ok=True) + + # ---------------------------------------------------------------------- + def _extract_geany_source_tarball(self): + self._temp_path = TemporaryDirectory() + self._source_path = join(self._temp_path.name, 'po') + + extract_command = [ + 'tar', + '--extract', + '--strip-components', '1', + '--directory', self._temp_path.name, + '--file', self._source_tarball, + ] + self._execute_command(extract_command)
# ---------------------------------------------------------------------- def _update_pot_file(self): @@ -111,28 +136,31 @@ def _execute_command(self, command): srcdir=self._source_path, LANG='C') try: - return check_output( + output = check_output( command, env=environment, cwd=self._destination_path, stderr=STDOUT) + output_utf8 = output.decode('utf-8') + return output_utf8 except CalledProcessError as exc: raise ValueError( 'Command: "{}" exited with code {}: {}'.format( - command, + ' '.join(command), exc.returncode, - exc.output)) + exc.output.decode('utf-8')))
# ---------------------------------------------------------------------- def _fetch_pot_stats(self): - self._pot_stats = self._read_po_translation_statistics(self._factor_pot_filename()) + pot_filename = self._factor_pot_filename() + self._pot_stats = self._read_po_translation_statistics(pot_filename)
# ---------------------------------------------------------------------- def _read_po_translation_statistics(self, filename): msgfmt_command = ['msgfmt', '--statistics', filename] output = self._execute_command(msgfmt_command) # parse - match = STATISTICS_REGEXP.match(output.decode('utf-8')) + match = STATISTICS_REGEXP.match(output) if match: translated = match.group('translated') fuzzy = match.group('fuzzy') @@ -217,3 +245,7 @@ def _write_overall_statistics(self): output_filename = join(self._destination_path, self._target_filename) with open(output_filename, 'w') as output_file: dump(self._overall_statistics, output_file, cls=SimpleObjectToJSONEncoder) + + # ---------------------------------------------------------------------- + def _remove_extracted_geany_source(self): + self._temp_path.cleanup()
Modified: static_docs/management/commands/generate_i18n_statistics.py 2 lines changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -25,7 +25,7 @@ class Command(BaseCommand): def handle(self, *args, **options): generator = TranslationStatisticsGenerator( 'geany', - settings.STATIC_DOCS_GEANY_SOURCE_DIR, + settings.STATIC_DOCS_GEANY_SOURCE_TARBALL, settings.STATIC_DOCS_GEANY_DESTINATION_DIR, settings.STATIC_DOCS_GEANY_I18N_STATISTICS_FILENAME, )
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).