diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 0c968d339..826c25038 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -3,6 +3,8 @@ on: pull_request: workflow_dispatch: push: + branches: + - main jobs: test: diff --git a/repositories.py b/repositories.py index 5590771c2..d45cdde70 100644 --- a/repositories.py +++ b/repositories.py @@ -2,11 +2,9 @@ from collections.abc import Iterator from dataclasses import dataclass from pathlib import Path -from tempfile import TemporaryDirectory from docutils import core from docutils.nodes import table, row -from git import Repo def get_languages_and_repos( @@ -15,10 +13,14 @@ def get_languages_and_repos( translating = devguide_dir.joinpath( 'documentation/translations/translating.rst' ).read_text() - doctree = core.publish_doctree(translating) - - for node in doctree.traverse(table): - for row_node in node.traverse(row)[1:]: + doctree = core.publish_doctree( + translating, + settings_overrides={'report_level': 5}, + # docutils errors on Sphinx directives, but this does not matter for us + ) + + for node in doctree.findall(table): + for row_node in list(node.findall(row))[1:]: language = row_node[0].astext() repo = row_node[2].astext() language_match = re.match(r'(.*) \((.*)\)', language) @@ -39,10 +41,3 @@ def get_languages_and_repos( class Language: code: str name: str - - -if __name__ == '__main__': - with TemporaryDirectory() as directory: - Repo.clone_from('https://github.com/python/devguide.git', directory, depth=1) - for item in get_languages_and_repos(Path(directory)): - print(item) diff --git a/tests/test_repositories.py b/tests/test_repositories.py new file mode 100644 index 000000000..a95ebe816 --- /dev/null +++ b/tests/test_repositories.py @@ -0,0 +1,57 @@ +import unittest +import support +import tempfile +import shutil + +from pathlib import Path +from git import Repo + +with support.import_scripts(): + import repositories + from repositories import Language + + +class testRepositories(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.tempdir = tempfile.mkdtemp() + cls.test_repo_path = Path(cls.tempdir) / 'devguide' + cls.test_repo = Repo.clone_from( + 'https://github.com/python/devguide', + cls.test_repo_path, + branch='main', + depth=1, + ) + + @classmethod + def tearDownClass(cls): + shutil.rmtree(cls.tempdir) + + def test_get_languages_and_repos(self): + result = list(repositories.get_languages_and_repos(self.test_repo_path)) + + for entry in result: + info, repo = entry + self.assertIsInstance(info, Language) + + self.assertIn( + (Language(code='tr', name='Turkish'), 'python/python-docs-tr'), result + ) + self.assertIn( + (Language(code='es', name='Spanish'), 'python/python-docs-es'), result + ) + self.assertIn( + (Language(code='pl', name='Polish'), 'python/python-docs-pl'), result + ) + self.assertIn( + ( + Language(code='zh-tw', name='Traditional Chinese'), + 'python/python-docs-zh-tw', + ), + result, + ) + self.assertIn( + (Language(code='it', name='Italian'), 'python/python-docs-it'), result + ) + + self.assertGreater(len(result), 23 - 1)