Skip to content

Commit a53ac79

Browse files
authored
New progress script + New translation (python#144)
1 parent 01e26b8 commit a53ac79

File tree

6 files changed

+149
-13
lines changed

6 files changed

+149
-13
lines changed

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ repos:
2727
hooks:
2828
- id: black
2929
name: Run black on Python files
30-
args: ["--line-length=140", "--target-version=py311"]
30+
args: ["--target-version=py311"]
3131
files: \.py$
3232

3333
- repo: https://github.com/pre-commit/pre-commit-hooks

includes/wasm-notavail.po

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@
22
# Copyright (C) 2001-2023, Python Software Foundation
33
# This file is distributed under the same license as the Python package.
44
#
5-
#, fuzzy
65
msgid ""
76
msgstr ""
87
"Project-Id-Version: Python 3.11\n"
98
"Report-Msgid-Bugs-To: \n"
109
"POT-Creation-Date: 2023-03-01 00:18+0000\n"
11-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10+
"PO-Revision-Date: 2023-05-02 12:49+0300\n"
1211
"Last-Translator: \n"
1312
"Language-Team: TURKISH <python.docs.tr@gmail.com>\n"
1413
"Language: tr\n"
1514
"MIME-Version: 1.0\n"
1615
"Content-Type: text/plain; charset=UTF-8\n"
1716
"Content-Transfer-Encoding: 8bit\n"
17+
"X-Generator: Poedit 3.2.2\n"
1818

1919
#: includes/wasm-notavail.rst:3
2020
msgid ":ref:`Availability <availability>`: not Emscripten, not WASI."
21-
msgstr ""
21+
msgstr ":ref:`Kullanılabilirlik <availability>`: Emscripten değil, WASI değil."
2222

2323
#: includes/wasm-notavail.rst:5
2424
msgid ""
2525
"This module does not work or is not available on WebAssembly platforms "
2626
"``wasm32-emscripten`` and ``wasm32-wasi``. See :ref:`wasm-availability` for "
2727
"more information."
2828
msgstr ""
29+
"Bu modül WebAssembly platformları olan ``wasm32-emscripten`` ve ``wasm32-"
30+
"wasi`` üzerinde çalışmaz veya kullanılamaz. Daha fazla bilgi için :ref:`wasm-"
31+
"availability` sayfasına bakın."

merge.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ def update_makefile(cpython_repo: Path) -> None:
8585
used to generate the `po` files.
8686
"""
8787
makefile = Path("Makefile").read_text(encoding="UTF-8")
88-
head = run("git", "-C", cpython_repo, "rev-parse", "HEAD", stdout=PIPE).stdout.strip()
88+
head = run(
89+
"git", "-C", cpython_repo, "rev-parse", "HEAD", stdout=PIPE
90+
).stdout.strip()
8991
makefile = re.sub(
9092
"^CPYTHON_CURRENT_COMMIT :=.*$",
9193
f"CPYTHON_CURRENT_COMMIT := {head}",
@@ -121,8 +123,14 @@ def main():
121123
cwd=args.cpython_repo / "Doc",
122124
)
123125
pot_path = args.cpython_repo / "pot"
124-
upstream = {file.relative_to(pot_path).with_suffix(".po") for file in pot_path.glob("**/*.pot")}
125-
downstream = {Path(po) for po in run("git", "ls-files", "*.po", stdout=PIPE).stdout.splitlines()}
126+
upstream = {
127+
file.relative_to(pot_path).with_suffix(".po")
128+
for file in pot_path.glob("**/*.pot")
129+
}
130+
downstream = {
131+
Path(po)
132+
for po in run("git", "ls-files", "*.po", stdout=PIPE).stdout.splitlines()
133+
}
126134
copy_new_files(upstream - downstream, pot_path=pot_path)
127135
update_known_files(upstream & downstream, pot_path=pot_path)
128136
remove_old_files(downstream - upstream)

scripts/format_check.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
import polib
99

1010
parser = argparse.ArgumentParser()
11-
parser.add_argument("subject", nargs="?", default=None, help="Subject to check (file or directory)")
11+
parser.add_argument(
12+
"path",
13+
nargs="?",
14+
default=None,
15+
help="Path to the .po file or directory containing .po files",
16+
)
1217
parser.add_argument("-t", "--threshold", type=int, default=85)
1318
args = parser.parse_args()
1419

@@ -28,7 +33,11 @@
2833

2934
elif os.path.isfile(args.subject):
3035
is_file = True
31-
subject = args.subject if os.path.isabs(args.subject) else os.path.join(subject, args.subject)
36+
subject = (
37+
args.subject
38+
if os.path.isabs(args.subject)
39+
else os.path.join(subject, args.subject)
40+
)
3241

3342
else:
3443
print("Invalid subject, showing all files.")
@@ -56,7 +65,9 @@ def main(subject):
5665
wordsid = [word for word in entry.msgid.split() if has_delimiters(word)]
5766

5867
if has_delimiters(entry.msgstr):
59-
wordsstr = [word for word in entry.msgstr.split() if has_delimiters(word)]
68+
wordsstr = [
69+
word for word in entry.msgstr.split() if has_delimiters(word)
70+
]
6071

6172
if len(wordsid) != len(wordsstr):
6273
key = pofilename

scripts/progress.py

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import os
2+
from argparse import ArgumentParser
3+
from functools import lru_cache
4+
from subprocess import check_output
5+
6+
import polib
7+
8+
parser = ArgumentParser()
9+
parser.add_argument(
10+
"path",
11+
nargs="?",
12+
default=None,
13+
help="Path to the .po file or directory containing .po files",
14+
)
15+
parser.add_argument(
16+
"--no-cache", action="store_true", default=False, help="Don't use cache"
17+
)
18+
args = parser.parse_args()
19+
20+
21+
def main():
22+
global git_root
23+
total_progress = False
24+
git_root = get_git_root()
25+
26+
if args.no_cache:
27+
progress.cache_clear()
28+
get_git_root.cache_clear()
29+
30+
if args.path is None:
31+
print("No path specified, showing total progress...")
32+
args.path = os.path.abspath(git_root).replace("\\", "/")
33+
total_progress = True
34+
35+
else:
36+
args.path = os.path.abspath(args.path).replace("\\", "/")
37+
38+
if os.path.isfile(args.path):
39+
paths = [args.path]
40+
41+
elif os.path.isdir(args.path):
42+
paths = []
43+
for root, _, files in os.walk(args.path):
44+
paths.extend(
45+
os.path.join(root, file) for file in files if file.endswith(".po")
46+
)
47+
paths = map(lambda x: x.replace("\\", "/"), paths)
48+
49+
else:
50+
print("Invalid path")
51+
return -1
52+
53+
try:
54+
progress(tuple(paths), total_progress)
55+
return 0
56+
except Exception as e:
57+
print(f"Error: {e}")
58+
return -1
59+
60+
61+
@lru_cache(maxsize=512)
62+
def progress(paths, total_progress=False):
63+
total = 0
64+
translated = 0
65+
previous = "/"
66+
is_root = True
67+
for path in paths:
68+
pofile = polib.pofile(path)
69+
total += len(pofile) - len(pofile.obsolete_entries())
70+
translated += len(pofile.translated_entries())
71+
path = path.replace(f"{git_root}", "")
72+
if is_root and len(path.split("/")) == 2:
73+
print()
74+
print("PYTHON-DOCS-TR")
75+
print("-" * 14)
76+
is_root = False
77+
if (previous.split("/")[1] != path.split("/")[1]) and len(path.split("/")) > 2:
78+
print()
79+
print(path.split("/")[1].upper())
80+
print("-" * len(path.split("/")[1].upper()))
81+
previous = path
82+
print(f"{path}: {pofile.percent_translated()}%")
83+
84+
dir_path = args.path.replace(f"{git_root}", "/").replace("//", "/")
85+
total_progress_of = "/" if total_progress else dir_path
86+
print()
87+
print(
88+
f"Total progress of {total_progress_of}: {round(translated / total * 100, 2)}%"
89+
) if len(paths) > 1 else None
90+
91+
92+
@lru_cache(maxsize=1)
93+
def get_git_root():
94+
return os.path.abspath(
95+
check_output(["git", "rev-parse", "--show-toplevel"]).decode("utf-8").strip()
96+
).replace("\\", "/")
97+
98+
99+
if __name__ == "__main__":
100+
main()

scripts/translate.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@
99

1010
parser = ArgumentParser()
1111
parser.add_argument("filename", help="File to translate")
12-
parser.add_argument("-t", "--translator", choices=["google", "deepl"], default="deepl", help="Translator to use")
12+
parser.add_argument(
13+
"-t",
14+
"--translator",
15+
choices=["google", "deepl"],
16+
default="deepl",
17+
help="Translator to use",
18+
)
1319
parser.add_argument(
1420
"-a",
1521
"--api-key",
@@ -18,7 +24,13 @@
1824
)
1925
parser.add_argument("-v", "--verbose", action="store_true", help="Verbose mode")
2026
parser.add_argument("-d", "--debug", action="store_true", help="Debug mode")
21-
parser.add_argument("-s", "--skip-translated-entries", choices=[True, False], default=True, help="Skip already translated entries")
27+
parser.add_argument(
28+
"-s",
29+
"--skip-translated-entries",
30+
choices=[True, False],
31+
default=True,
32+
help="Skip already translated entries",
33+
)
2234

2335
args = parser.parse_args()
2436

@@ -117,7 +129,9 @@ def undo_sphinx_directives_protection(placeholders: dict, translated_text: str)
117129
if args.translator.lower() == "google":
118130
translator = GoogleTranslator(source="en", target="tr")
119131
elif args.translator.lower() == "deepl":
120-
translator = DeeplTranslator(api_key=args.api_key, source="en", target="tr", use_free_api=True)
132+
translator = DeeplTranslator(
133+
api_key=args.api_key, source="en", target="tr", use_free_api=True
134+
)
121135
else:
122136
raise ValueError("Invalid translator")
123137

0 commit comments

Comments
 (0)