Skip to main content

Hacky mkdocs documentation for plum-dispatch

Project description

pluMkdocs

A very, very hacky way to document multiple dispatch function implemented using the wonderful plum package

⚠️ Desclaimer

Have I mentioned that this is very hacky? It raises a whole lot of warnings, the vast majority of which I don't understand. Also, it is not heavly tested and only checked against mkdocs-material. It contains a lot of hard coded stuff and is not very flexible. It is also not very well documented.

I'm uploading this with the hope that someone will find it useful and will improve it. Contributions welcome :)

Also, I need this as a dependency for other projects, so I will probably not be able to maintain this very well.

How to use

For a quickstart, check out the example in example_module and the index.md page in the docs folder. To see it in action, cd into example_module and run mkdocs serve.

The source code contains something like this:

# Define some function to test
@dispatch.abstract
def foo(a, b):
    """Base description of the generic `foo` function"""
    pass

@dispatch
def foo(a: int, b: int):
    """Add two integers.

    Args:
        a (int): First integer.
        b (int): Second integer.
    
    Returns:
        int: Sum of a and b.
    """
    return a + b

@dispatch
def foo(a: str, b: str):
    """Concatenate two strings.

    Args:
        a (str): First string.
        b (str): Second string.
    
    Returns:
        str: Concatenation of a and b.
    """
    return a + b

...

You should see something like this in the documentation:

example

More details

This package exposes an implementations macro that can be used to list the dispatched implementations of a function in your mkdocs.

To use it, in your mkdocs.yml file, make sure to load the mkdocs-macros plugin using

plugins:
  macros:
    module_name: docs/macros

where docs/macros can be any path to a module that contains the macros. Then, in your docs/macros.py file, you can define the macros you want to use. If you don't have any other macro, you simply need to expose the function define_env from the plumkdocs module, like so:

from plumkdocs import define_env

__all__ = ['define_env']

If you have other macros, you can simply add the macro to your define_env function, like so:

from plumkdocs import mod_to_string

def define_env(env):
    @env.macro
    def implementations(module: str, function=None):
        return mod_to_string(module, function)

In both cases, you can then use the implementations macro in your markdown files, like so:

... some markdown ...

{{ implementations('my_package', 'foo') }}

... some more markdown ...

This will list all the implementations of the foo function in the my_package module. The docstrings will be (hopefully) correctly formatted, and the code will be highlighted using the pygments syntax highlighter. The signature of each method will also be displayed.

Examples

To see a working example, check out the jaxdf and jwave documentation.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plumkdocs-1.0.0.tar.gz (130.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

plumkdocs-1.0.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file plumkdocs-1.0.0.tar.gz.

File metadata

  • Download URL: plumkdocs-1.0.0.tar.gz
  • Upload date:
  • Size: 130.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for plumkdocs-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f5df08aaf75ebb8c60607a63dfa29a3b7726fd4c7b84870cab03bfa9fac5b198
MD5 2558c6aeadce9574393651257b82b482
BLAKE2b-256 7d4401cb5d6611d13619959147aabbceb9fc35a1e62e687945d9ac80ead47624

See more details on using hashes here.

File details

Details for the file plumkdocs-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: plumkdocs-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for plumkdocs-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bec75371ceb0e28d956a905cd521fd6020a4ea17c1d112e3c62dbd3314927bb1
MD5 f2136dec8a22d8ff0450b4735188b6cb
BLAKE2b-256 f4270ade2abf92e10fe0549427ccb7792495dc994f1cea1301358fedfb7342a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page