Skip to content

Commit cd9e558

Browse files
authored
Extend number of macros
1 parent 47ac5d5 commit cd9e558

File tree

10 files changed

+126
-21
lines changed

10 files changed

+126
-21
lines changed

docs/options.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Default: `False`. When enabled, if a filepath is not found, the plugin will rais
3838

3939
## `select_readers`
4040

41-
Default: Selects all available readers. Specify a list of readers to improve documentation build times for very large sites.
41+
Default: Selects all available readers. Specify a list of readers to improve documentation build times for very large sites. This option is ignored when you use this plugin with `mkdocs-macros-plugin` ([read more](howto/use_jinja2.md))
4242

4343
## `enabled`
4444

mkdocs_table_reader_plugin/markdown.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def replace_unescaped_pipes(text: str) -> str:
1919
return re.sub(r"(?<!\\)\|", "\\|", text)
2020

2121

22-
def convert_to_md_table(df: pd.DataFrame, markdown_kwargs: Dict) -> str:
22+
def convert_to_md_table(df: pd.DataFrame, **markdown_kwargs: Dict) -> str:
2323
"""
2424
Convert dataframe to markdown table using tabulate.
2525
"""

mkdocs_table_reader_plugin/plugin.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from mkdocs.exceptions import ConfigurationError
66

77
from mkdocs_table_reader_plugin.safe_eval import parse_argkwarg
8-
from mkdocs_table_reader_plugin.readers import READERS
9-
from mkdocs_table_reader_plugin.markdown import fix_indentation, add_indentation
8+
from mkdocs_table_reader_plugin.readers import READERS, MACROS
9+
from mkdocs_table_reader_plugin.markdown import fix_indentation, add_indentation, convert_to_md_table
1010

1111
logger = get_plugin_logger("table-reader")
1212

@@ -70,13 +70,23 @@ def on_config(self, config, **kwargs):
7070
)
7171

7272
if "macros" in config.plugins:
73-
config.plugins["macros"].macros.update(self.readers)
74-
config.plugins["macros"].variables["macros"].update(self.readers)
75-
config.plugins["macros"].env.globals.update(self.readers)
76-
77-
config.plugins["macros"].filters.update({"add_indentation": add_indentation})
78-
config.plugins["macros"].variables["filters"].update({"add_indentation": add_indentation})
79-
config.plugins["macros"].env.filters.update({"add_indentation": add_indentation})
73+
self.macros = {
74+
macro: MACROS[macro].set_config_context(
75+
mkdocs_config=config, plugin_config=self.config
76+
)
77+
for macro in MACROS
78+
}
79+
self.filters = {
80+
"add_indentation": add_indentation,
81+
"convert_to_md_table": convert_to_md_table,
82+
}
83+
config.plugins["macros"].macros.update(self.macros)
84+
config.plugins["macros"].variables["macros"].update(self.macros)
85+
config.plugins["macros"].env.globals.update(self.macros)
86+
87+
config.plugins["macros"].filters.update(self.filters)
88+
config.plugins["macros"].variables["filters"].update(self.filters)
89+
config.plugins["macros"].env.filters.update(self.filters)
8090

8191
self.external_jinja_engine = True
8292
else:

mkdocs_table_reader_plugin/readers.py

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,38 @@ def __call__(self, *args, **kwargs):
6060
return self.func(valid_file_paths[0], *args, **kwargs)
6161

6262

63+
@ParseArgs
64+
def pd_read_csv(*args, **kwargs) -> str:
65+
read_kwargs = kwargs_in_func(kwargs, pd.read_csv)
66+
return pd.read_csv(*args, **read_kwargs)
67+
6368
@ParseArgs
6469
def read_csv(*args, **kwargs) -> str:
6570
read_kwargs = kwargs_in_func(kwargs, pd.read_csv)
6671
df = pd.read_csv(*args, **read_kwargs)
6772

6873
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_csv)
69-
return convert_to_md_table(df, markdown_kwargs)
74+
return convert_to_md_table(df, **markdown_kwargs)
7075

7176

77+
@ParseArgs
78+
def pd_read_table(*args, **kwargs) -> str:
79+
read_kwargs = kwargs_in_func(kwargs, pd.read_table)
80+
return pd.read_table(*args, **read_kwargs)
81+
7282
@ParseArgs
7383
def read_table(*args, **kwargs) -> str:
7484
read_kwargs = kwargs_in_func(kwargs, pd.read_table)
7585
df = pd.read_table(*args, **read_kwargs)
7686

7787
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_table)
78-
return convert_to_md_table(df, markdown_kwargs)
88+
return convert_to_md_table(df, **markdown_kwargs)
89+
90+
91+
@ParseArgs
92+
def pd_read_fwf(*args, **kwargs) -> str:
93+
read_kwargs = kwargs_in_func(kwargs, pd.read_fwf)
94+
return pd.read_fwf(*args, **read_kwargs)
7995

8096

8197
@ParseArgs
@@ -84,7 +100,12 @@ def read_fwf(*args, **kwargs) -> str:
84100
df = pd.read_fwf(*args, **read_kwargs)
85101

86102
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_fwf)
87-
return convert_to_md_table(df, markdown_kwargs)
103+
return convert_to_md_table(df, **markdown_kwargs)
104+
105+
@ParseArgs
106+
def pd_read_json(*args, **kwargs) -> str:
107+
read_kwargs = kwargs_in_func(kwargs, pd.read_json)
108+
return pd.read_json(*args, **read_kwargs)
88109

