mkdocs-simple-plugin 3.2.2__tar.gz → 3.2.3__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.
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/PKG-INFO +1 -1
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/simple.py +64 -54
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/.gitignore +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/LICENSE +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/README.md +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/.pages +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/README.md +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/__init__.py +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/generator.py +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/plugin.py +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/semiliterate.py +0 -0
- {mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mkdocs-simple-plugin
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: Plugin for adding simple wiki site creation from markdown files interspersed within your code with MkDocs.
|
|
5
5
|
Project-URL: Documentation, http://www.althack.dev/mkdocs-simple-plugin
|
|
6
6
|
Project-URL: Homepage, http://www.althack.dev/mkdocs-simple-plugin
|
|
@@ -3,6 +3,7 @@ import fnmatch
|
|
|
3
3
|
import os
|
|
4
4
|
import pathlib
|
|
5
5
|
import stat
|
|
6
|
+
from typing import List, Dict
|
|
6
7
|
|
|
7
8
|
from shutil import copy2 as copy
|
|
8
9
|
from dataclasses import dataclass
|
|
@@ -51,68 +52,77 @@ class Simple():
|
|
|
51
52
|
self.folders = set(folders)
|
|
52
53
|
self.doc_glob = set(include)
|
|
53
54
|
self.ignore_glob = set(ignore)
|
|
54
|
-
self.ignore_hidden = ignore_hidden #
|
|
55
|
-
self.hidden_prefix = set([".", "__"]) #
|
|
55
|
+
self.ignore_hidden = ignore_hidden # TODO[athackst] deprecate
|
|
56
|
+
self.hidden_prefix = set([".", "__"]) # TODO[athackst] deprecate
|
|
56
57
|
self.ignore_paths = set(ignore_paths)
|
|
57
58
|
self.semiliterate = []
|
|
58
59
|
for item in semiliterate:
|
|
59
60
|
self.semiliterate.append(Semiliterate(**item))
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
self.ignore_patterns: Dict[pathlib.Path, List[str]] = {}
|
|
62
|
+
self.root_path: pathlib.Path = pathlib.Path()
|
|
63
|
+
|
|
64
|
+
def process_mkdocsignore_files(self):
|
|
65
|
+
"""Process all .mkdocsignore files and update ignore_glob."""
|
|
66
|
+
for mkdocsignore in self.root_path.rglob('.mkdocsignore'):
|
|
67
|
+
relative_path = mkdocsignore.parent.relative_to(self.root_path)
|
|
68
|
+
patterns = []
|
|
69
|
+
with mkdocsignore.open(mode="r", encoding="utf-8") as txt_file:
|
|
70
|
+
for line in txt_file:
|
|
71
|
+
line = line.strip()
|
|
72
|
+
if line and not line.startswith('#'):
|
|
73
|
+
patterns.append(line)
|
|
74
|
+
|
|
75
|
+
if not patterns:
|
|
76
|
+
# If .mkdocsignore is empty, ignore everything in this directory
|
|
77
|
+
# and below
|
|
78
|
+
pattern = str(relative_path / '**')
|
|
79
|
+
self.ignore_glob.add(pattern)
|
|
80
|
+
else:
|
|
81
|
+
for pattern in patterns:
|
|
82
|
+
if relative_path != pathlib.Path('.'):
|
|
83
|
+
pattern = str(relative_path / pattern)
|
|
84
|
+
self.ignore_glob.add(pattern)
|
|
85
|
+
|
|
86
|
+
def process_ignore_folders(self):
|
|
87
|
+
"""Update ignore glob to include folders."""
|
|
88
|
+
self.ignore_glob.update(
|
|
89
|
+
[f"{pattern}/**" for pattern in self.ignore_glob])
|
|
90
|
+
|
|
91
|
+
def get_files(self) -> List[str]:
|
|
62
92
|
"""Get a list of files to process, excluding ignored files."""
|
|
63
|
-
files
|
|
64
|
-
|
|
65
|
-
|
|
93
|
+
# Process all .mkdocsignore files first
|
|
94
|
+
self.process_mkdocsignore_files()
|
|
95
|
+
self.process_ignore_folders() # TODO[athackst] deprecate
|
|
96
|
+
files = set()
|
|
66
97
|
for pattern in self.folders:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
files
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def is_ignored(self, base_path: str, name: str) -> bool:
|
|
86
|
-
"""Check if directory and filename should be ignored."""
|
|
87
|
-
return self.is_path_ignored(os.path.join(base_path, name))
|
|
88
|
-
|
|
89
|
-
def is_path_ignored(self, path: str = None) -> bool:
|
|
98
|
+
for entry in pathlib.Path().glob(pattern):
|
|
99
|
+
if entry.is_dir():
|
|
100
|
+
files.update(str(f) for f in entry.rglob(
|
|
101
|
+
'*') if self.is_valid_file(f))
|
|
102
|
+
elif self.is_valid_file(entry):
|
|
103
|
+
files.add(str(entry))
|
|
104
|
+
return list(files)
|
|
105
|
+
|
|
106
|
+
def is_valid_file(self, path: pathlib.Path) -> bool:
|
|
107
|
+
"""Check if file is valid (not ignored and matches doc_glob)."""
|
|
108
|
+
if self.is_ignored(path):
|
|
109
|
+
return False
|
|
110
|
+
if not path.is_file():
|
|
111
|
+
return False
|
|
112
|
+
return True
|
|
113
|
+
|
|
114
|
+
def is_ignored(self, path: pathlib.Path) -> bool:
|
|
90
115
|
"""Check if path should be ignored."""
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if os.path.abspath(path).startswith(ignored):
|
|
97
|
-
return True
|
|
98
|
-
|
|
99
|
-
# Update ignore patterns from .mkdocsignore file
|
|
100
|
-
mkdocsignore = os.path.join(base_path, ".mkdocsignore")
|
|
101
|
-
if os.path.exists(mkdocsignore):
|
|
102
|
-
ignore_list = []
|
|
103
|
-
with open(mkdocsignore, mode="r", encoding="utf-8") as txt_file:
|
|
104
|
-
ignore_list = txt_file.read().splitlines()
|
|
105
|
-
# Remove all comment lines
|
|
106
|
-
ignore_list = [x for x in ignore_list if not x.startswith('#')]
|
|
107
|
-
if not ignore_list:
|
|
108
|
-
ignore_list = ["*"]
|
|
109
|
-
self.ignore_glob.update(
|
|
110
|
-
set(os.path.join(base_path, filter) for filter in ignore_list))
|
|
111
|
-
# Check for ignore paths in patterns
|
|
112
|
-
if any(fnmatch.fnmatch(path, filter)
|
|
113
|
-
for filter in self.ignore_glob):
|
|
116
|
+
rel_path = path.relative_to(self.root_path)
|
|
117
|
+
|
|
118
|
+
# Check ignore_paths (absolute paths)
|
|
119
|
+
if any(path.resolve().is_relative_to(ignored)
|
|
120
|
+
for ignored in self.ignore_paths):
|
|
114
121
|
return True
|
|
115
|
-
|
|
122
|
+
|
|
123
|
+
# Check all ignore patterns
|
|
124
|
+
return any(fnmatch.fnmatch(str(rel_path), pattern)
|
|
125
|
+
for pattern in self.ignore_glob)
|
|
116
126
|
|
|
117
127
|
def is_doc_file(self, name: str) -> bool:
|
|
118
128
|
"""Check if file is a desired doc file."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mkdocs_simple_plugin-3.2.2 → mkdocs_simple_plugin-3.2.3}/mkdocs_simple_plugin/semiliterate.py
RENAMED
|
File without changes
|
|
File without changes
|