|
1 | 1 | import re |
2 | 2 | from collections.abc import Iterator |
3 | 3 | from pathlib import Path |
| 4 | +from tempfile import TemporaryDirectory |
4 | 5 |
|
5 | 6 | from docutils import core |
6 | 7 | from docutils.nodes import table, row |
| 8 | +from git import Repo |
7 | 9 |
|
8 | 10 |
|
9 | | -def get_languages_and_repos(devguide_dir: Path) -> Iterator[tuple[str, str | None]]: |
| 11 | +def get_languages_and_repos( |
| 12 | + devguide_dir: Path, |
| 13 | +) -> Iterator[tuple[str, str, str | None]]: |
10 | 14 | translating = devguide_dir.joinpath('documentation/translating.rst').read_text() |
11 | 15 | doctree = core.publish_doctree(translating) |
12 | 16 |
|
13 | 17 | for node in doctree.traverse(table): |
14 | 18 | for row_node in node.traverse(row)[1:]: |
15 | 19 | language = row_node[0].astext() |
16 | 20 | repo = row_node[2].astext() |
17 | | - language_match = re.match(r'.* \((.*)\)', language) |
| 21 | + language_match = re.match(r'(.*) \((.*)\)', language) |
18 | 22 | if not language_match: |
19 | 23 | raise ValueError( |
20 | 24 | f'Expected a language code in brackets in devguide table, found {language}' |
21 | 25 | ) |
22 | | - language_code = language_match.group(1).lower().replace('_', '-') |
| 26 | + language_name = language_match.group(1) |
| 27 | + language_code = language_match.group(2).lower().replace('_', '-') |
23 | 28 | repo_match = re.match(':github:`GitHub <(.*)>`', repo) |
24 | | - yield language_code, repo_match and repo_match.group(1) |
| 29 | + yield language_code, language_name, repo_match and repo_match.group(1) |
| 30 | + |
| 31 | + |
| 32 | +if __name__ == '__main__': |
| 33 | + with TemporaryDirectory() as directory: |
| 34 | + Repo.clone_from('https://github.com/python/devguide.git', directory, depth=1) |
| 35 | + for item in get_languages_and_repos(Path(directory)): |
| 36 | + print(item) |
0 commit comments