mkdocs 1.5.2__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. {mkdocs-1.5.2 → mkdocs-1.6.0}/PKG-INFO +11 -13
  2. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/__init__.py +1 -1
  3. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/__main__.py +21 -16
  4. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/commands/build.py +23 -32
  5. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/commands/gh_deploy.py +1 -1
  6. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/commands/serve.py +12 -19
  7. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/config/base.py +8 -12
  8. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/config/config_options.py +59 -44
  9. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/config/defaults.py +41 -11
  10. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/__init__.py +7 -6
  11. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.ar.js +1 -1
  12. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.hi.js +123 -0
  13. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.hy.js +98 -0
  14. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.kn.js +110 -0
  15. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.ko.js +114 -0
  16. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.ro.js +3 -3
  17. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.ru.js +3 -3
  18. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.sa.js +110 -0
  19. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.ta.js +123 -0
  20. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.te.js +122 -0
  21. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.th.js +19 -17
  22. mkdocs-1.6.0/mkdocs/contrib/search/lunr-language/lunr.zh.js +145 -0
  23. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/search_index.py +5 -11
  24. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/exceptions.py +17 -9
  25. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/livereload/__init__.py +66 -46
  26. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/localization.py +11 -7
  27. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/plugins.py +119 -58
  28. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/structure/files.py +297 -76
  29. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/structure/nav.py +29 -8
  30. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/structure/pages.py +179 -68
  31. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/structure/toc.py +4 -14
  32. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/base.py +1 -1
  33. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/build_tests.py +121 -48
  34. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/cli_tests.py +16 -6
  35. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/config/base_tests.py +7 -17
  36. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/config/config_options_legacy_tests.py +23 -25
  37. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/config/config_options_tests.py +110 -55
  38. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/config/config_tests.py +7 -1
  39. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/gh_deploy_tests.py +36 -41
  40. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration.py +3 -3
  41. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/livereload_tests.py +3 -23
  42. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/localization_tests.py +1 -1
  43. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/plugin_tests.py +33 -11
  44. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/search_tests.py +2 -4
  45. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/structure/file_tests.py +262 -263
  46. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/structure/nav_tests.py +98 -3
  47. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/structure/page_tests.py +201 -68
  48. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/theme_tests.py +5 -2
  49. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/utils/utils_tests.py +83 -78
  50. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/theme.py +30 -18
  51. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/base.html +55 -18
  52. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/css/base.css +89 -48
  53. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/bootstrap.min.css +12 -0
  54. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/bootstrap.min.css.map +1 -0
  55. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/brands.min.css +6 -0
  56. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/fontawesome.min.css +9 -0
  57. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/solid.min.css +6 -0
  58. mkdocs-1.6.0/mkdocs/themes/mkdocs/css/v4-font-face.min.css +6 -0
  59. mkdocs-1.6.0/mkdocs/themes/mkdocs/js/base.js +278 -0
  60. mkdocs-1.6.0/mkdocs/themes/mkdocs/js/bootstrap.bundle.min.js +7 -0
  61. mkdocs-1.6.0/mkdocs/themes/mkdocs/js/bootstrap.bundle.min.js.map +1 -0
  62. mkdocs-1.6.0/mkdocs/themes/mkdocs/js/darkmode.js +65 -0
  63. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/keyboard-modal.html +1 -1
  64. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/messages.mo +0 -0
  65. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/de/LC_MESSAGES/messages.po +9 -9
  66. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/messages.mo +0 -0
  67. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/es/LC_MESSAGES/messages.po +9 -9
  68. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/messages.mo +0 -0
  69. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/fa/LC_MESSAGES/messages.po +9 -9
  70. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/messages.mo +0 -0
  71. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/fr/LC_MESSAGES/messages.po +9 -9
  72. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/messages.mo +0 -0
  73. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/id/LC_MESSAGES/messages.po +12 -11
  74. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/messages.mo +0 -0
  75. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/it/LC_MESSAGES/messages.po +9 -9
  76. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/messages.mo +0 -0
  77. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/ja/LC_MESSAGES/messages.po +9 -9
  78. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/messages.mo +0 -0
  79. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/nb/LC_MESSAGES/messages.po +9 -9
  80. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/messages.mo +0 -0
  81. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/nn/LC_MESSAGES/messages.po +9 -9
  82. mkdocs-1.6.0/mkdocs/themes/mkdocs/locales/pl/LC_MESSAGES/messages.mo +0 -0
  83. mkdocs-1.6.0/mkdocs/themes/mkdocs/locales/pl/LC_MESSAGES/messages.po +104 -0
  84. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/messages.mo +0 -0
  85. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/pt_BR/LC_MESSAGES/messages.po +9 -9
  86. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/messages.mo +0 -0
  87. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/ru/LC_MESSAGES/messages.po +12 -10
  88. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/messages.mo +0 -0
  89. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/tr/LC_MESSAGES/messages.po +13 -10
  90. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/messages.mo +0 -0
  91. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/uk/LC_MESSAGES/messages.po +10 -9
  92. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/messages.mo +0 -0
  93. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/locales/zh_CN/LC_MESSAGES/messages.po +10 -10
  94. mkdocs-1.6.0/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/messages.mo +0 -0
  95. mkdocs-1.6.0/mkdocs/themes/mkdocs/locales/zh_TW/LC_MESSAGES/messages.po +101 -0
  96. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/messages.pot +16 -15
  97. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/mkdocs_theme.yml +3 -0
  98. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/nav-sub.html +1 -1
  99. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/search-modal.html +1 -1
  100. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/toc.html +4 -4
  101. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-brands-400.ttf +0 -0
  102. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-brands-400.woff2 +0 -0
  103. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-regular-400.ttf +0 -0
  104. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-regular-400.woff2 +0 -0
  105. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-solid-900.ttf +0 -0
  106. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-solid-900.woff2 +0 -0
  107. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-v4compatibility.ttf +0 -0
  108. mkdocs-1.6.0/mkdocs/themes/mkdocs/webfonts/fa-v4compatibility.woff2 +0 -0
  109. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/base.html +8 -0
  110. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/breadcrumbs.html +4 -4
  111. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/theme_extra.css +8 -2
  112. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/footer.html +1 -1
  113. mkdocs-1.6.0/mkdocs/themes/readthedocs/js/theme.js +2 -0
  114. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/messages.mo +0 -0
  115. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/messages.po +11 -8
  116. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/messages.mo +0 -0
  117. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/messages.po +12 -9
  118. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/messages.mo +0 -0
  119. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/fa/LC_MESSAGES/messages.po +11 -8
  120. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/messages.mo +0 -0
  121. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/messages.po +11 -8
  122. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/messages.mo +0 -0
  123. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/id/LC_MESSAGES/messages.po +11 -7
  124. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/messages.mo +0 -0
  125. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/messages.po +11 -8
  126. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/messages.mo +0 -0
  127. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/ja/LC_MESSAGES/messages.po +11 -8
  128. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/pl/LC_MESSAGES/messages.mo +0 -0
  129. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/pl/LC_MESSAGES/messages.po +114 -0
  130. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/messages.mo +0 -0
  131. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/messages.po +12 -9
  132. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/messages.mo +0 -0
  133. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/ru/LC_MESSAGES/messages.po +11 -7
  134. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/messages.mo +0 -0
  135. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/tr/LC_MESSAGES/messages.po +15 -10
  136. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/messages.mo +0 -0
  137. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/uk/LC_MESSAGES/messages.po +12 -8
  138. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/messages.mo +0 -0
  139. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/locales/zh_CN/LC_MESSAGES/messages.po +13 -12
  140. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/messages.mo +0 -0
  141. mkdocs-1.6.0/mkdocs/themes/readthedocs/locales/zh_TW/LC_MESSAGES/messages.po +111 -0
  142. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/messages.pot +16 -11
  143. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/nav.html +6 -6
  144. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/versions.html +4 -0
  145. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/utils/__init__.py +19 -69
  146. mkdocs-1.6.0/mkdocs/utils/cache.py +36 -0
  147. mkdocs-1.6.0/mkdocs/utils/filters.py +1 -0
  148. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/utils/meta.py +2 -4
  149. mkdocs-1.6.0/mkdocs/utils/rendering.py +104 -0
  150. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/utils/templates.py +1 -7
  151. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/utils/yaml.py +11 -7
  152. {mkdocs-1.5.2 → mkdocs-1.6.0}/pyproject.toml +59 -37
  153. mkdocs-1.5.2/mkdocs/commands/get_deps.py +0 -178
  154. mkdocs-1.5.2/mkdocs/tests/get_deps_tests.py +0 -172
  155. mkdocs-1.5.2/mkdocs/themes/mkdocs/css/bootstrap.min.css +0 -12
  156. mkdocs-1.5.2/mkdocs/themes/mkdocs/css/font-awesome.min.css +0 -4
  157. mkdocs-1.5.2/mkdocs/themes/mkdocs/js/base.js +0 -283
  158. mkdocs-1.5.2/mkdocs/themes/mkdocs/js/bootstrap.min.js +0 -7
  159. mkdocs-1.5.2/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.eot +0 -0
  160. mkdocs-1.5.2/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.svg +0 -2671
  161. mkdocs-1.5.2/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.ttf +0 -0
  162. mkdocs-1.5.2/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff +0 -0
  163. mkdocs-1.5.2/mkdocs/themes/readthedocs/css/fonts/fontawesome-webfont.woff2 +0 -0
  164. mkdocs-1.5.2/mkdocs/themes/readthedocs/js/jquery-3.6.0.min.js +0 -2
  165. mkdocs-1.5.2/mkdocs/themes/readthedocs/js/theme.js +0 -2
  166. mkdocs-1.5.2/mkdocs/themes/readthedocs/locales/de/LC_MESSAGES/messages.mo +0 -0
  167. mkdocs-1.5.2/mkdocs/themes/readthedocs/locales/es/LC_MESSAGES/messages.mo +0 -0
  168. mkdocs-1.5.2/mkdocs/themes/readthedocs/locales/fr/LC_MESSAGES/messages.mo +0 -0
  169. mkdocs-1.5.2/mkdocs/themes/readthedocs/locales/it/LC_MESSAGES/messages.mo +0 -0
  170. mkdocs-1.5.2/mkdocs/themes/readthedocs/locales/pt_BR/LC_MESSAGES/messages.mo +0 -0
  171. mkdocs-1.5.2/mkdocs/utils/cache.py +0 -64
  172. mkdocs-1.5.2/mkdocs/utils/filters.py +0 -1
  173. {mkdocs-1.5.2 → mkdocs-1.6.0}/.gitignore +0 -0
  174. {mkdocs-1.5.2 → mkdocs-1.6.0}/LICENSE +0 -0
  175. {mkdocs-1.5.2 → mkdocs-1.6.0}/README.md +0 -0
  176. {mkdocs-1.5.2 → mkdocs-1.6.0}/hatch_build.py +0 -0
  177. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/commands/__init__.py +0 -0
  178. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/commands/new.py +0 -0
  179. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/config/__init__.py +0 -0
  180. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/__init__.py +0 -0
  181. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.da.js +0 -0
  182. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.de.js +0 -0
  183. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.du.js +0 -0
  184. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.es.js +0 -0
  185. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.fi.js +0 -0
  186. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.fr.js +0 -0
  187. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.hu.js +0 -0
  188. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.it.js +0 -0
  189. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.ja.js +0 -0
  190. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.jp.js +0 -0
  191. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.multi.js +0 -0
  192. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.nl.js +0 -0
  193. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.no.js +0 -0
  194. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.pt.js +0 -0
  195. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.stemmer.support.js +0 -0
  196. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.sv.js +0 -0
  197. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.tr.js +0 -0
  198. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/lunr.vi.js +0 -0
  199. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/lunr-language/tinyseg.js +0 -0
  200. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/prebuild-index.js +0 -0
  201. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/templates/search/lunr.js +0 -0
  202. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/templates/search/main.js +0 -0
  203. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/contrib/search/templates/search/worker.js +0 -0
  204. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/py.typed +0 -0
  205. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/structure/__init__.py +0 -0
  206. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/templates/sitemap.xml +0 -0
  207. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/__init__.py +0 -0
  208. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/config/__init__.py +0 -0
  209. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/documentation/custom.html +0 -0
  210. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/documentation/index.md +0 -0
  211. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/documentation/tweak.css +0 -0
  212. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/documentation/tweak.js +0 -0
  213. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/mkdocs.yml +0 -0
  214. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/complicated_config/theme_tweaks/404.html +0 -0
  215. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/minimal/docs/testing.md +0 -0
  216. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/minimal/mkdocs.yml +0 -0
  217. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/projects.yaml +0 -0
  218. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/image.png +0 -0
  219. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/index.md +0 -0
  220. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/metadata.md +0 -0
  221. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/non-index.md +0 -0
  222. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/page-title.md +0 -0
  223. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/pageTitle.md +0 -0
  224. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub1/image.png +0 -0
  225. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub1/index.md +0 -0
  226. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub1/non-index.md +0 -0
  227. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub1/sub1a/index.md +0 -0
  228. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub1/sub1a/non-index.md +0 -0
  229. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub2/index.md +0 -0
  230. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/docs/sub2/non-index.md +0 -0
  231. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/subpages/mkdocs.yml +0 -0
  232. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/unicode/docs/index.md +0 -0
  233. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/unicode/docs//303/234bersicht.md" +0 -0
  234. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/unicode/docs//342/231/252.md" +0 -0
  235. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/integration/unicode/mkdocs.yml +0 -0
  236. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/new_tests.py +0 -0
  237. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/structure/__init__.py +0 -0
  238. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/structure/toc_tests.py +0 -0
  239. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/utils/__init__.py +0 -0
  240. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/utils/babel_stub_tests.py +0 -0
  241. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/tests/utils/templates_tests.py +0 -0
  242. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/__init__.py +0 -0
  243. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/babel.cfg +0 -0
  244. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/404.html +0 -0
  245. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/__init__.py +0 -0
  246. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/content.html +0 -0
  247. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/img/favicon.ico +0 -0
  248. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/img/grid.png +0 -0
  249. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/mkdocs/main.html +0 -0
  250. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/404.html +0 -0
  251. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/__init__.py +0 -0
  252. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Bold.woff +0 -0
  253. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  254. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff +0 -0
  255. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  256. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs/css}/fonts/fontawesome-webfont.eot +0 -0
  257. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs/css}/fonts/fontawesome-webfont.svg +0 -0
  258. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs/css}/fonts/fontawesome-webfont.ttf +0 -0
  259. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs/css}/fonts/fontawesome-webfont.woff +0 -0
  260. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs/css}/fonts/fontawesome-webfont.woff2 +0 -0
  261. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-bold-italic.woff +0 -0
  262. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-bold-italic.woff2 +0 -0
  263. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-bold.woff +0 -0
  264. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-bold.woff2 +0 -0
  265. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-normal-italic.woff +0 -0
  266. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-normal-italic.woff2 +0 -0
  267. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff +0 -0
  268. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/fonts/lato-normal.woff2 +0 -0
  269. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/css/theme.css +0 -0
  270. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/img/favicon.ico +0 -0
  271. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/js/html5shiv.min.js +0 -0
  272. {mkdocs-1.5.2/mkdocs/themes/mkdocs → mkdocs-1.6.0/mkdocs/themes/readthedocs}/js/jquery-3.6.0.min.js +0 -0
  273. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/js/theme_extra.js +0 -0
  274. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/main.html +0 -0
  275. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/mkdocs_theme.yml +0 -0
  276. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/search.html +0 -0
  277. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/searchbox.html +0 -0
  278. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/themes/readthedocs/toc.html +0 -0
  279. {mkdocs-1.5.2 → mkdocs-1.6.0}/mkdocs/utils/babel_stub.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: mkdocs
