mirror of
https://github.com/squidfunk/mkdocs-material.git
synced 2024-06-14 11:52:32 +03:00
Added projects plugin handling in the info plugin
This commit is contained in:
committed by
Martin Donath
parent
79129d5cde
commit
819e209795
@@ -18,6 +18,7 @@
|
|||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
# IN THE SOFTWARE.
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
|
import glob
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@@ -30,6 +31,7 @@ from colorama import Fore, Style
|
|||||||
from importlib.metadata import distributions, version
|
from importlib.metadata import distributions, version
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from markdown.extensions.toc import slugify
|
from markdown.extensions.toc import slugify
|
||||||
|
from mkdocs.config.defaults import MkDocsConfig
|
||||||
from mkdocs.plugins import BasePlugin, event_priority
|
from mkdocs.plugins import BasePlugin, event_priority
|
||||||
from mkdocs.utils import get_theme_dir
|
from mkdocs.utils import get_theme_dir
|
||||||
import regex
|
import regex
|
||||||
@@ -107,6 +109,27 @@ class InfoPlugin(BasePlugin[InfoConfig]):
|
|||||||
log.error("Please remove 'hooks' setting.")
|
log.error("Please remove 'hooks' setting.")
|
||||||
self._help_on_customizations_and_exit()
|
self._help_on_customizations_and_exit()
|
||||||
|
|
||||||
|
# Assure that config_file_path is absolute.
|
||||||
|
# If the --config-file option is used then the path is
|
||||||
|
# used as provided, so it is likely relative.
|
||||||
|
if not os.path.isabs(config.config_file_path):
|
||||||
|
config.config_file_path = os.path.normpath(os.path.join(
|
||||||
|
os.getcwd(),
|
||||||
|
config.config_file_path
|
||||||
|
))
|
||||||
|
|
||||||
|
# Support projects plugin
|
||||||
|
projects_plugin = config.plugins.get("material/projects")
|
||||||
|
if projects_plugin:
|
||||||
|
abs_projects_dir = os.path.normpath(
|
||||||
|
os.path.join(
|
||||||
|
os.path.dirname(config.config_file_path),
|
||||||
|
projects_plugin.config.projects_dir
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
abs_projects_dir = ""
|
||||||
|
|
||||||
# Create in-memory archive and prompt author for a short descriptive
|
# Create in-memory archive and prompt author for a short descriptive
|
||||||
# name for the archive, which is also used as the directory name. Note
|
# name for the archive, which is also used as the directory name. Note
|
||||||
# that the name is slugified for better readability and stripped of any
|
# that the name is slugified for better readability and stripped of any
|
||||||
@@ -128,6 +151,18 @@ class InfoPlugin(BasePlugin[InfoConfig]):
|
|||||||
if path.startswith(os.getcwd()):
|
if path.startswith(os.getcwd()):
|
||||||
self.exclusion_patterns.append(_resolve_pattern(path))
|
self.exclusion_patterns.append(_resolve_pattern(path))
|
||||||
|
|
||||||
|
# Exclude site_dir for projects
|
||||||
|
if projects_plugin:
|
||||||
|
for path in glob.iglob(
|
||||||
|
pathname = projects_plugin.config.projects_config_files,
|
||||||
|
root_dir = abs_projects_dir,
|
||||||
|
recursive = True
|
||||||
|
):
|
||||||
|
current_config_file = os.path.join(abs_projects_dir, path)
|
||||||
|
project_config = _get_project_config(current_config_file)
|
||||||
|
pattern = _resolve_pattern(project_config.site_dir)
|
||||||
|
self.exclusion_patterns.append(pattern)
|
||||||
|
|
||||||
# Create self-contained example from project
|
# Create self-contained example from project
|
||||||
files: list[str] = []
|
files: list[str] = []
|
||||||
with ZipFile(archive, "a", ZIP_DEFLATED, False) as f:
|
with ZipFile(archive, "a", ZIP_DEFLATED, False) as f:
|
||||||
@@ -311,6 +346,17 @@ def _resolve_pattern(abspath: str):
|
|||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
# Get project configuration
|
||||||
|
def _get_project_config(project_config_file: str):
|
||||||
|
with open(project_config_file, encoding="utf-8") as file:
|
||||||
|
config = MkDocsConfig(config_file_path = project_config_file)
|
||||||
|
config.load_file(file)
|
||||||
|
|
||||||
|
# MkDocs transforms site_dir to absolute path during validation
|
||||||
|
config.validate()
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Data
|
# Data
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
# IN THE SOFTWARE.
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
|
import glob
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@@ -30,6 +31,7 @@ from colorama import Fore, Style
|
|||||||
from importlib.metadata import distributions, version
|
from importlib.metadata import distributions, version
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from markdown.extensions.toc import slugify
|
from markdown.extensions.toc import slugify
|
||||||
|
from mkdocs.config.defaults import MkDocsConfig
|
||||||
from mkdocs.plugins import BasePlugin, event_priority
|
from mkdocs.plugins import BasePlugin, event_priority
|
||||||
from mkdocs.utils import get_theme_dir
|
from mkdocs.utils import get_theme_dir
|
||||||
import regex
|
import regex
|
||||||
@@ -107,6 +109,27 @@ class InfoPlugin(BasePlugin[InfoConfig]):
|
|||||||
log.error("Please remove 'hooks' setting.")
|
log.error("Please remove 'hooks' setting.")
|
||||||
self._help_on_customizations_and_exit()
|
self._help_on_customizations_and_exit()
|
||||||
|
|
||||||
|
# Assure that config_file_path is absolute.
|
||||||
|
# If the --config-file option is used then the path is
|
||||||
|
# used as provided, so it is likely relative.
|
||||||
|
if not os.path.isabs(config.config_file_path):
|
||||||
|
config.config_file_path = os.path.normpath(os.path.join(
|
||||||
|
os.getcwd(),
|
||||||
|
config.config_file_path
|
||||||
|
))
|
||||||
|
|
||||||
|
# Support projects plugin
|
||||||
|
projects_plugin = config.plugins.get("material/projects")
|
||||||
|
if projects_plugin:
|
||||||
|
abs_projects_dir = os.path.normpath(
|
||||||
|
os.path.join(
|
||||||
|
os.path.dirname(config.config_file_path),
|
||||||
|
projects_plugin.config.projects_dir
|
||||||
|
)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
abs_projects_dir = ""
|
||||||
|
|
||||||
# Create in-memory archive and prompt author for a short descriptive
|
# Create in-memory archive and prompt author for a short descriptive
|
||||||
# name for the archive, which is also used as the directory name. Note
|
# name for the archive, which is also used as the directory name. Note
|
||||||
# that the name is slugified for better readability and stripped of any
|
# that the name is slugified for better readability and stripped of any
|
||||||
@@ -128,6 +151,18 @@ class InfoPlugin(BasePlugin[InfoConfig]):
|
|||||||
if path.startswith(os.getcwd()):
|
if path.startswith(os.getcwd()):
|
||||||
self.exclusion_patterns.append(_resolve_pattern(path))
|
self.exclusion_patterns.append(_resolve_pattern(path))
|
||||||
|
|
||||||
|
# Exclude site_dir for projects
|
||||||
|
if projects_plugin:
|
||||||
|
for path in glob.iglob(
|
||||||
|
pathname = projects_plugin.config.projects_config_files,
|
||||||
|
root_dir = abs_projects_dir,
|
||||||
|
recursive = True
|
||||||
|
):
|
||||||
|
current_config_file = os.path.join(abs_projects_dir, path)
|
||||||
|
project_config = _get_project_config(current_config_file)
|
||||||
|
pattern = _resolve_pattern(project_config.site_dir)
|
||||||
|
self.exclusion_patterns.append(pattern)
|
||||||
|
|
||||||
# Create self-contained example from project
|
# Create self-contained example from project
|
||||||
files: list[str] = []
|
files: list[str] = []
|
||||||
with ZipFile(archive, "a", ZIP_DEFLATED, False) as f:
|
with ZipFile(archive, "a", ZIP_DEFLATED, False) as f:
|
||||||
@@ -311,6 +346,17 @@ def _resolve_pattern(abspath: str):
|
|||||||
|
|
||||||
return path
|
return path
|
||||||
|
|
||||||
|
# Get project configuration
|
||||||
|
def _get_project_config(project_config_file: str):
|
||||||
|
with open(project_config_file, encoding="utf-8") as file:
|
||||||
|
config = MkDocsConfig(config_file_path = project_config_file)
|
||||||
|
config.load_file(file)
|
||||||
|
|
||||||
|
# MkDocs transforms site_dir to absolute path during validation
|
||||||
|
config.validate()
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Data
|
# Data
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user