Skip to content

Commit 12640be

Browse files
committed
fix issue empty dir
1 parent ac718ab commit 12640be

File tree

9 files changed

+49
-15
lines changed

9 files changed

+49
-15
lines changed

Diff for: CHANGELOG

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG #
22

3+
## 1.2.0 ##
4+
5+
- Add options in order to not include emtpy dir (default false - `include_empty_dir`)
6+
37
## 1.1.0 ##
48

59
- Add sort options

Diff for: README.md

+11
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Features :
2121
- `sort_directory` : Sort directory (default=True)
2222
- `reverse_sort_file` : Sort file in reverse order (default=False)
2323
- `reverse_sort_directory` : Sort file in reverse order (default=False)
24+
- `include_empty_dir` : Include all subDir (event if no valid document is present) (default=False)
2425

2526
If you need more features, look at [mkdocs-awesome-pages-plugin](https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin>) than seem to make many more think.
2627

@@ -290,6 +291,16 @@ Find into test folder a basic mkdocs.yaml and sub folder in order to test plugin
290291

291292
Use `mkdocs build -v` in order to show debug message.
292293

294+
### Publish ###
295+
296+
Update changelog, readme and setup.py. Push code and PR.
297+
298+
Build code : `python3 -m build`
299+
300+
Publish in test pypi : `python3 -m twine upload --repository testpypi dist/*`
301+
302+
Publish in pypi : `python3 -m twine upload dist/*`
303+
293304
## Personal note ##
294305

295306
It's my first python code, so be indulgent and optimize it if needed ;)

Diff for: mkdocs_include_dir_to_nav/include_dir_to_nav.py

+29-12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class IncludeDirToNav(BasePlugin):
2222
("sort_directory", config_options.Type(bool, default=True)),
2323
("reverse_sort_file", config_options.Type(bool, default=False)),
2424
("reverse_sort_directory", config_options.Type(bool, default=False)),
25+
("include_empty_dir", config_options.Type(bool, default=False)),
2526
)
2627

2728
def on_files(self, files, config):
@@ -37,7 +38,8 @@ def on_files(self, files, config):
3738
reverse_sort_directory=self.config['reverse_sort_directory'],
3839
reverse_sort_file=self.config['reverse_sort_file'],
3940
sort_file=self.config['sort_file'],
40-
sort_directory=self.config['sort_directory']
41+
sort_directory=self.config['sort_directory'],
42+
include_empty_dir=self.config['include_empty_dir']
4143
)
4244
log.debug(f"IncludeDirToNav : ## Final NAV : \n{yaml.dump(config['nav'], indent=2)}##")
4345

@@ -46,7 +48,7 @@ def on_files(self, files, config):
4648
#### If Yes, get direct files and direct directory, and insert it to nav
4749
#### If direct directory was finding, recall parse with current index, in order to subCheck needsted folder
4850
#### Take care of direct notation ( - myFolder ) and page title notation ( - my folder : myFolder)
49-
def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous=None, file_name_as_title: bool=False, recurse: bool=True, reverse_sort_file: bool=False, reverse_sort_directory: bool=False, sort_file: bool=True, sort_directory: bool=True):
51+
def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous=None, file_name_as_title: bool=False, recurse: bool=True, reverse_sort_file: bool=False, reverse_sort_directory: bool=False, sort_file: bool=True, sort_directory: bool=True, include_empty_dir: bool=False):
5052
log.debug("IncludeDirToNav : ##START Parse state###")
5153
log.debug(f"IncludeDirToNav : ori_nav = {ori_nav} | previous = {previous} | type of ori_nav {type(ori_nav)}")
5254

@@ -73,14 +75,15 @@ def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous
7375
reverse_sort_directory=reverse_sort_directory,
7476
reverse_sort_file=reverse_sort_file,
7577
sort_file=sort_file,
76-
sort_directory=sort_directory
78+
sort_directory=sort_directory,
79+
include_empty_dir=include_empty_dir
7780
)
7881