3
- Version: 1.5.2
3
+ Version: 1.6.0
4
4
  Summary: Project documentation with Markdown.
5
5
  Project-URL: Documentation, https://www.mkdocs.org/
6
6
  Project-URL: Source, https://github.com/mkdocs/mkdocs
@@ -18,49 +18,47 @@ Classifier: Operating System :: OS Independent
18
18
  Classifier: Programming Language :: Python
19
19
  Classifier: Programming Language :: Python :: 3
20
20
  Classifier: Programming Language :: Python :: 3 :: Only
21
- Classifier: Programming Language :: Python :: 3.7
22
21
  Classifier: Programming Language :: Python :: 3.8
23
22
  Classifier: Programming Language :: Python :: 3.9
24
23
  Classifier: Programming Language :: Python :: 3.10
25
24
  Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
26
  Classifier: Programming Language :: Python :: Implementation :: CPython
27
27
  Classifier: Programming Language :: Python :: Implementation :: PyPy
28
28
  Classifier: Topic :: Documentation
29
29
  Classifier: Topic :: Text Processing
30
- Requires-Python: >=3.7
30
+ Requires-Python: >=3.8
31
31
  Requires-Dist: click>=7.0
32
32
  Requires-Dist: colorama>=0.4; platform_system == 'Windows'
