mkdocs-partial 1.2.1__tar.gz → 1.4.1__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 (50) hide show
  1. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/PKG-INFO +2 -1
  2. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/docs_package_plugin.py +6 -0
  3. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/integrations/material_blog_integration.py +1 -1
  4. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/packager.py +14 -2
  5. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/package/entry_point.py.j2 +0 -1
  6. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/partial_docs_plugin.py +12 -7
  7. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/site_entry_point.py +54 -9
  8. mkdocs_partial-1.4.1/mkdocs_partial/version.py +1 -0
  9. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/PKG-INFO +2 -1
  10. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/SOURCES.txt +2 -1
  11. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/requires.txt +1 -0
  12. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/setup.cfg +1 -0
  13. mkdocs_partial-1.4.1/tests/test_site_entry_point.py +27 -0
  14. mkdocs_partial-1.2.1/mkdocs_partial/version.py +0 -1
  15. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/LICENSE +0 -0
  16. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/README.md +0 -0
  17. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/__init__.py +0 -0
  18. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/argparse_types.py +0 -0
  19. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/entry_point.py +0 -0
  20. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/integrations/__init__.py +0 -0
  21. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/integrations/macros_plugin_shim.py +0 -0
  22. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/integrations/redirect_plugin_shim.py +0 -0
  23. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/integrations/spellcheck_plugin_shim.py +0 -0
  24. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/mkdcos_helpers.py +0 -0
  25. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/__init__.py +0 -0
  26. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/dist-info/METADATA.j2 +0 -0
  27. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/dist-info/WHEEL.j2 +0 -0
  28. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/dist-info/entry_points.txt.j2 +0 -0
  29. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/package/__init__.py.j2 +0 -0
  30. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/package/__pyinstaller/__init__.py.j2 +0 -0
  31. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/package/__pyinstaller/hook-{{module_name}}.py.j2 +0 -0
  32. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/docs-package/package/plugin.py.j2 +0 -0
  33. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/dist-info/METADATA.j2 +0 -0
  34. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/dist-info/WHEEL.j2 +0 -0
  35. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/dist-info/entry_points.txt.j2 +0 -0
  36. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/package/__init__.py.j2 +0 -0
  37. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/package/__main__.py.j2 +0 -0
  38. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/package/__pyinstaller/__init__.py.j2 +0 -0
  39. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/packages/templates/site-package/package/__pyinstaller/hook-{{module_name}}.py.j2 +0 -0
  40. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/templating/__init__.py +0 -0
  41. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/templating/markdown_extension.py +0 -0
  42. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/templating/templater.py +0 -0
  43. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/templating/templater_extension.py +0 -0
  44. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial/templating/version.py +0 -0
  45. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/dependency_links.txt +0 -0
  46. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/entry_points.txt +0 -0
  47. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/not-zip-safe +0 -0
  48. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/mkdocs_partial.egg-info/top_level.txt +0 -0
  49. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/pyproject.toml +0 -0
  50. {mkdocs_partial-1.2.1 → mkdocs_partial-1.4.1}/tests/test_docs_package_plugin.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkdocs-partial
3
- Version: 1.2.1
3
+ Version: 1.4.1
4
4
  Summary: Mkdocs Partial Documentation
5
5
  Author: Exorids
6
6
  Project-URL: Homepage, https://github.com/exordis/mkdocs-partial
@@ -27,5 +27,6 @@ Requires-Dist: pytest<8.0.0,>=7.1.3; extra == "test"
27
27
  Requires-Dist: pytest-cov<4.0.0,>=3.0.0; extra == "test"
28
28
  Requires-Dist: pytest-mock<4.0.0,>=3.0.0; extra == "test"
29
29
  Requires-Dist: pytest-resource-path==1.3.0; extra == "test"
30
+ Requires-Dist: docs-documentation; extra == "test"
30
31
 
31
32
  Mkdocs Partial Documentation
@@ -41,6 +41,12 @@ class DocsPackagePluginConfig(Config):
41
41
  name = config_options.Optional(config_options.Type(str))
42
42
  blog_categories = config_options.Optional(config_options.Type(str))
43
43
 
44
+ def patch(self, patch: DocsPackagePluginConfig):
45
+ if patch.docs_path is not None:
46
+ self.docs_path = patch.docs_path
47
+ if patch.directory is not None:
48
+ self.directory = patch.directory
49
+
44
50
 
45
51
  class DocsPackagePlugin(BasePlugin[DocsPackagePluginConfig]):
