solenv/bin/desktop-translate.py |  104 +++++++++++++++++++++-------------------
 1 file changed, 55 insertions(+), 49 deletions(-)

New commits:
commit 4c3a23832ca8ee88d366e16adabea05a98ffeccb
Author:     Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org>
AuthorDate: Fri Jul 15 11:58:41 2022 +0300
Commit:     Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org>
CommitDate: Tue Jul 19 12:34:42 2022 +0200

    Related: tdf#149990 solenv/bin/desktop-translate.py readability
    
    Satisfies many pylint suggestions and includes a formatting pass with Black.
    
    Change-Id: I33794902ab303f63b52a3412e4e4d18b492cc74b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137101
    Tested-by: Jenkins
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/solenv/bin/desktop-translate.py b/solenv/bin/desktop-translate.py
index 639fa89af48f..edc377dab15b 100644
--- a/solenv/bin/desktop-translate.py
+++ b/solenv/bin/desktop-translate.py
@@ -16,15 +16,18 @@
 #   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 #
 
-#
-# Translates multiple .desktop files at once with strings from .ulf
-# files; if you add new translatable .ulf files please add them to
-# l10ntools/source/localize.cxx
-#
+"""Translates multiple .desktop files at once with strings from .ulf
+files; if you add new translatable .ulf files please add them to
+l10ntools/source/localize.cxx in case the module is not already listed."""
 
-import os, sys, argparse, io
+import os
+import sys
+import argparse
+import io
 
-def encodeDesktopString(s):
+
+def encode_desktop_string(s_value):
+    """Function encoding strings to be used as values in .desktop files."""
     # 
<https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.1.html#
     # value-types> says "The escape sequences \s, \n, \t, \r, and \\ are 
supported for values of
     # type string and localestring, meaning ASCII space, newline, tab, 
carriage return, and
@@ -36,71 +39,72 @@ def encodeDesktopString(s):
     # supposed to relate, so just escape any U+000A LINE FEED as "\n" and any 
U+000D CARRIAGE RETURN
     # as "\r"; it is unclear exactly which occurrences of U+0020 SPACE and 
U+0009 CHARACTER
     # TABULATION would need to be escaped, so they are mostly left unescaped, 
for readability:
-    s = s.replace('\\', '\\\\').replace('\n', '\\n').replace('\r', '\\r');
-    if s.startswith(' '):
+    s_value = s_value.replace("\\", "\\\\").replace("\n", "\\n").replace("\r", 
"\\r")
+    if s_value.startswith(" "):
         # 
<https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.1.html#
         # entries> says "Space before and after the equals sign should be 
ignored", so escape a
         # leading U+0020 SPACE as "\s" (while it is not clear whether "space" 
there means just
         # U+0020 SPACE or any kind of white space, in which case at least a 
leading U+0009 CHARACTER
         # TABULATION should similarly be escaped as "\t"; also, it is unclear 
whether such
         # characters should also be escaped at the end):
-        s = '\\s' + s[1:]
-    return s
+        s_value = "\\s" + s_value[1:]
+    return s_value
+
 
 parser = argparse.ArgumentParser()
-parser.add_argument('-p', dest='productname', default='LibreOffice')
-parser.add_argument('-d', dest='workdir', default='.')
-parser.add_argument('--key', dest='key')
-parser.add_argument('--prefix', dest='prefix', default='')
-parser.add_argument('--ext', dest='ext')
-parser.add_argument('--template-dir', dest='template_dir', default=None)
-parser.add_argument('ifile')
+parser.add_argument("-p", dest="productname", default="LibreOffice")
+parser.add_argument("-d", dest="workdir", default=".")
+parser.add_argument("--key", dest="key")
+parser.add_argument("--prefix", dest="prefix", default="")
+parser.add_argument("--ext", dest="ext")
+parser.add_argument("--template-dir", dest="template_dir", default=None)
+parser.add_argument("ifile")
 
 o = parser.parse_args()
 
 if o.template_dir is None:
-    template_dir = '{}/{}'.format(o.workdir, o.prefix)
+    template_dir = f"{o.workdir}/{o.prefix}"
 else:
     template_dir = o.template_dir
 
 # hack for unity section
 if o.key == "UnityQuickList":
-    outkey = "Name"
+    OUTKEY = "Name"
 else:
-    outkey = o.key
+    OUTKEY = o.key
 
 
 templates = {}
 
 # open input file