33
33
  Requires-Dist: ghp-import>=1.0
34
- Requires-Dist: importlib-metadata>=4.3; python_version < '3.10'
34
+ Requires-Dist: importlib-metadata>=4.4; python_version < '3.10'
35
35
  Requires-Dist: jinja2>=2.11.1
36
- Requires-Dist: markdown>=3.2.1
36
+ Requires-Dist: markdown>=3.3.6
37
37
  Requires-Dist: markupsafe>=2.0.1
38
38
  Requires-Dist: mergedeep>=1.3.4
39
+ Requires-Dist: mkdocs-get-deps>=0.2.0
39
40
  Requires-Dist: packaging>=20.5
40
41
  Requires-Dist: pathspec>=0.11.1
41
- Requires-Dist: platformdirs>=2.2.0
42
42
  Requires-Dist: pyyaml-env-tag>=0.1
43
43
  Requires-Dist: pyyaml>=5.1
44
- Requires-Dist: typing-extensions>=3.10; python_version < '3.8'
45
44
  Requires-Dist: watchdog>=2.0
46
45
  Provides-Extra: i18n
47
46
  Requires-Dist: babel>=2.9.0; extra == 'i18n'
48
47
  Provides-Extra: min-versions
49
48
  Requires-Dist: babel==2.9.0; extra == 'min-versions'
