Skip to content

Commit

Permalink
Extend number of macros
Browse files Browse the repository at this point in the history
  • Loading branch information
timvink authored Aug 27, 2024
1 parent 47ac5d5 commit cd9e558
Show file tree
Hide file tree
Showing 10 changed files with 126 additions and 21 deletions.
2 changes: 1 addition & 1 deletion docs/options.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Default: `False`. When enabled, if a filepath is not found, the plugin will rais

## `select_readers`

Default: Selects all available readers. Specify a list of readers to improve documentation build times for very large sites.
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))

## `enabled`

Expand Down
2 changes: 1 addition & 1 deletion mkdocs_table_reader_plugin/markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def replace_unescaped_pipes(text: str) -> str:
return re.sub(r"(?<!\\)\|", "\\|", text)


def convert_to_md_table(df: pd.DataFrame, markdown_kwargs: Dict) -> str:
def convert_to_md_table(df: pd.DataFrame, **markdown_kwargs: Dict) -> str:
"""
Convert dataframe to markdown table using tabulate.
"""
Expand Down
28 changes: 19 additions & 9 deletions mkdocs_table_reader_plugin/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
from mkdocs.exceptions import ConfigurationError

from mkdocs_table_reader_plugin.safe_eval import parse_argkwarg
from mkdocs_table_reader_plugin.readers import READERS
from mkdocs_table_reader_plugin.markdown import fix_indentation, add_indentation
from mkdocs_table_reader_plugin.readers import READERS, MACROS
from mkdocs_table_reader_plugin.markdown import fix_indentation, add_indentation, convert_to_md_table

logger = get_plugin_logger("table-reader")

Expand Down Expand Up @@ -70,13 +70,23 @@ def on_config(self, config, **kwargs):
)

if "macros" in config.plugins:
config.plugins["macros"].macros.update(self.readers)
config.plugins["macros"].variables["macros"].update(self.readers)
config.plugins["macros"].env.globals.update(self.readers)

config.plugins["macros"].filters.update({"add_indentation": add_indentation})
config.plugins["macros"].variables["filters"].update({"add_indentation": add_indentation})
config.plugins["macros"].env.filters.update({"add_indentation": add_indentation})
self.macros = {
macro: MACROS[macro].set_config_context(
mkdocs_config=config, plugin_config=self.config
)
for macro in MACROS
}
self.filters = {
"add_indentation": add_indentation,
"convert_to_md_table": convert_to_md_table,
}
config.plugins["macros"].macros.update(self.macros)
config.plugins["macros"].variables["macros"].update(self.macros)
config.plugins["macros"].env.globals.update(self.macros)

config.plugins["macros"].filters.update(self.filters)
config.plugins["macros"].variables["filters"].update(self.filters)
config.plugins["macros"].env.filters.update(self.filters)

self.external_jinja_engine = True
else:
Expand Down
64 changes: 57 additions & 7 deletions mkdocs_table_reader_plugin/readers.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,22 +60,38 @@ def __call__(self, *args, **kwargs):
return self.func(valid_file_paths[0], *args, **kwargs)


@ParseArgs
def pd_read_csv(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_csv)
return pd.read_csv(*args, **read_kwargs)

@ParseArgs
def read_csv(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_csv)
df = pd.read_csv(*args, **read_kwargs)

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_csv)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)


@ParseArgs
def pd_read_table(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_table)
return pd.read_table(*args, **read_kwargs)

@ParseArgs
def read_table(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_table)
df = pd.read_table(*args, **read_kwargs)

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_table)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)


@ParseArgs
def pd_read_fwf(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_fwf)
return pd.read_fwf(*args, **read_kwargs)


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

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_fwf)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)

@ParseArgs
def pd_read_json(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_json)
return pd.read_json(*args, **read_kwargs)


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

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_json)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)

@ParseArgs
def pd_read_excel(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_excel)
return pd.read_excel(*args, **read_kwargs)


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

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_excel)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)


@ParseArgs
def pd_read_yaml(*args, **kwargs) -> str:
json_kwargs = kwargs_in_func(kwargs, pd.json_normalize)
with open(args[0], "r") as f:
df = pd.json_normalize(yaml.safe_load(f), **json_kwargs)
return df

@ParseArgs
def read_yaml(*args, **kwargs) -> str:
json_kwargs = kwargs_in_func(kwargs, pd.json_normalize)
with open(args[0], "r") as f:
df = pd.json_normalize(yaml.safe_load(f), **json_kwargs)

markdown_kwargs = kwargs_not_in_func(kwargs, pd.json_normalize)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)


@ParseArgs
def pd_read_feather(*args, **kwargs) -> str:
read_kwargs = kwargs_in_func(kwargs, pd.read_feather)
return pd.read_feather(*args, **read_kwargs)


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

markdown_kwargs = kwargs_not_in_func(kwargs, pd.read_feather)
return convert_to_md_table(df, markdown_kwargs)
return convert_to_md_table(df, **markdown_kwargs)


@ParseArgs
Expand All @@ -145,3 +184,14 @@ def read_raw(*args, **kwargs) -> str:
"read_feather": read_feather,
"read_raw": read_raw,
}

MACRO_ONLY = {
"pd_read_csv": pd_read_csv,
"pd_read_table": pd_read_table,
"pd_read_fwf": pd_read_fwf,
"pd_read_excel": pd_read_excel,
"pd_read_yaml": pd_read_yaml,
"pd_read_json": pd_read_json,
"pd_read_feather": pd_read_feather,
}
MACROS = {**READERS, **MACRO_ONLY}
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setup(
name="mkdocs-table-reader-plugin",
version="3.0.1",
version="3.1.0",
description="MkDocs plugin to directly insert tables from files into markdown.",
long_description=long_description,
long_description_content_type="text/markdown",
Expand Down
10 changes: 10 additions & 0 deletions tests/fixtures/jinja/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,13 @@ This is a table that we load from the docs folder, because we set `data_path` to

{% endfor %}

## Filtering results

{% raw %}
```
{{ pd_read_csv("numeric_table.csv").query("a >= 3") | convert_to_md_table }}
```
{% endraw %}

{{ pd_read_csv("numeric_table.csv").query("a >= 3") | convert_to_md_table }}

4 changes: 4 additions & 0 deletions tests/fixtures/jinja/docs/numeric_table.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"a","b"
1,2
3,4
5,6
21 changes: 21 additions & 0 deletions tests/fixtures/search_problem/docs/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Homepage

```json
{
"configuration": [
{
"category": "Advanced",
"component": "NetworkModel",
"defaultvalue": "false",
"description": "This will determine if the admin is allowed to deploy.",
"displaytext": "Admin is allowed to deploy",
"group": "Miscellaneous",
"isdynamic": true,
"name": "deploy.anywhere",
"subgroup": "Others",
"type": "Boolean",
"value": "true"
}
]
}
```
10 changes: 10 additions & 0 deletions tests/fixtures/search_problem/mkdocs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
site_name: test search

theme:
name: material
features:
- navigation.tabs

plugins:
- search
- table-reader
4 changes: 2 additions & 2 deletions tests/test_markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ def test_convert_to_md_table():
assert df_good.shape[0] > 0

# Because we escape pipes, the 'bad' df
md_bad = convert_to_md_table(df_bad, markdown_kwargs={})
md_good = convert_to_md_table(df_good, markdown_kwargs={})
md_bad = convert_to_md_table(df_bad, **{})
md_good = convert_to_md_table(df_good, **{})
assert md_bad == md_good

0 comments on commit cd9e558

Please sign in to comment.