46
52
  supports_multiple_instances = True
@@ -38,7 +38,7 @@ class MaterialBlogsIntegration(ABC):
38
38
  self.__docs_dir = config.docs_dir
39
39
  self.__partial = os.path.join(self.__docs_dir, blog_posts, "partial")
40
40
  self.__target = os.path.join(self.__partial, name)
41
- self.__categories = [] if categories == "" else categories.split("/")
41
+ self.__categories = [] if categories == "" or categories is None else categories.split("/")
42
42
  self.__docs_path = docs_path
43
43
  return self.__enabled
44
44
 
@@ -13,6 +13,7 @@ from tempfile import NamedTemporaryFile
13
13
  from typing import List
14
14
 
15
15
  from packaging.requirements import Requirement
16
+ from packaging.version import Version
16
17
 
17
18
  from mkdocs_partial import MODULE_NAME_RESTRICTED_CHARS, version
18
19
  from mkdocs_partial.docs_package_plugin import DocsPackagePlugin
@@ -62,8 +63,19 @@ class Packager(ABC):
62
63
  requirements = self.parse_requirements(requirements_path)
63
64
 
64
65
  if add_self_dependency:
65
- self_dependency = Requirement(f"mkdocs-partial >={version.__version__}")
66
- requirements.append(self_dependency)
66
+ parsed_version = Version(version.__version__)
67
+ base_version = Version(parsed_version.base_version)
68
+ if base_version == parsed_version:
69
+ self_dependency = f"mkdocs-partial >={version.__version__}"
70
+ elif base_version.micro > 0:
71
+ self_dependency = (
72
+ f"mkdocs-partial > {parsed_version.major}.{parsed_version.minor}.{parsed_version.micro - 1}."
73
+ )
74
+ elif base_version.minor > 0:
75
+ self_dependency = f"mkdocs-partial > {parsed_version.major}.{parsed_version.minor - 1}.0"
76
+ else:
77
+ self_dependency = f"mkdocs-partial > {parsed_version.major - 1}.0.0"
78
+ requirements.append(Requirement(self_dependency))
67
79
 
68
80
  if freeze:
69
81
  requirements = Packager.freeze_requirements(requirements)
@@ -6,6 +6,5 @@ from {{module_name}} import __version__
6
6
  from mkdocs_partial.site_entry_point import SiteEntryPoint
7
7
 
8
8
  def run():
9
- print({{module_name}})
10
9
  script_dir = os.path.dirname(__file__)
11
10
  SiteEntryPoint(__version__, os.path.join(script_dir, "site"),"{{package_name}}").run()
@@ -23,7 +23,7 @@ class PartialDocsPluginConfig(Config):
23
23
 
24
24
 
25
25
  class PartialDocsPlugin(BasePlugin[PartialDocsPluginConfig]):
26
- docs_path_overrides: Dict[str, str] = {}
26
+ overrides: Dict[str, DocsPackagePluginConfig] = {}
27
27
 
28
28
  def __init__(self):
29
29
  self.is_serve = False
@@ -73,19 +73,24 @@ class PartialDocsPlugin(BasePlugin[PartialDocsPluginConfig]):
73
73
 
74
74
  # Load doc package plugins
75
75
  def _load(self, option: Plugins) -> List[tuple[str, DocsPackagePlugin]]:
76
+ loaded_plugins = []
76
77
  for entrypoint in option.installed_plugins.values():
77
78
  try:
78
79
  plugin_class = entrypoint.load()
79
80
  except ModuleNotFoundError:
80
81
  continue
81
82
  if issubclass(plugin_class, DocsPackagePlugin) and plugin_class != DocsPackagePlugin:
82
- plugin_config: DocsPackagePluginConfig = self.config.packages.setdefault(
83
- entrypoint.name, DocsPackagePluginConfig()
84
- )
85
- if entrypoint.name in PartialDocsPlugin.docs_path_overrides:
86
- plugin_config.docs_path = PartialDocsPlugin.docs_path_overrides[entrypoint.name]
87
-
83
+ override = PartialDocsPlugin.overrides.setdefault(entrypoint.name, DocsPackagePluginConfig())
84
+ plugin_config: DocsPackagePluginConfig = self.config.packages.setdefault(entrypoint.name, override)
85
+ plugin_config.patch(override)
88
86
  name, plugin = option.load_plugin_with_namespace(entrypoint.name, plugin_config.data)