89110

90111
@ParseArgs
@@ -93,7 +114,12 @@ def read_json(*args, **kwargs) -> str:
93114
df = pd.read_json(*args, **read_kwargs)
94115

95116
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_json)
96-
return convert_to_md_table(df, markdown_kwargs)
117+
return convert_to_md_table(df, **markdown_kwargs)
118+
119+
@ParseArgs
120+
def pd_read_excel(*args, **kwargs) -> str:
121+
read_kwargs = kwargs_in_func(kwargs, pd.read_excel)
122+
return pd.read_excel(*args, **read_kwargs)
97123

98124

99125
@ParseArgs
@@ -102,17 +128,30 @@ def read_excel(*args, **kwargs) -> str:
102128
df = pd.read_excel(*args, **read_kwargs)
103129

104130
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_excel)
105-
return convert_to_md_table(df, markdown_kwargs)
131+
return convert_to_md_table(df, **markdown_kwargs)
106132

107133

134+
@ParseArgs
135+
def pd_read_yaml(*args, **kwargs) -> str:
136+
json_kwargs = kwargs_in_func(kwargs, pd.json_normalize)
137+
with open(args[0], "r") as f:
138+
df = pd.json_normalize(yaml.safe_load(f), **json_kwargs)
139+
return df
140+
108141
@ParseArgs
109142
def read_yaml(*args, **kwargs) -> str:
110143
json_kwargs = kwargs_in_func(kwargs, pd.json_normalize)
111144
with open(args[0], "r") as f:
112145
df = pd.json_normalize(yaml.safe_load(f), **json_kwargs)
113146

114147
markdown_kwargs = kwargs_not_in_func(kwargs, pd.json_normalize)
115-
return convert_to_md_table(df, markdown_kwargs)
148+
return convert_to_md_table(df, **markdown_kwargs)
149+
150+
151+
@ParseArgs
152+
def pd_read_feather(*args, **kwargs) -> str:
153+
read_kwargs = kwargs_in_func(kwargs, pd.read_feather)
154+
return pd.read_feather(*args, **read_kwargs)
116155

117156

118157
@ParseArgs
@@ -121,7 +160,7 @@ def read_feather(*args, **kwargs) -> str:
121160
df = pd.read_feather(*args, **read_kwargs)
122161

123162
markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_feather)
124-
return convert_to_md_table(df, markdown_kwargs)
163+
return convert_to_md_table(df, **markdown_kwargs)
125164

126165

127166
@ParseArgs
@@ -145,3 +184,14 @@ def read_raw(*args, **kwargs) -> str:
145184
"read_feather": read_feather,
146185
"read_raw": read_raw,
147186
}
187+
188+
MACRO_ONLY = {
189+
"pd_read_csv": pd_read_csv,
190+
"pd_read_table": pd_read_table,
191+
"pd_read_fwf": pd_read_fwf,
192+
"pd_read_excel": pd_read_excel,
193+
"pd_read_yaml": pd_read_yaml,
194+
"pd_read_json": pd_read_json,
195+
"pd_read_feather": pd_read_feather,
196+
}
197+
MACROS = {**READERS, **MACRO_ONLY}

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setup(
77
name="mkdocs-table-reader-plugin",
8-
version="3.0.1",
8+
version="3.1.0",
99
description="MkDocs plugin to directly insert tables from files into markdown.",
1010
long_description=long_description,
1111
long_description_content_type="text/markdown",

tests/fixtures/jinja/docs/index.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,13 @@ This is a table that we load from the docs folder, because we set `data_path` to
2727

2828
{% endfor %}
2929

30+
## Filtering results
31+
32+
{% raw %}
33+
```
34+
{{ pd_read_csv("numeric_table.csv").query("a >= 3") | convert_to_md_table }}
35+
```
36+
{% endraw %}
37+
38+
{{ pd_read_csv("numeric_table.csv").query("a >= 3") | convert_to_md_table }}
39+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
"a","b"
2+
1,2
3+
3,4
4+
5,6
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Homepage
2+
3+
```json
4+
{
5+
"configuration": [
6+
{
7+
"category": "Advanced",
8+
"component": "NetworkModel",
9+
"defaultvalue": "false",
10+
"description": "This will determine if the admin is allowed to deploy.",
11+
"displaytext": "Admin is allowed to deploy",
12+
"group": "Miscellaneous",
13+
"isdynamic": true,
14+
"name": "deploy.anywhere",
15+
"subgroup": "Others",
16+
"type": "Boolean",
17+
"value": "true"
18+
}
19+
]
20+
}
21+
```
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
site_name: test search
2+
3+
theme:
4+
name: material
5+
features:
6+
- navigation.tabs
7+
8+
plugins:
9+
- search
10+
- table-reader

tests/test_markdown.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ def test_convert_to_md_table():
1414
assert df_good.shape[0] > 0
1515

1616
# Because we escape pipes, the 'bad' df
17-
md_bad = convert_to_md_table(df_bad, markdown_kwargs={})
18-
md_good = convert_to_md_table(df_good, markdown_kwargs={})
17+
md_bad = convert_to_md_table(df_bad, **{})
18+
md_good = convert_to_md_table(df_good, **{})
1919
assert md_bad == md_good

0 commit comments

Comments
 (0)