-source = io.open(o.ifile, encoding='utf-8')
+source = io.open(o.ifile, encoding="utf-8")
 
 template = None
 
 # read ulf file
 for line in source:
-    if line.strip() == '':
+    if line.strip() == "":
         continue
     if line[0] == "[":
-        template = line.split(']', 1)[0][1:]
+        template = line.split("]", 1)[0][1:]
         entry = {}
         # For every section in the specified ulf file there should exist
         # a template file in $workdir ..
-        entry['outfile'] = "{}{}.{}".format(template_dir, template, o.ext)
-        entry['translations'] = {}
+        entry["outfile"] = f"{template_dir}{template}.{o.ext}"
+        entry["translations"] = {}
         templates[template] = entry
     else:
         # split locale = "value" into 2 strings
-        if ' = ' not in line:
+        if " = " not in line:
             continue
-        locale, value = line.split(' = ')
+        locale, value = line.split(" = ")
 
         if locale != line:
             # replace en-US with en
-            locale = locale.replace('en-US', 'en')
+            locale = locale.replace("en-US", "en")
 
             # use just anything inside the ""
-            assert(value[0] == '"')
+            assert value[0] == '"'
             # Some entries span multiple lines.
             # An entry will always end on a double quote.
             while not value.endswith('"\n'):
@@ -108,53 +112,55 @@ for line in source:
             value = value[1:-2]
 
             # replace resource placeholder
-            value = value.replace('%PRODUCTNAME', o.productname)
+            value = value.replace("%PRODUCTNAME", o.productname)
 
-            locale = locale.replace('-', '_')
+            locale = locale.replace("-", "_")
 
-            templates[template]['translations'][locale] = value
+            templates[template]["translations"][locale] = value
 
 source.close()
 
 processed = 0
 # process templates
-for template in templates:
-    outfilename = templates[template]['outfile']
+for template, entries in templates.items():
+    outfilename = entries["outfile"]
 
     # open the template file - ignore sections for which no
     # templates exist
     try:
-        template_file = io.open(outfilename, encoding='utf-8')
-    except Exception:
+        template_file = io.open(outfilename, encoding="utf-8")
+    except OSError:
         # string files processed one by one
-        if o.ext == 'str':
+        if o.ext == "str":
             continue
-        sys.exit("Warning: No template found for item '{}' : '{}' : '{}': 
$!\n".format(template, outfile, line))
+        sys.exit(
+            f"Warning: No template found for item '{template}' : 
'{outfilename}'\n"
+        )
     processed += 1
 
     # open output file
-    tmpfilename = '{}.tmp'.format(outfilename)
-    outfile = io.open(tmpfilename, 'w', encoding='utf-8')
+    tmpfilename = f"{outfilename}.tmp"
+    outfile = io.open(tmpfilename, "w", encoding="utf-8")
 
     # emit the template to the output file
     for line in template_file:
         keyline = line
         if keyline.startswith(o.key):
-            keyline = outkey + keyline[len(o.key):]
+            keyline = OUTKEY + keyline[len(o.key) :]
         outfile.write(keyline)
         if o.key in line:
-            translations = templates[template]['translations']
-            for locale in sorted (translations.keys()):
+            translations = entries["translations"]
+            for locale in sorted(translations.keys()):
                 value = translations.get(locale, None)
                 # print "locale is $locale\n";
                 # print "value is $value\n";
                 if value:
-                    if o.ext == "desktop" or o.ext == "str":
+                    if o.ext in ("desktop", "str"):
                         if o.ext == "desktop":
-                            value = encodeDesktopString(value)
-                        outfile.write(u"""{}[{}]={}\n""".format(outkey, 
locale, value))
+                            value = encode_desktop_string(value)
+                        outfile.write(f"{OUTKEY}[{locale}]={value}\n")
                     else:
-                        outfile.write(u"""\t[{}]{}={}\n""".format(locale, 
outkey, value))
+                        outfile.write(f"\t[{locale}]{OUTKEY}={value}\n")
 
     template_file.close()
 
@@ -163,5 +169,5 @@ for template in templates:
         os.unlink(outfilename)
     os.rename(tmpfilename, outfilename)
 
-if o.ext == 'str' and processed == 0:
+if o.ext == "str" and processed == 0:
     sys.exit("Warning: No matching templates processed")

Reply via email to