87
+ loaded_plugins += [entrypoint.name]
88
+ yield name, cast(DocsPackagePlugin, plugin)
89
+ for name, override in self.overrides.items():
90
+ if name not in loaded_plugins:
91
+ plugin_config: DocsPackagePluginConfig = override
92
+ plugin_config.name = name
93
+ name, plugin = option.load_plugin_with_namespace("docs_package", plugin_config.data)
89
94
  yield name, cast(DocsPackagePlugin, plugin)
90
95
 
91
96
  def _get_plugin(self, method: Callable):
@@ -11,20 +11,29 @@ from pathlib import Path
11
11
 
12
12
  import yaml
13
13
  from mkdocs.__main__ import build_command as mkdocs_build_command, serve_command as mkdocs_serve_command
14
+ from mkdocs.plugins import get_plugins
14
15
 
15
16
  from mkdocs_partial.argparse_types import directory
17
+ from mkdocs_partial.docs_package_plugin import DocsPackagePlugin, DocsPackagePluginConfig
16
18
  from mkdocs_partial.entry_point import add_command_parser
17
19
  from mkdocs_partial.mkdcos_helpers import normalize_path
18
20
  from mkdocs_partial.partial_docs_plugin import PartialDocsPlugin
19
21
 
20
22
 
21
- def local_docs(value: str):
23
+ def local_docs(value: str, check_path: bool = True):
22
24
  values = value.split("=", maxsplit=1)
23
25
  plugin = values[0]
24
- path = "/docs" if len(values) <= 1 else values[1]
25
- if not os.path.isdir(path):
26
- raise ArgumentTypeError(f"directory '{path}' for plugin '{plugin}' does not exist")
27
- return plugin, normalize_path(path)
26
+ docs_directory = None
27
+ if len(values) <= 1:
28
+ path = "/docs"
29
+ else:
30
+ values = values[1].rsplit("::", maxsplit=1)
31
+ docs_directory = None if len(values) <= 1 else values[1]
32
+ path = values[0]
33
+
34
+ if check_path and not os.path.isdir(path):
35
+ raise ArgumentTypeError(f"directory '{path}' for plugin '{plugin}' does not exist.")
36
+ return plugin, normalize_path(path), docs_directory
28
37
 
29
38
 
30
39
  class SiteEntryPoint(ABC):
@@ -62,6 +71,9 @@ class SiteEntryPoint(ABC):
62
71
  func=lambda args, argv: self.mkdocs(mkdocs_build_command, args, argv),
63
72
  )
64
73
 
74
+ self.add_command_parser(subparsers, "list", "lists partial docs plugins", func=self.list)
75
+ self.add_command_parser(subparsers, "version", "outputs site version", func=self.version)
76
+
65
77
  dump_command = self.add_command_parser(subparsers, "dump", "dump site files to the dir", func=self.dump)
