-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcompletion.py
53 lines (45 loc) · 1.68 KB
/
completion.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import json
from dataclasses import dataclass
from functools import cache
from pathlib import Path
from tempfile import TemporaryDirectory
from typing import Literal
import git
from potodo import potodo
import translators
@cache
def branches_from_devguide(devguide_dir: Path) -> list[str]:
p = devguide_dir.joinpath('include/release-cycle.json')
data = json.loads(p.read_text())
return [
branch for branch in data if data[branch]['status'] in ('bugfix', 'security')
]
def get_completion(clones_dir: str, repo: str) -> tuple[float, 'TranslatorsData', str]:
clone_path = Path(clones_dir, repo)
for branch in branches_from_devguide(Path(clones_dir, 'devguide')) + ['master']:
try:
git.Repo.clone_from(
f'https://github.com/{repo}.git', clone_path, branch=branch
)
except git.GitCommandError:
print(f'failed to clone {repo} {branch}')
translators_data = TranslatorsData(0, False)
continue
else:
translators_number = translators.get_number(clone_path)
translators_link = translators.get_link(clone_path, repo, branch)
translators_data = TranslatorsData(translators_number, translators_link)
break
with TemporaryDirectory() as tmpdir:
completion = potodo.merge_and_scan_path(
clone_path,
pot_path=Path(clones_dir, 'cpython/Doc/build/gettext'),
merge_path=Path(tmpdir),
hide_reserved=False,
api_url='',
).completion
return completion, translators_data, branch
@dataclass(frozen=True)
class TranslatorsData:
number: int
link: str | Literal[False]