50
49
  Requires-Dist: click==7.0; extra == 'min-versions'
51
- Requires-Dist: colorama==0.4; platform_system == 'Windows' and extra == 'min-versions'
50
+ Requires-Dist: colorama==0.4; (platform_system == 'Windows') and extra == 'min-versions'
52
51
  Requires-Dist: ghp-import==1.0; extra == 'min-versions'
53
- Requires-Dist: importlib-metadata==4.3; python_version < '3.10' and extra == 'min-versions'
52
+ Requires-Dist: importlib-metadata==4.4; (python_version < '3.10') and extra == 'min-versions'
54
53
  Requires-Dist: jinja2==2.11.1; extra == 'min-versions'
55
- Requires-Dist: markdown==3.2.1; extra == 'min-versions'
54
+ Requires-Dist: markdown==3.3.6; extra == 'min-versions'
56
55
  Requires-Dist: markupsafe==2.0.1; extra == 'min-versions'
57
56
  Requires-Dist: mergedeep==1.3.4; extra == 'min-versions'
57
+ Requires-Dist: mkdocs-get-deps==0.2.0; extra == 'min-versions'
58
58
  Requires-Dist: packaging==20.5; extra == 'min-versions'
59
59
  Requires-Dist: pathspec==0.11.1; extra == 'min-versions'
60
- Requires-Dist: platformdirs==2.2.0; extra == 'min-versions'
61
60
  Requires-Dist: pyyaml-env-tag==0.1; extra == 'min-versions'
62
61
  Requires-Dist: pyyaml==5.1; extra == 'min-versions'
63
- Requires-Dist: typing-extensions==3.10; python_version < '3.8' and extra == 'min-versions'
64
62
  Requires-Dist: watchdog==2.0; extra == 'min-versions'
65
63
  Description-Content-Type: text/markdown
66
64
 
@@ -2,4 +2,4 @@
2
2
 
3
3
 
4
4
  # For acceptable version formats, see https://www.python.org/dev/peps/pep-0440/
5
- __version__ = '1.5.2'
5
+ __version__ = '1.6.0'
@@ -89,13 +89,11 @@ class State:
89
89
 
90
90
  def __init__(self, log_name='mkdocs', level=logging.INFO):
91
91
  self.logger = logging.getLogger(log_name)
92
- # Don't restrict level on logger; use handler
93
- self.logger.setLevel(1)
92
+ self.logger.setLevel(level)
94
93
  self.logger.propagate = False
95
94
 
96
95
  self.stream = logging.StreamHandler()
97
96
  self.stream.setFormatter(ColorFormatter())
98
- self.stream.setLevel(level)
99
97
  self.stream.name = 'MkDocsStreamHandler'
100
98
  self.logger.addHandler(self.stream)
101
99
 
@@ -110,6 +108,7 @@ config_help = (
110
108
  "Provide a specific MkDocs config. This can be a file name, or '-' to read from stdin."
111
109
  )
112
110
  dev_addr_help = "IP address and port to serve documentation locally (default: localhost:8000)"
