diff --git a/README.md b/README.md index ae31640..7c00111 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,72 @@ -# example-mkdocs-basic -A basic MkDocs project for Read the Docs +Example: Basic MkDocs project for Read the Docs +=============================================== + +[![Documentation Status](https://readthedocs.org/projects/example-mkdocs-basic/badge/?version=latest)](https://example-mkdocs-basic.readthedocs.io/en/latest/?badge=latest) + +This example shows the an integration of a basic MkDocs project with Read the Docs. You\'re encouraged to view it to get inspiration and copy & paste from the files in the source code. If you are using Read the Docs for the first time, have a look at the official [Read the Docs Tutorial](https://docs.readthedocs.io/en/stable/tutorial/index.html). + +📚 [docs/](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/docs/)
+A basic MkDocs project lives in `docs/`, it was generated using MkDocs defaults. All the `*.md` make up sections in the documentation. + +⚙️ [.readthedocs.yaml](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/.readthedocs.yaml)
+Read the Docs Build configuration is stored in `.readthedocs.yaml`. + +⚙️ [mkdocs.yml](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/mkdocs.yaml)
+A basic [MkDocs configuration](https://www.mkdocs.org/user-guide/configuration/) is stored here, including a few extensions for MkDocs and Markdown. Add your own configurations here, such as extensions and themes. Remember that many extensions and themes require additional Python packages to be installed. + +📍 [docs/requirements.txt](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/docs/requirements.txt) and [docs/requirements.in](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/docs/requirements.in)
+Python dependencies are [pinned](https://docs.readthedocs.io/en/latest/guides/reproducible-builds.html) (uses [pip-tools](https://pip-tools.readthedocs.io/en/latest/)) here. Make sure to add your Python dependencies to `requirements.txt` or if you choose [pip-tools](https://pip-tools.readthedocs.io/en/latest/), edit `docs/requirements.in` and remember to run to run `pip-compile docs/requirements.in`. + +💡 [docs/api.md](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/docs/api.md)
+We add our example Python module `lumache` in order to auto-generate an API reference. To do this, we use the `:::` syntax, you can read more in the [mkdocstrings documentation](https://mkdocstrings.github.io/). + +💡 [docs/usage.md](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/docs/usage.md)
+We also include some direct links to a function from the API reference, as well as embedding documentation for the example function `lumache.get_random_recipe`. This functionality is also from the [mkdocstrings](https://mkdocstrings.github.io/python/) extension. + +💡 [lumache.py](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/lumache.py)
+API docs are generated for this example Python module - they use *docstrings* directly in the documentation, notice how this shows up in the rendered documentation. We use the [Sphinx convention](https://pythonhosted.org/an_example_pypi_project/sphinx.html#function-definitions) for docstrings, however you are free to edit `mkdocs.yml` to change this option to `google` or `numpy`. + +🔢 Git tags versioning
+We use a basic versioning mechanism by adding a git tag for every release of the example project. All releases and their version numbers are visible on +[example-mkdocs-basic.readthedocs.io](https://example-mkdocs-basic.readthedocs.io/en/latest/). + +📜 [README.rst](https://github.com/readthedocs-examples/example-mkdocs-basic/blob/main/README.rst)
+Contents of this `README.md` are visible on Github and included on [the documentation index page](https://example-mkdocs-basic.readthedocs.io/en/latest/) (Don\'t Repeat Yourself). + +⁉️ Questions / comments
+If you have questions related to this example, feel free to can ask them as a Github issue [here](https://github.com/readthedocs-examples/example-mkdocs-basic/issues). + + +Example Project usage +--------------------- + +This project has a standard MkDocs layout which is built by Read the Docs almost the same way that you would build it locally (on your own laptop!). + +You can build and view this documentation project locally - we recommend that you activate [a local Python virtual environment first](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment): + +```console +# Install required Python dependencies (MkDocs etc.) +pip install -r docs/requirements.txt + +# Run the mkdocs development server +mkdocs serve +``` + +Using the example in your own project +------------------------------------- + +If you are new to Read the Docs, you may want to refer to the [Read the Docs User documentation](https://docs.readthedocs.io/). + +If you are copying this code in order to get started with your documentation, you need to: + +1. place your `docs/` folder alongside your Python project. If you are starting a new project, you can adapt the `pyproject.toml` example configuration. +1. use your existing project repository or create a new repository on Github, GitLab, Bitbucket or another host supported by Read the Docs. +1. copy in `mkdocs.yaml`, `.readthedocs.yml` and the `docs/` folder into your project. Customize all the files, replacing example contents. +1. Rebuild the documenation locally to see that it works. +1. *Finally*, register your project on Read the Docs, see [Importing Your Documentation](https://docs.readthedocs.io/en/stable/intro/import-guide.html). + + +Read the Docs tutorial +---------------------- + +To get started with Read the Docs, you may also refer to the [Read the Docs tutorial](https://docs.readthedocs.io/en/stable/tutorial/). It provides a full walk-through of building an example project similar to the one in this repository. diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..24b0824 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,3 @@ +# API Reference + +::: lumache diff --git a/docs/index.md b/docs/index.md index 000ea34..d489af8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,17 +1,15 @@ -# Welcome to MkDocs +{!README.md!} -For full documentation visit [mkdocs.org](https://www.mkdocs.org). +# Welcome to Lumache's documentation! -## Commands +**Lumache** (/lu\'make/) is a Python library for cooks and food lovers +that creates recipes mixing random ingredients. It pulls data from the +[Open Food Facts database](https://world.openfoodfacts.org/) and offers +a *simple* and *intuitive* API. -* `mkdocs new [dir-name]` - Create a new project. -* `mkdocs serve` - Start the live-reloading docs server. -* `mkdocs build` - Build the documentation site. -* `mkdocs -h` - Print help message and exit. +Check out the [usage](usage) section for further information, including how to [install](usage#installation) the project. -## Project layout +!!! note + + This project is under active development. - mkdocs.yml # The configuration file. - docs/ - index.md # The documentation homepage. - ... # Other markdown pages, images and other files. diff --git a/docs/requirements.in b/docs/requirements.in new file mode 100644 index 0000000..bec300c --- /dev/null +++ b/docs/requirements.in @@ -0,0 +1,3 @@ +mkdocs +mkdocstrings[python] +markdown-include diff --git a/docs/requirements.txt b/docs/requirements.txt index 9f37075..f6cb652 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1,66 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile docs/requirements.in +# +click==8.1.3 + # via mkdocs +ghp-import==2.1.0 + # via mkdocs +griffe==0.22.0 + # via mkdocstrings-python +importlib-metadata==4.12.0 + # via mkdocs +jinja2==3.1.2 + # via + # mkdocs + # mkdocstrings +markdown==3.3.7 + # via + # markdown-include + # mkdocs + # mkdocs-autorefs + # mkdocstrings + # pymdown-extensions +markdown-include==0.6.0 + # via -r docs/requirements.in +markupsafe==2.1.1 + # via + # jinja2 + # mkdocstrings +mergedeep==1.3.4 + # via mkdocs mkdocs==1.3.0 + # via + # -r docs/requirements.in + # mkdocs-autorefs + # mkdocstrings +mkdocs-autorefs==0.4.1 + # via mkdocstrings +mkdocstrings[python]==0.19.0 + # via + # -r docs/requirements.in + # mkdocstrings-python +mkdocstrings-python==0.7.1 + # via mkdocstrings +packaging==21.3 + # via mkdocs +pymdown-extensions==9.5 + # via mkdocstrings +pyparsing==3.0.9 + # via packaging +python-dateutil==2.8.2 + # via ghp-import +pyyaml==6.0 + # via + # mkdocs + # pyyaml-env-tag +pyyaml-env-tag==0.1 + # via mkdocs +six==1.16.0 + # via python-dateutil +watchdog==2.1.9 + # via mkdocs +zipp==3.8.0 + # via importlib-metadata diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..efd1a2a --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,34 @@ +Usage +===== + +Installation +------------ + +To use Lumache, first install it using pip: + +```console +(.venv) $ pip install lumache +``` + +Creating recipes +---------------- + +To retrieve a list of random ingredients, you can use the +`lumache.get_random_ingredients()` function: + +::: lumache.get_random_ingredients + options: + show_root_heading: true + +
+ +The `kind` parameter should be either `"meat"`, `"fish"`, or `"veggies"`. +Otherwise, [`get_random_ingredients`][lumache.get_random_ingredients] will raise an exception [`lumache.InvalidKindError`](/api#lumache.InvalidKindError). + +For example: + +```python +>>> import lumache +>>> lumache.get_random_ingredients() +['shells', 'gorgonzola', 'parsley'] +``` diff --git a/lumache.py b/lumache.py new file mode 100644 index 0000000..49f0c0e --- /dev/null +++ b/lumache.py @@ -0,0 +1,34 @@ +""" +Lumache - Python library for cooks and food lovers. + +This is a Python docstring, we can use Markdown syntax here because +our API documentation library understands it (mkdocstrings). + + # Import lumache + import lumache + + # Call its only function + get_random_ingredients(kind=["cheeses"]) + +""" + +__version__ = "0.1.0" + + +class InvalidKindError(Exception): + """Raised if the kind is invalid.""" + + pass + + +def get_random_ingredients(kind=None): + """ + Return a list of random ingredients as strings. + + :param kind: Optional "kind" of ingredients. + :type kind: list[str] or None + :raise lumache.InvalidKindError: If the kind is invalid. + :return: The ingredients list. + :rtype: list[str] + """ + return ["shells", "gorgonzola", "parsley"] diff --git a/mkdocs.yml b/mkdocs.yml index c97182f..2a5a12e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1 +1,16 @@ -site_name: My Docs +site_name: Basic MkDocs Example Project +theme: + name: readthedocs + highlightjs: true +plugins: + - search + - mkdocstrings: + handlers: + # See: https://mkdocstrings.github.io/python/usage/ + python: + options: + docstring_style: sphinx +markdown_extensions: + - markdown_include.include: + base_path: . + - admonition diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..14a2dda --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,8 @@ +[build-system] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +[project] +name = "lumache" +authors = [{name = "Graziella", email = "graziella@lumache"}] +dynamic = ["version", "description"]