mkdocs-embed-external-markdown


Namemkdocs-embed-external-markdown JSON
Version 3.0.2 PyPI version JSON
download
home_page
SummaryMkdocs plugin that allow to inject external markdown or markdown section from given url
upload_time2024-02-26 12:18:15
maintainer
docs_urlNone
author
requires_python>=3.9
licenseMIT
keywords mkdocs plugin markdown external-markdown embed external markdown-section
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # MkDocs Embed External Markdown Plugin

[![PyPI - Downloads][pypi-image]][pypi-url]
[![contributions welcome][contributions-image]][contributions-url]
[![MIT license][license-image]][license-url]

[pypi-image]: https://img.shields.io/pypi/dm/mkdocs-embed-external-markdown
[pypi-url]: https://pypi.org/project/mkdocs-embed-external-markdown/
[contributions-image]: https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat
[contributions-url]: https://github.com/fire1ce/mkdocs-embed-external-markdown
[license-image]: https://img.shields.io/badge/License-MIT-blue.svg
[license-url]: https://mit-license.org/

## About

MkDocs Embed External Markdown plugin that allows to inject **section** or **full markdown** content from a given url.
The goal is to embed different markdown from different sources inside your MkDocs project.

## Installation

Install the package with pip:

```shell
pip install mkdocs-embed-external-markdown
```

### Installation for development

To run the tests, first install the package and its test dependencies with pip:

```shell
pip install .[test]
```

You can now run the tests in `tests/` with `pytest`:

```shell
python -m pytest tests/
```

## Configuration

Enable the plugin in your `mkdocs.yml` file:

```yaml
plugins:
  - external-markdown
```

## Compatibility with Github private repos

If the GH_TOKEN environment variable is set with an authorized personal access token then the authorization header will be added to the request and content from private repositories can be fetched

## Usage

- Section defined by **"##/###/####..."** header (h2/h3/h4...)
- **"#"** header (h1) will be **removed** from source content so you can use use your own header
- **"##/###/####..."** header (h2/h3/h4...) will be **removed** from source **section** content so you can use use your own header
- Supports multiple **sections** from any source

`external_markdown` requires 2 parameters: **url** and **section name**.

```makrdown
{{ external_markdown('url', '## section name') }}
```

### Full Markdown Content

Embed full markdown content from a given url, you can use the following example:

```markdown
{{ external_markdown('https://raw.githubusercontent.com/fire1ce/DDNS-Cloudflare-Bash/main/README.md', '') }}
```

### Specific Section

Embed markdown section from a given url, you can use the following example:

```markdown
{{ external_markdown('https://raw.githubusercontent.com/fire1ce/DDNS-Cloudflare-Bash/main/README.md', '## Installation') }}
```

## MkDocs Example

The following example shows how to use the plugin in mkdocs project:

````markdown
# Example Page

This is an example page.

## Embedding Multiple Markdown Sections From Different URLs

### First Embedded Section

```markdown
{{ external_markdown('https://raw.githubusercontent.com/mkdocs/mkdocs/master/README.md', '## Features') }}
```

### Second Embedded Section

```markdown
{{ external_markdown('https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/README.md', '## Quick start') }}
```
````

Will produce the following page:

![MkDocs Embed External Markdown Plugin](https://user-images.githubusercontent.com/16795594/155761254-17b47e65-d27e-438b-a476-15bd04fdc3ec.jpg)

## How To Prevent Accidental Interpretation Of `Jinja-like` Statements

The most frequent issue when adding the `MkDocs Embed External Markdown Plugin` to an existing mkdocs project, is that some markdown pages may not be rendered correctly, or cause a syntax error, or some other error.

The reason is that if Jinja2 template engine in the **MkDocs Embed External Markdown Plugin** meets any text that has the standard markers (typically starting with `{%`} or `{{`) this will cause a conflict: it will try to interpret that text as a macro and fail to behave properly.

The most likely places where this can occur are the following:

| Location in Markdown file (Block or Inline) | Description                                                                                                |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Code**                                    | Documented Jinja2 statements (or similar syntax), LaTeX                                                    |
| **Maths**                                   | LaTeX statements                                                                                           |
| _*Elsewhere*_                               | Some pre-existing templating or macro language, typically with some constructs starting with `{#` or `{{`. |

