Repository: mkdocs/mkdocs
Pull request #3271 (2023-06-22 21:31:23)

get-deps: suggest 'mkdocs[i18n]' if `theme.locale` is used


Patch:
diff --git a/mkdocs/commands/get_deps.py b/mkdocs/commands/get_deps.py
index 9c8cc436..9caaf4fd 100644
--- a/mkdocs/commands/get_deps.py
+++ b/mkdocs/commands/get_deps.py
@@ -97,8 +97,15 @@ def get_deps(projects_file_url: str, config_file_path: str | None = None) -> Non
     with _open_config_file(config_file_path) as f:
         cfg = utils.yaml_load(f, loader=YamlLoader)  # type: ignore
 
+    packages_to_install = set()
+
     if all(c not in cfg for c in ('site_name', 'theme', 'plugins', 'markdown_extensions')):
         log.warning("The passed config file doesn't seem to be a mkdocs.yml config file")
+    else:
+        if dig(cfg, 'theme.locale') not in (NotFound, 'en'):
+            packages_to_install.add('mkdocs[i18n]')
+        else:
+            packages_to_install.add('mkdocs')
 
     try:
         theme = cfg['theme']['name']
@@ -120,7 +127,6 @@ def get_deps(projects_file_url: str, config_file_path: str | None = None) -> Non
     content = download_and_cache_url(projects_file_url, datetime.timedelta(days=7))
     projects = yaml.safe_load(content)['projects']
 
-    packages_to_install = set()
     for project in projects:
         for kind, wanted in wanted_plugins:
             available = strings(project.get(kind.projects_key, ()))


Test patch:
diff --git a/mkdocs/tests/get_deps_tests.py b/mkdocs/tests/get_deps_tests.py
index 0b2153ad..18d00094 100644
--- a/mkdocs/tests/get_deps_tests.py
+++ b/mkdocs/tests/get_deps_tests.py
@@ -41,7 +41,7 @@ class TestGetDeps(unittest.TestCase):
         cfg = '''
             plugins: [search]
         '''
-        self._test_get_deps(cfg, [])
+        self._test_get_deps(cfg, ['mkdocs'])
 
     def test_mkdocs_config(self):
         cfg = '''
@@ -82,6 +82,7 @@ class TestGetDeps(unittest.TestCase):
             [
                 'markdown-callouts',
                 'mdx-gh-links',
+                'mkdocs',
                 'mkdocs-autorefs',
                 'mkdocs-click',
                 'mkdocs-literate-nav',
@@ -104,7 +105,9 @@ class TestGetDeps(unittest.TestCase):
                   emoji_index: !!python/name:materialx.emoji.twemoji
                   emoji_generator: !!python/name:materialx.emoji.to_svg
         '''
-        self._test_get_deps(cfg, ['mkdocs-code-validator', 'mkdocs-material', 'pymdown-extensions'])
+        self._test_get_deps(
+            cfg, ['mkdocs', 'mkdocs-code-validator', 'mkdocs-material', 'pymdown-extensions']
+        )
 
     def test_theme_precedence(self):
         cfg = '''
@@ -112,19 +115,19 @@ class TestGetDeps(unittest.TestCase):
               - tags
             theme: material
         '''
-        self._test_get_deps(cfg, ['mkdocs-material'])
+        self._test_get_deps(cfg, ['mkdocs', 'mkdocs-material'])
 
         cfg = '''
             plugins:
               - material/tags
         '''
-        self._test_get_deps(cfg, ['mkdocs-material'])
+        self._test_get_deps(cfg, ['mkdocs', 'mkdocs-material'])
 
         cfg = '''
             plugins:
               - tags
         '''
-        self._test_get_deps(cfg, ['mkdocs-plugin-tags'])
+        self._test_get_deps(cfg, ['mkdocs', 'mkdocs-plugin-tags'])
 
     def test_nonexistent(self):
         cfg = '''
@@ -143,7 +146,7 @@ class TestGetDeps(unittest.TestCase):
             WARNING:Extension 'saqdhyndpvpa' is not provided by any registered project
         """
         with self._assert_logs(expected_logs):
-            self._test_get_deps(cfg, ['mkdocs-redirects'])
+            self._test_get_deps(cfg, ['mkdocs', 'mkdocs-redirects'])
 
     def test_git_and_shadowed(self):
         cfg = '''
@@ -151,11 +154,19 @@ class TestGetDeps(unittest.TestCase):
             plugins: [blog]
         '''
         self._test_get_deps(
-            cfg, ['git+https://github.com/andyoakley/mkdocs-blog', 'mkdocs-bootstrap4']
+            cfg, ['git+https://github.com/andyoakley/mkdocs-blog', 'mkdocs', 'mkdocs-bootstrap4']
         )
 
     def test_multi_theme(self):
         cfg = '''
             theme: minty
         '''
-        self._test_get_deps(cfg, ['mkdocs-bootswatch'])
+        self._test_get_deps(cfg, ['mkdocs', 'mkdocs-bootswatch'])
+
+    def test_with_locale(self):
+        cfg = '''
+            theme:
+                name: mkdocs
+                locale: uk
+        '''
+        self._test_get_deps(cfg, ['mkdocs[i18n]'])