66
78
  dump_command.add_argument(
67
79
  "--output", required=False, type=directory, help="Output directory. Default - Current directory"
@@ -93,10 +105,40 @@ class SiteEntryPoint(ABC):
93
105
  @staticmethod
94
106
  def add_mkdocs_command_parser(subparsers, name, help_text, func):
95
107
  command_parser = add_command_parser(subparsers, name, help_text, func)
96
- command_parser.add_argument("--local-docs", required=False, type=local_docs)
97
- command_parser.add_argument("--site-root", required=False, type=directory)
108
+ command_parser.add_argument(
109
+ "--local-docs",
110
+ required=False,
111
+ type=local_docs,
112
+ help="loads local directory as `docs_package` plugin content. "
113
+ "Format <plugin name>[=<docs_path>[::<directory>]]. "
114
+ "If `docs_path` is not provided `/docs` is used as default. "
115
+ "If plugin is configured within site mkdocs.yml `directory` overrides "
116
+ "corresponding plugin config option. "
117
+ "If plugin not configured within site mkdocs.yml, it is added to config",
118
+ )
119
+ command_parser.add_argument(
120
+ "--site-root",
121
+ required=False,
122
+ type=directory,
123
+ help="loads local directory as site `docs_dir` instead of the content packed with " "site package",
124
+ )
98
125
  return command_parser
99
126
 
127
+ @staticmethod
128
+ def list(args, argv): # pylint: disable=unused-argument
129
+ for name, entrypoint in get_plugins().items():
130
+ try:
131
+ plugin_class = entrypoint.load()
132
+ except ModuleNotFoundError:
133
+ continue
134
+ if issubclass(plugin_class, DocsPackagePlugin) and plugin_class != DocsPackagePlugin:
135
+ print(name)
136
+ return True, None
137
+
138
+ def version(self, args, argv): # pylint: disable=unused-argument
139
+ print(self.__version)
140
+ return True, None
141
+
100
142
  def mkdocs(self, command, args, argv):
101
143
 
102
144
  site_root_path = args.site_root
@@ -114,8 +156,11 @@ class SiteEntryPoint(ABC):
114
156
  return False, f"{mkdocs_yaml_path} must define 'partial_docs' plugin"
115
157
 
116
158
  if args.local_docs is not None:
117
- plugin, docs_path = args.local_docs
118
- PartialDocsPlugin.docs_path_overrides[plugin] = docs_path
159
+ plugin, docs_path, docs_directory = args.local_docs
160
+ override = DocsPackagePluginConfig()
161
+ override.docs_path = docs_path
162
+ override.directory = docs_directory
163
+ PartialDocsPlugin.overrides[plugin] = override
119
164
 
120
165
  current_dir = os.getcwd()
121
166
  os.chdir(site_root_path)
@@ -0,0 +1 @@
1
+ __version__ = "1.4.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mkdocs-partial
3
- Version: 1.2.1
3
+ Version: 1.4.1
4
4
  Summary: Mkdocs Partial Documentation
5
5
  Author: Exorids
6
6
  Project-URL: Homepage, https://github.com/exordis/mkdocs-partial
@@ -27,5 +27,6 @@ Requires-Dist: pytest<8.0.0,>=7.1.3; extra == "test"
27
27
  Requires-Dist: pytest-cov<4.0.0,>=3.0.0; extra == "test"
28
28
  Requires-Dist: pytest-mock<4.0.0,>=3.0.0; extra == "test"
29
29
  Requires-Dist: pytest-resource-path==1.3.0; extra == "test"
30
+ Requires-Dist: docs-documentation; extra == "test"
30
31
 
31
32
  Mkdocs Partial Documentation
@@ -44,4 +44,5 @@ mkdocs_partial/templating/markdown_extension.py
44
44
  mkdocs_partial/templating/templater.py
45
45
  mkdocs_partial/templating/templater_extension.py
46
46
  mkdocs_partial/templating/version.py
47
- tests/test_docs_package_plugin.py
47
+ tests/test_docs_package_plugin.py
48
+ tests/test_site_entry_point.py
@@ -16,3 +16,4 @@ pytest<8.0.0,>=7.1.3
16
16
  pytest-cov<4.0.0,>=3.0.0
17
17
  pytest-mock<4.0.0,>=3.0.0
18
18
  pytest-resource-path==1.3.0
19
+ docs-documentation
@@ -38,6 +38,7 @@ test =
38
38
  pytest-cov >=3.0.0,<4.0.0
39
39
  pytest-mock >=3.0.0,<4.0.0
40
40
  pytest-resource-path == 1.3.0
41
+ docs-documentation
41
42
 
42
43
  [options.packages.find]
43
44
  exclude =
@@ -0,0 +1,27 @@
1
+ import pytest
2
+
3
+ from mkdocs_partial.site_entry_point import SiteEntryPoint, local_docs
4
+
5
+
6
+ def test_list(capsys):
7
+ SiteEntryPoint("0.1.0").list(None, None)
8
+ captured = capsys.readouterr().out.splitlines()
9
+ assert len(captured) > 0
10
+ assert "docs-documentation" in captured
11
+
12
+
13
+ @pytest.mark.parametrize(
14
+ "value,plugin, docs_path, docs_directory",
15
+ [
16
+ (r"test=d:\tmp\local-docs\docs::test/sub", "test", r"d:/tmp/local-docs/docs", r"test/sub"),
17
+ (r"test=/tmp/local-docs/docs::test/sub", "test", r"/tmp/local-docs/docs", r"test/sub"),
18
+ (r"test=/tmp/local-docs/docs", "test", r"/tmp/local-docs/docs", None),
19
+ (r"test", "test", r"/docs", None),
20
+ ],
21
+ ids=["windows path", "linux path", "directory fallback", "path fallback"],
22
+ )
23
+ def test_local_docs(value, plugin, docs_path, docs_directory):
24
+ actual_plugin, actual_docs_path, actual_docs_directory = local_docs(value, False)
25
+ assert actual_plugin == plugin
26
+ assert actual_docs_path == docs_path or (actual_docs_path is None and docs_path is None)
27
+ assert actual_docs_directory == docs_directory
@@ -1 +0,0 @@
1
- __version__ = "1.2.1"
File without changes
File without changes