### Code Blocks Containing Similar Languages

With MkDocs, this situation typically occurs when the website
is documenting an application that relies on a
[djangolike/jinjalike language](https://medium.com/@i5ar/template-languages-a7b362971cbc) like:

- Django Template Language
- Jinja2 (Python)
- Nunjucks (Javascript)
- Twig (PHP)
- ...

This may also happen for pages that documents
[Ansible](https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/intro.html) directives, which often contain
[variables expressed in a Jinja2 syntax](https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_variables.html#using-variables-about-jinja2).

### Solutions - Explicitly Marking The Snippets as `raw`

````markdown
{% raw %}

```bash
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
```

{% endraw %}
````

## Known Issues

- [ ]

## Changelog

### Version 3.xx

Version 3.0.1 (2023-06-21)

Fixed:

- [x] Crash caused by conflict with Jinja2 render engine expects `config` parameter from other 3rd party plugins.

Version 3.0.0 (2023-06-20)

Added

- [x] Modularized the code into separate methods for improved readability and maintainability.
- [x] Added type hints for better code understanding and possible performance improvements.
- [x] Included regex pre-compilation for performance enhancement.
- [x] Enhanced URL validation to check for the structure of a URL rather than just the presence of .md.
- [x] Improved error logging through the use of logger.warning instead of print statements, which integrates with MkDocs' logging system.
- [x] Added handling for relative links in the markdown, making them absolute based on the base URL.
- [x] Introduced better error handling for Connection Errors and Status Codes through optional return types.

Removed:

- [x] Removed the use of sys.exit(1) on error, allowing the MkDocs build process to continue even if the plugin encounters an issue.
- [x] Removed the strict requirement for a section level at the beginning of a section name.

Changed

- [x] Switched from using re.compile for one-time regex patterns to using re.match or re.search.
- [x] Extracted the GitHub token once at the beginning of the request method instead of multiple times.
- [x] Replaced the check for .md at the end of the URL with a more comprehensive regular expression to validate the URL's structure.

Fixed:

- [x] Handling of section extraction is now more robust and less prone to errors.

Please note that this is a major version update and may contain breaking changes. Carefully read the updated documentation and test the plugin thoroughly before upgrading in a production environment.

### Version 2.xx Changelog Archive

**Braking change: Section name must include Markdown Section header like: `## Section name`**

Changelog:

- [x] Add ability to import content from private github repositories. Thanks to @sd0408
- [x] Added support for multi level sections such as `### Section name` and `#### Section name`
- [x] Better Handling of parsing makrdowns wich contains `#` in the content
- [x] Failing Mkdocs Build when Markdown content cannot be fetched

## License

This project is licensed under the terms of the [MIT License](LICENSE.md).

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "mkdocs-embed-external-markdown",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "mkdocs,plugin,markdown,external-markdown,embed,external,markdown-section",
    "author": "",
    "author_email": "Stas Yakobov <dev@3os.org>",
    "download_url": "https://files.pythonhosted.org/packages/41/0d/99c54195df8a06c751bbbaaf743be771aa538eee28f39f33fe397ceb602c/mkdocs-embed-external-markdown-3.0.2.tar.gz",
    "platform": null,
    "description": "# MkDocs Embed External Markdown Plugin\n\n[![PyPI - Downloads][pypi-image]][pypi-url]\n[![contributions welcome][contributions-image]][contributions-url]\n[![MIT license][license-image]][license-url]\n\n[pypi-image]: https://img.shields.io/pypi/dm/mkdocs-embed-external-markdown\n[pypi-url]: https://pypi.org/project/mkdocs-embed-external-markdown/\n[contributions-image]: https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\n[contributions-url]: https://github.com/fire1ce/mkdocs-embed-external-markdown\n[license-image]: https://img.shields.io/badge/License-MIT-blue.svg\n[license-url]: https://mit-license.org/\n\n## About\n\nMkDocs Embed External Markdown plugin that allows to inject **section** or **full markdown** content from a given url.\nThe goal is to embed different markdown from different sources inside your MkDocs project.\n\n## Installation\n\nInstall the package with pip:\n\n```shell\npip install mkdocs-embed-external-markdown\n```\n\n### Installation for development\n\nTo run the tests, first install the package and its test dependencies with pip:\n\n```shell\npip install .[test]\n```\n\nYou can now run the tests in `tests/` with `pytest`:\n\n```shell\npython -m pytest tests/\n```\n\n## Configuration\n\nEnable the plugin in your `mkdocs.yml` file:\n\n```yaml\nplugins:\n  - external-markdown\n```\n\n## Compatibility with Github private repos\n\nIf the GH_TOKEN environment variable is set with an authorized personal access token then the authorization header will be added to the request and content from private repositories can be fetched\n\n## Usage\n\n- Section defined by **\"##/###/####...\"** header (h2/h3/h4...)\n- **\"#\"** header (h1) will be **removed** from source content so you can use use your own header\n- **\"##/###/####...\"** header (h2/h3/h4...) will be **removed** from source **section** content so you can use use your own header\n- Supports multiple **sections** from any source\n\n`external_markdown` requires 2 parameters: **url** and **section name**.\n\n```makrdown\n{{ external_markdown('url', '## section name') }}\n```\n\n### Full Markdown Content\n\nEmbed full markdown content from a given url, you can use the following example:\n\n```markdown\n{{ external_markdown('https://raw.githubusercontent.com/fire1ce/DDNS-Cloudflare-Bash/main/README.md', '') }}\n```\n\n### Specific Section\n\nEmbed markdown section from a given url, you can use the following example:\n\n```markdown\n{{ external_markdown('https://raw.githubusercontent.com/fire1ce/DDNS-Cloudflare-Bash/main/README.md', '## Installation') }}\n```\n\n## MkDocs Example\n\nThe following example shows how to use the plugin in mkdocs project:\n\n````markdown\n# Example Page\n\nThis is an example page.\n\n## Embedding Multiple Markdown Sections From Different URLs\n\n### First Embedded Section\n\n```markdown\n{{ external_markdown('https://raw.githubusercontent.com/mkdocs/mkdocs/master/README.md', '## Features') }}\n```\n\n### Second Embedded Section\n\n```markdown\n{{ external_markdown('https://raw.githubusercontent.com/squidfunk/mkdocs-material/master/README.md', '## Quick start') }}\n```\n````\n\nWill produce the following page:\n\n![MkDocs Embed External Markdown Plugin](https://user-images.githubusercontent.com/16795594/155761254-17b47e65-d27e-438b-a476-15bd04fdc3ec.jpg)\n\n## How To Prevent Accidental Interpretation Of `Jinja-like` Statements\n\nThe most frequent issue when adding the `MkDocs Embed External Markdown Plugin` to an existing mkdocs project, is that some markdown pages may not be rendered correctly, or cause a syntax error, or some other error.\n\nThe reason is that if Jinja2 template engine in the **MkDocs Embed External Markdown Plugin** meets any text that has the standard markers (typically starting with `{%`} or `{{`) this will cause a conflict: it will try to interpret that text as a macro and fail to behave properly.\n\nThe most likely places where this can occur are the following:\n\n| Location in Markdown file (Block or Inline) | Description                                                                                                |\n| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |\n| **Code**                                    | Documented Jinja2 statements (or similar syntax), LaTeX                                                    |\n| **Maths**                                   | LaTeX statements                                                                                           |\n| _*Elsewhere*_                               | Some pre-existing templating or macro language, typically with some constructs starting with `{#` or `{{`. |\n\n### Code Blocks Containing Similar Languages\n\nWith MkDocs, this situation typically occurs when the website\nis documenting an application that relies on a\n[djangolike/jinjalike language](https://medium.com/@i5ar/template-languages-a7b362971cbc) like:\n\n- Django Template Language\n- Jinja2 (Python)\n- Nunjucks (Javascript)\n- Twig (PHP)\n- ...\n\nThis may also happen for pages that documents\n[Ansible](https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/intro.html) directives, which often contain\n[variables expressed in a Jinja2 syntax](https://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_variables.html#using-variables-about-jinja2).\n\n### Solutions - Explicitly Marking The Snippets as `raw`\n\n````markdown\n{% raw %}\n\n```bash\ndocker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id\n```\n\n{% endraw %}\n````\n\n## Known Issues\n\n- [ ]\n\n## Changelog\n\n### Version 3.xx\n\nVersion 3.0.1 (2023-06-21)\n\nFixed:\n\n- [x] Crash caused by conflict with Jinja2 render engine expects `config` parameter from other 3rd party plugins.\n\nVersion 3.0.0 (2023-06-20)\n\nAdded\n\n- [x] Modularized the code into separate methods for improved readability and maintainability.\n- [x] Added type hints for better code understanding and possible performance improvements.\n- [x] Included regex pre-compilation for performance enhancement.\n- [x] Enhanced URL validation to check for the structure of a URL rather than just the presence of .md.\n- [x] Improved error logging through the use of logger.warning instead of print statements, which integrates with MkDocs' logging system.\n- [x] Added handling for relative links in the markdown, making them absolute based on the base URL.\n- [x] Introduced better error handling for Connection Errors and Status Codes through optional return types.\n\nRemoved:\n\n- [x] Removed the use of sys.exit(1) on error, allowing the MkDocs build process to continue even if the plugin encounters an issue.\n- [x] Removed the strict requirement for a section level at the beginning of a section name.\n\nChanged\n\n- [x] Switched from using re.compile for one-time regex patterns to using re.match or re.search.\n- [x] Extracted the GitHub token once at the beginning of the request method instead of multiple times.\n- [x] Replaced the check for .md at the end of the URL with a more comprehensive regular expression to validate the URL's structure.\n\nFixed:\n\n- [x] Handling of section extraction is now more robust and less prone to errors.\n\nPlease note that this is a major version update and may contain breaking changes. Carefully read the updated documentation and test the plugin thoroughly before upgrading in a production environment.\n\n### Version 2.xx Changelog Archive\n\n**Braking change: Section name must include Markdown Section header like: `## Section name`**\n\nChangelog:\n\n- [x] Add ability to import content from private github repositories. Thanks to @sd0408\n- [x] Added support for multi level sections such as `### Section name` and `#### Section name`\n- [x] Better Handling of parsing makrdowns wich contains `#` in the content\n- [x] Failing Mkdocs Build when Markdown content cannot be fetched\n\n## License\n\nThis project is licensed under the terms of the [MIT License](LICENSE.md).\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Mkdocs plugin that allow to inject external markdown or markdown section from given url",
    "version": "3.0.2",
    "project_urls": {
        "Source": "https://github.com/fire1ce/pypi-test"
    },
    "split_keywords": [
        "mkdocs",
        "plugin",
        "markdown",
        "external-markdown",
        "embed",
        "external",
        "markdown-section"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a219c8e5b85ff0bc58862b32667a2a274afdf54610febbf93a7b91f070525275",
                "md5": "135b3af79dc9af1d0f8cb329816cbc86",
                "sha256": "82088296cfd117b36ef45b58b4342005727a1f891f0c429c21756215e89099d2"
            },
            "downloads": -1,
            "filename": "mkdocs_embed_external_markdown-3.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "135b3af79dc9af1d0f8cb329816cbc86",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 7787,
            "upload_time": "2024-02-26T12:18:14",
            "upload_time_iso_8601": "2024-02-26T12:18:14.088321Z",
            "url": "https://files.pythonhosted.org/packages/a2/19/c8e5b85ff0bc58862b32667a2a274afdf54610febbf93a7b91f070525275/mkdocs_embed_external_markdown-3.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "410d99c54195df8a06c751bbbaaf743be771aa538eee28f39f33fe397ceb602c",
                "md5": "0ce79d575f8475eb6985634e159751c0",
                "sha256": "9a3d14a9cc6efb4201175530f277e84da472a576772db264a3b19570cf266317"
            },
            "downloads": -1,
            "filename": "mkdocs-embed-external-markdown-3.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "0ce79d575f8475eb6985634e159751c0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 7123,
            "upload_time": "2024-02-26T12:18:15",
            "upload_time_iso_8601": "2024-02-26T12:18:15.705063Z",
            "url": "https://files.pythonhosted.org/packages/41/0d/99c54195df8a06c751bbbaaf743be771aa538eee28f39f33fe397ceb602c/mkdocs-embed-external-markdown-3.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-26 12:18:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "fire1ce",
    "github_project": "pypi-test",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "mkdocs-embed-external-markdown"
}
        
Elapsed time: 0.25736s