7982
## Else, item is simple dict, aka, value is string
8083
else:
8184
current_item = os.path.join(config["docs_dir"], item[k])
8285
log.debug(f" IncludeDirToNav : check current item : {current_item}")
83-
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory)
86+
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory, include_empty_dir)
8487
if to_add:
8588
item.update({k: to_add})
8689
if directory_was_insered:
@@ -95,13 +98,14 @@ def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous
9598
reverse_sort_directory=reverse_sort_directory,
9699
reverse_sort_file=reverse_sort_file,
97100
sort_file=sort_file,
98-
sort_directory=sort_directory
101+
sort_directory=sort_directory,
102+
include_empty_dir=include_empty_dir
99103
)
100104
## Else if item is no named, value like { - 'pagePath' }
101105
elif isinstance(item, str):
102106
log.debug(f" IncludeDirToNav : Item in loop is string. Item = {item}")
103107
current_item = os.path.join(config["docs_dir"], item)
104-
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory)
108+
to_add, directory_was_insered = _generate_nav(current_item, pattern, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory, include_empty_dir)
105109
if to_add:
106110
# Replace current index by object in order to avoir infinite loop
107111
ori_nav[index] = to_add.pop(-1)
@@ -121,10 +125,11 @@ def parse(ori_nav,config, pattern: str = '.*\.md$', flat: bool = False, previous
121125
reverse_sort_directory=reverse_sort_directory,
122126
reverse_sort_file=reverse_sort_file,
123127
sort_file=sort_file,
124-
sort_directory=sort_directory
128+
sort_directory=sort_directory,
129+
include_empty_dir=include_empty_dir
125130
)
126131

127-
def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory):
132+
def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_title, recurse, reverse_sort_file, reverse_sort_directory, sort_file, sort_directory, include_empty_dir: bool):
128133
## Init var
129134
directory_was_insered = False
130135
to_add = []
@@ -150,13 +155,25 @@ def _generate_nav(current_item: str, pattern: str, config, flat, file_name_as_ti
150155
## Else, continue loop to all level
151156
## Work because first walk loop return all direct file and direct directory
152157
if not flat and d and recurse:
153-
directory_was_insered = True
154158
for sd in (sorted(d, reverse=reverse_sort_directory) if sort_directory else d):
159+
## Check if subdir have file to add in order to not add empty dir
155160
rpath = os.path.relpath(os.path.os.path.join(r, sd), config["docs_dir"] )
156-
to_add.append({sd : rpath })
157-
log.debug(f"IncludeDirToNav_generate_nav : adding dir (sd : {sd}, rpath: {rpath})")
161+
if include_empty_dir or _check_subitem(os.path.join(config["docs_dir"], rpath), pattern):
162+
directory_was_insered = True
163+
to_add.append({sd : rpath })
164+
log.debug(f"IncludeDirToNav_generate_nav : adding dir (sd : {sd}, rpath: {rpath})")
158165
break
159166
elif not recurse:
160167
break
161168

162-
return to_add, directory_was_insered
169+
return to_add, directory_was_insered
170+
171+
def _check_subitem(item_to_check: str, pattern: str):
172+
log.debug(f"IncludeDirToNav_generate_nav : _check_subitem ({item_to_check})")
173+
for filename in os.listdir(item_to_check):
174+
f = os.path.join(item_to_check,filename)
175+
if os.path.isfile(f) and re.match(pattern, filename):
176+
log.debug(f"IncludeDirToNav_generate_nav : Dir have concerned subfile ({item_to_check})")
177+
return True
178+
log.debug(f"IncludeDirToNav_generate_nav : Dir not have subfile, do not add it ({item_to_check})")
179+
return False

Diff for: setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name="mkdocs_include_dir_to_nav",
9-
version="1.1.0",
9+
version="1.2.0",
1010
description="A MkDocs plugin include all file in dir to navigation",
1111
long_description=long_description,
1212
long_description_content_type="text/markdown",

Diff for: test/docs/subEmptyDir/apage.md

Whitespace-only changes.

Diff for: test/docs/subEmptyDir/bpage.md

Whitespace-only changes.
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Nothing to see

Diff for: test/docs/subEmptyDir/notempty/subnotmd/placeholder.placeholder

Whitespace-only changes.

Diff for: test/mkdocs.yaml renamed to test/mkdocs.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ plugins:
1414
# file_pattern: '.*\.md$'
1515
sort_file: true
1616
sort_directory: true
17-
reverse_sort_directory: true
17+
# reverse_sort_directory: true
18+
# include_empty_dir: true
1819
docs_dir: './docs'
1920

2021
# nav:
@@ -29,4 +30,4 @@ docs_dir: './docs'
2930
# - dirNamedUnderMenu: dirNamedUnderMenu
3031

3132
nav:
32-
- fold_sort
33+
- subEmptyDir

0 commit comments

Comments
 (0)