111
+ serve_open_help = "Open the website in a Web browser after the initial build finishes."
113
112
  strict_help = "Enable strict mode. This will cause MkDocs to abort the build on any warnings."
114
113
  theme_help = "The theme to use when building your documentation."
115
114
  theme_choices = sorted(utils.get_theme_names())
@@ -161,7 +160,7 @@ def verbose_option(f):
161
160
  def callback(ctx, param, value):
162
161
  state = ctx.ensure_object(State)
163
162
  if value:
164
- state.stream.setLevel(logging.DEBUG)
163
+ state.logger.setLevel(logging.DEBUG)
165
164
 
166
165
  return click.option(
167
166
  '-v',
@@ -177,7 +176,7 @@ def quiet_option(f):
177
176
  def callback(ctx, param, value):
178
177
  state = ctx.ensure_object(State)
179
178
  if value:
180
- state.stream.setLevel(logging.ERROR)
179
+ state.logger.setLevel(logging.ERROR)
181
180
 
182
181
  return click.option(
183
182
  '-q',
@@ -244,13 +243,12 @@ PKG_DIR = os.path.dirname(os.path.abspath(__file__))
244
243
  @common_options
245
244
  @color_option
246
245
  def cli():
247
- """
248
- MkDocs - Project documentation with Markdown.
249
- """
246
+ """MkDocs - Project documentation with Markdown."""
250
247
 
251
248
 
252
249
  @cli.command(name="serve")
253
250
  @click.option('-a', '--dev-addr', help=dev_addr_help, metavar='<IP:PORT>')
251
+ @click.option('-o', '--open', 'open_in_browser', help=serve_open_help, is_flag=True)
254
252
  @click.option('--no-livereload', 'livereload', flag_value=False, help=no_reload_help)
255
253
  @click.option('--livereload', 'livereload', flag_value=True, default=True, hidden=True)
256
254
  @click.option('--dirtyreload', 'build_type', flag_value='dirty', hidden=True)
@@ -263,7 +261,7 @@ def cli():
263
261
  @common_config_options
264
262
  @common_options
265
263
  def serve_command(**kwargs):
266
- """Run the builtin development server"""
264
+ """Run the builtin development server."""
267
265
  from mkdocs.commands import serve
268
266
 
269
267
  _enable_warnings()
@@ -276,7 +274,7 @@ def serve_command(**kwargs):
276
274
  @click.option('-d', '--site-dir', type=click.Path(), help=site_dir_help)
277
275
  @common_options
278
276
  def build_command(clean, **kwargs):
279
- """Build the MkDocs documentation"""
277
+ """Build the MkDocs documentation."""
280
278
  from mkdocs.commands import build
281
279
 
282
280
  _enable_warnings()
@@ -303,7 +301,7 @@ def build_command(clean, **kwargs):
303
301
  def gh_deploy_command(
304
302
  clean, message, remote_branch, remote_name, force, no_history, ignore_version, shell, **kwargs
305
303
  ):
306
- """Deploy your documentation to GitHub Pages"""
304
+ """Deploy your documentation to GitHub Pages."""
307
305
  from mkdocs.commands import build, gh_deploy
308
306
 
309
307
  _enable_warnings()
@@ -329,19 +327,26 @@ def gh_deploy_command(
329
327
  @click.option(
330
328
  '-p',
331
329
  '--projects-file',
332
- default='https://raw.githubusercontent.com/mkdocs/catalog/main/projects.yaml',
330
+ default=None,
333
331
  help=projects_file_help,
334
332
  show_default=True,
335
333
  )
336
334
  def get_deps_command(config_file, projects_file):
337
- """Show required PyPI packages inferred from plugins in mkdocs.yml"""
338
- from mkdocs.commands import get_deps
335
+ """Show required PyPI packages inferred from plugins in mkdocs.yml."""
336
+ from mkdocs_get_deps import get_deps, get_projects_file
337
+
338
+ from mkdocs.config.base import _open_config_file
339
339
 
340
340
  warning_counter = utils.CountHandler()
341
341
  warning_counter.setLevel(logging.WARNING)
342
342
  logging.getLogger('mkdocs').addHandler(warning_counter)
343
343
 
344
- get_deps.get_deps(projects_file_url=projects_file, config_file_path=config_file)
344
+ with get_projects_file(projects_file) as p:
345
+ with _open_config_file(config_file) as f:
346
+ deps = get_deps(config_file=f, projects_file=p)
347
+
348
+ for dep in deps:
349
+ print(dep) # noqa: T201
345
350
 
346
351
  if warning_counter.get_counts():
347
352
  sys.exit(1)
@@ -351,7 +356,7 @@ def get_deps_command(config_file, projects_file):
351
356
  @click.argument("project_directory")
352
357
  @common_options
353
358
  def new_command(project_directory):
354
- """Create a new MkDocs project"""
359
+ """Create a new MkDocs project."""
355
360
  from mkdocs.commands import new
356
361
 
357
362
  new.new(project_directory)
@@ -13,17 +13,15 @@ from jinja2.exceptions import TemplateNotFound
13
13
  import mkdocs
14
14
  from mkdocs import utils
15
15
  from mkdocs.exceptions import Abort, BuildError
16
- from mkdocs.structure.files import File, Files, InclusionLevel, _set_exclusions, get_files
16
+ from mkdocs.structure.files import File, Files, InclusionLevel, get_files, set_exclusions
17
17
  from mkdocs.structure.nav import Navigation, get_navigation
18
18
  from mkdocs.structure.pages import Page
19
- from mkdocs.utils import DuplicateFilter # noqa - legacy re-export
19
+ from mkdocs.utils import DuplicateFilter # noqa: F401 - legacy re-export
20
20
  from mkdocs.utils import templates
21
21
 
22
22
  if TYPE_CHECKING:
23
23
  from mkdocs.config.defaults import MkDocsConfig
24
24
 
25
- if TYPE_CHECKING:
26
- from mkdocs.livereload import LiveReloadServer
27
25
 
28
26
  log = logging.getLogger(__name__)
29
27
 
@@ -35,9 +33,7 @@ def get_context(
35
33
  page: Page | None = None,
36
34
  base_url: str = '',
37
35
  ) -> templates.TemplateContext:
38
- """
39
- Return the template context for a given page or template.
40
- """
36
+ """Return the template context for a given page or template."""
41
37
  if page is not None:
42
38
  base_url = utils.get_relative_url('.', page.url)
43
39
 
@@ -65,9 +61,7 @@ def get_context(
65
61
  def _build_template(
66
62
  name: str, template: jinja2.Template, files: Files, config: MkDocsConfig, nav: Navigation
67
63
  ) -> str:
68
- """
69
- Return rendered output for given template as a string.
70
- """
64
+ """Return rendered output for given template as a string."""
71
65
  # Run `pre_template` plugin events.
72
66
  template = config.plugins.on_pre_template(template, template_name=name, config=config)
73
67
 
@@ -98,7 +92,6 @@ def _build_theme_template(
98
92
  template_name: str, env: jinja2.Environment, files: Files, config: MkDocsConfig, nav: Navigation
99
93
  ) -> None:
100
94
  """Build a template using the theme environment."""
101
-
102
95
  log.debug(f"Building theme template: {template_name}")
103
96
 
104
97
  try:
@@ -117,7 +110,9 @@ def _build_theme_template(
117
110
  log.debug(f"Gzipping template: {template_name}")
118
111
  gz_filename = f'{output_path}.gz'
119
112
  with open(gz_filename, 'wb') as f:
120
- timestamp = utils.get_build_timestamp()
113
+ timestamp = utils.get_build_timestamp(
114
+ pages=[f.page for f in files.documentation_pages() if f.page is not None]
115
+ )
121
116
  with gzip.GzipFile(
122
117
  fileobj=f, filename=gz_filename, mode='wb', mtime=timestamp
123
118
  ) as gz_buf:
@@ -128,7 +123,6 @@ def _build_theme_template(
128
123
 
129
124
  def _build_extra_template(template_name: str, files: Files, config: MkDocsConfig, nav: Navigation):
130
125
  """Build user templates which are not part of the theme."""
131
-
132
126
  log.debug(f"Building extra template: {template_name}")
133
127
 
134
128
  file = files.get_file_from_path(template_name)
@@ -137,8 +131,7 @@ def _build_extra_template(template_name: str, files: Files, config: MkDocsConfig
137
131
  return
138
132
 
139
133
  try:
140
- with open(file.abs_src_path, encoding='utf-8', errors='strict') as f:
141
- template = jinja2.Template(f.read())
134
+ template = jinja2.Template(file.content_string)
142
135
  except Exception as e:
143
136
  log.warning(f"Error reading template '{template_name}': {e}")
144
137
  return
@@ -153,7 +146,6 @@ def _build_extra_template(template_name: str, files: Files, config: MkDocsConfig
153
146
 
154
147
  def _populate_page(page: Page, config: MkDocsConfig, files: Files, dirty: bool = False) -> None:
155
148
  """Read page content from docs_dir and render Markdown."""
156
-
157
149
  config._current_page = page
158
150
  try:
159
151
  # When --dirty is used, only read the page if the file has been modified since the
@@ -200,7 +192,6 @@ def _build_page(
200
192
  excluded: bool = False,
201
193
  ) -> None:
202
194
  """Pass a Page to theme template and write output to site_dir."""
203
-
204
195
  config._current_page = page
205
196
  try:
206
197
  # When --dirty is used, only build the page if the file has been modified since the
@@ -255,11 +246,8 @@ def _build_page(
255
246
  config._current_page = None
256
247
 
257
248
 
258
- def build(
259
- config: MkDocsConfig, live_server: LiveReloadServer | None = None, dirty: bool = False
260
- ) -> None:
249
+ def build(config: MkDocsConfig, *, serve_url: str | None = None, dirty: bool = False) -> None:
261
250
  """Perform a full site build."""
262
-
263
251
  logger = logging.getLogger('mkdocs')
264
252
 
265
253
  # Add CountHandler for strict mode
@@ -268,7 +256,7 @@ def build(
268
256
  if config.strict:
269
257
  logging.getLogger('mkdocs').addHandler(warning_counter)
270
258
 
271
- inclusion = InclusionLevel.all if live_server else InclusionLevel.is_included
259
+ inclusion = InclusionLevel.is_in_serve if serve_url else InclusionLevel.is_included
272
260
 
273
261
  try:
274
262
  start = time.monotonic()
@@ -289,7 +277,7 @@ def build(
289
277
  " links within your site. This option is designed for site development purposes only."
290
278
  )
291
279
 
292
- if not live_server: # pragma: no cover
280
+ if not serve_url: # pragma: no cover
293
281
  log.info(f"Building documentation to directory: {config.site_dir}")
294
282
  if dirty and site_directory_contains_stale_files(config.site_dir):
295
283
  log.info("The directory contains stale files. Use --clean to remove them.")
@@ -303,7 +291,7 @@ def build(
303
291
  # Run `files` plugin events.
304
292
  files = config.plugins.on_files(files, config=config)
305
293
  # If plugins have added files but haven't set their inclusion level, calculate it again.
306
- _set_exclusions(files._files, config)
294
+ set_exclusions(files, config)
307
295
 
308
296
  nav = get_navigation(files, config)
309
297
 
@@ -314,16 +302,16 @@ def build(
314
302
  excluded = []
315
303
  for file in files.documentation_pages(inclusion=inclusion):
316
304
  log.debug(f"Reading: {file.src_uri}")
317
- if file.page is None and file.inclusion.is_excluded():
318
- if live_server:
319
- excluded.append(urljoin(live_server.url, file.url))
305
+ if file.page is None and file.inclusion.is_not_in_nav():
306
+ if serve_url and file.inclusion.is_excluded():
307
+ excluded.append(urljoin(serve_url, file.url))
320
308
  Page(None, file, config)
321
309
  assert file.page is not None
322
310
  _populate_page(file.page, config, files, dirty)
323
311
  if excluded:
324
312
  log.info(
325
313
  "The following pages are being built only for the preview "
326
- "but will be excluded from `mkdocs build` per `exclude_docs`:\n - "
314
+ "but will be excluded from `mkdocs build` per `draft_docs` config:\n - "
327
315
  + "\n - ".join(excluded)
328
316
  )
329
317
 
@@ -350,11 +338,15 @@ def build(
350
338
  file.page, config, doc_files, nav, env, dirty, excluded=file.inclusion.is_excluded()
351
339
  )
352
340
 
341
+ log_level = config.validation.links.anchors
342
+ for file in doc_files:
343
+ assert file.page is not None
344
+ file.page.validate_anchor_links(files=files, log_level=log_level)
345
+
353
346
  # Run `post_build` plugin events.
354
347
  config.plugins.on_post_build(config=config)
355
348
 
356
- counts = warning_counter.get_counts()
357
- if counts:
349
+ if counts := warning_counter.get_counts():
358
350
  msg = ', '.join(f'{v} {k.lower()}s' for k, v in counts)
359
351
  raise Abort(f'Aborted with {msg} in strict mode!')
360
352
 
@@ -374,5 +366,4 @@ def build(
374
366
 
375
367
  def site_directory_contains_stale_files(site_directory: str) -> bool:
376
368
  """Check if the site directory contains stale files from a previous build."""
377
-
378
- return True if os.path.exists(site_directory) and os.listdir(site_directory) else False
369
+ return bool(os.path.exists(site_directory) and os.listdir(site_directory))
@@ -6,7 +6,7 @@ import re
6
6
  import subprocess
7
7
  from typing import TYPE_CHECKING
8
8
 
9
- import ghp_import
9
+ import ghp_import # type: ignore
10
10
  from packaging import version
11
11
 
12
12
  import mkdocs
@@ -7,12 +7,9 @@ from os.path import isdir, isfile, join
7
7
  from typing import TYPE_CHECKING
8
8
  from urllib.parse import urlsplit
9
9
 
10
- import jinja2.exceptions
11
-
12
10
  from mkdocs.commands.build import build
13
11
  from mkdocs.config import load_config
14
- from mkdocs.exceptions import Abort
15
- from mkdocs.livereload import LiveReloadServer
12
+ from mkdocs.livereload import LiveReloadServer, _serve_url
16
13
 
17
14
  if TYPE_CHECKING:
18
15
  from mkdocs.config.defaults import MkDocsConfig
@@ -26,10 +23,12 @@ def serve(
26
23
  build_type: str | None = None,
27
24
  watch_theme: bool = False,
28
25
  watch: list[str] = [],
26
+ *,
27
+ open_in_browser: bool = False,
29
28
  **kwargs,
30
29
  ) -> None:
31
30
  """
32
- Start the MkDocs development server
31
+ Start the MkDocs development server.
33
32
 
34
33
  By default it will serve the documentation on http://localhost:8000/ and
35
34
  it will rebuild the documentation and refresh the page automatically
@@ -40,9 +39,6 @@ def serve(
40
39
  # string is returned. And it makes MkDocs temp dirs easier to identify.
41
40
  site_dir = tempfile.mkdtemp(prefix='mkdocs_')
42
41
 
43
- def mount_path(config: MkDocsConfig):
44
- return urlsplit(config.site_url or '/').path
45
-
46
42
  def get_config():
47
43
  config = load_config(
48
44
  config_file=config_file,
@@ -50,7 +46,6 @@ def serve(
50
46
  **kwargs,
51
47
  )
52
48
  config.watch.extend(watch)
53
- config.site_url = f'http://{config.dev_addr}{mount_path(config)}'
54
49
  return config
55
50
 
56
51
  is_clean = build_type == 'clean'
@@ -59,16 +54,20 @@ def serve(
59
54
  config = get_config()
60
55
  config.plugins.on_startup(command=('build' if is_clean else 'serve'), dirty=is_dirty)
61
56
 
57
+ host, port = config.dev_addr
58
+ mount_path = urlsplit(config.site_url or '/').path
59
+ config.site_url = serve_url = _serve_url(host, port, mount_path)
60
+
62
61
  def builder(config: MkDocsConfig | None = None):
63
62
  log.info("Building documentation...")
64
63
  if config is None:
65
64
  config = get_config()
65
+ config.site_url = serve_url
66
66
 
67
- build(config, live_server=None if is_clean else server, dirty=is_dirty)
67
+ build(config, serve_url=None if is_clean else serve_url, dirty=is_dirty)
68
68
 
69
- host, port = config.dev_addr
70
69
  server = LiveReloadServer(
71
- builder=builder, host=host, port=port, root=site_dir, mount_path=mount_path(config)
70
+ builder=builder, host=host, port=port, root=site_dir, mount_path=mount_path
72
71
  )
73
72
 
74
73
  def error_handler(code) -> bytes | None:
@@ -102,17 +101,11 @@ def serve(
102
101
  server.watch(item)
103
102
 
104
103
  try:
105
- server.serve()
104
+ server.serve(open_in_browser=open_in_browser)
106
105
  except KeyboardInterrupt:
107
106
  log.info("Shutting down...")
108
107
  finally:
109
108
  server.shutdown()
110
- except jinja2.exceptions.TemplateError:
111
- # This is a subclass of OSError, but shouldn't be suppressed.
112
- raise
113
- except OSError as e: # pragma: no cover
114
- # Avoid ugly, unhelpful traceback
115
- raise Abort(f'{type(e).__name__}: {e}')
116
109
  finally:
117
110
  config.plugins.on_shutdown()
118
111
  if isdir(site_dir):
@@ -51,7 +51,7 @@ class BaseConfigOption(Generic[T]):
51
51
  def default(self, value):
52
52
  self._default = value
53
53
 
54
- def validate(self, value: object) -> T:
54
+ def validate(self, value: object, /) -> T:
55
55
  return self.run_validation(value)
56
56
 
57
57
  def reset_warnings(self) -> None:
@@ -64,7 +64,7 @@ class BaseConfigOption(Generic[T]):
64
64
  The pre-validation process method should be implemented by subclasses.
65
65
  """
66
66
 
67
- def run_validation(self, value: object):
67
+ def run_validation(self, value: object, /):
68
68
  """
69
69
  Perform validation for a value.
70
70
 
@@ -190,6 +190,7 @@ class Config(UserDict):
190
190
  config_option.reset_warnings()
191
191
  except ValidationError as e:
192
192
  failed.append((key, e))
193
+ break
193
194
 
194
195
  for key in set(self.keys()) - self._schema_keys:
195
196
  warnings.append((key, f"Unrecognised configuration name: {key}"))
@@ -243,7 +244,6 @@ class Config(UserDict):
243
244
 
244
245
  def load_dict(self, patch: dict) -> None:
245
246
  """Load config options from a dictionary."""
246
-
247
247
  if not isinstance(patch, dict):
248
248
  raise exceptions.ConfigurationError(
249
249
  "The configuration is invalid. Expected a key-"
@@ -272,18 +272,14 @@ class Config(UserDict):
272
272
 
273
273
  @functools.lru_cache(maxsize=None)
274
274
  def get_schema(cls: type) -> PlainConfigSchema:
275
- """
276
- Extract ConfigOptions defined in a class (used just as a container) and put them into a schema tuple.
277
- """
275
+ """Extract ConfigOptions defined in a class (used just as a container) and put them into a schema tuple."""
278
276
  if issubclass(cls, Config):
279
277
  return cls._schema
280
278
  return tuple((k, v) for k, v in cls.__dict__.items() if isinstance(v, BaseConfigOption))
281
279
 
282
280
 
283
281
  class LegacyConfig(Config):
284
- """
285
- A configuration object for plugins, as just a dict without type-safe attribute access.
286
- """
282
+ """A configuration object for plugins, as just a dict without type-safe attribute access."""
287
283
 
288
284
  def __init__(self, schema: PlainConfigSchema, config_file_path: str | None = None):
289
285
  self._schema = tuple((k, v) for k, v in schema) # Re-create just for validation
@@ -345,7 +341,7 @@ def load_config(
345
341
  config_file: str | IO | None = None, *, config_file_path: str | None = None, **kwargs
346
342
  ) -> MkDocsConfig:
347
343
  """
348
- Load the configuration for a given file object or name
344
+ Load the configuration for a given file object or name.
349
345
 
350
346
  The config_file can either be a file object, string or None. If it is None
351
347
  the default `mkdocs.yml` filename will loaded.
@@ -366,7 +362,7 @@ def load_config(
366
362
  from mkdocs.config.defaults import MkDocsConfig
367
363
 
368
364
  if config_file_path is None:
369
- if fd is not sys.stdin.buffer:
365
+ if sys.stdin and fd is not sys.stdin.buffer:
370
366
  config_file_path = getattr(fd, 'name', None)
371
367
  cfg = MkDocsConfig(config_file_path=config_file_path)
372
368
  # load the config file
@@ -387,7 +383,7 @@ def load_config(
387
383
  log.debug(f"Config value '{key}' = {value!r}")
388
384
 
389
385
  if len(errors) > 0:
390
- raise exceptions.Abort(f"Aborted with {len(errors)} configuration errors!")
386
+ raise exceptions.Abort("Aborted with a configuration error!")
391
387
  elif cfg.strict and len(warnings) > 0:
392
388
  raise exceptions.Abort(
393
389
  f"Aborted with {len(warnings)} configuration warnings in 'strict' mode!"