settings-doc


Namesettings-doc JSON
Version 4.3.1 PyPI version JSON
download
home_pagehttps://github.com/radeklat/settings-doc
SummaryA command line tool for generating Markdown documentation and .env files from pydantic BaseSettings.
upload_time2024-09-19 09:32:44
maintainerNone
docs_urlNone
authorRadek Lát
requires_python<4.0.0,>=3.8.1
licenseMIT
keywords documentation environment variables generated markdown basesettings
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <h1 align="center" style="border-bottom: none;">⚙&nbsp;📝&nbsp;&nbsp;Settings&nbsp;Doc&nbsp;&nbsp;📝&nbsp;⚙</h1>
<h3 align="center">A (command line) tool for generating Markdown documentation and .env files from <a href="">pydantic_settings.BaseSettings</a>.</h3>

<p align="center">
    <a href="https://app.circleci.com/pipelines/github/radeklat/settings-doc?branch=main">
        <img alt="CircleCI" src="https://img.shields.io/circleci/build/github/radeklat/settings-doc">
    </a>
    <a href="https://app.codecov.io/gh/radeklat/settings-doc/">
        <img alt="Codecov" src="https://img.shields.io/codecov/c/github/radeklat/settings-doc">
    </a>
    <a href="https://github.com/radeklat/settings-doc/tags">
        <img alt="GitHub tag (latest SemVer)" src="https://img.shields.io/github/tag/radeklat/settings-doc">
    </a>
    <img alt="Maintenance" src="https://img.shields.io/maintenance/yes/2024">
    <a href="https://github.com/radeklat/settings-doc/commits/main">
        <img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/radeklat/settings-doc">
    </a>
    <a href="https://pypistats.org/packages/settings-doc">
        <img alt="PyPI - Downloads" src="https://img.shields.io/pypi/dm/settings-doc">
    </a>
    <a href="https://github.com/radeklat/settings-doc/blob/main/LICENSE">
        <img alt="PyPI - License" src="https://img.shields.io/pypi/l/settings-doc">
    </a>
    <a href="https://www.python.org/doc/versions/">
        <img alt="PyPI - Python Version" src="https://img.shields.io/pypi/pyversions/settings-doc">
    </a>
    <a href="https://pydantic.dev">
        <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json" alt="Pydantic Version 2" style="max-width:100%;">
    </a>
</p>

The same way you are able to generate OpenAPI documentation from [`pydantic.BaseModel`](https://pydantic-docs.helpmanual.io/usage/models/), `settings-doc` allows you to generate documentation from [`pydantic_settings.BaseSettings`](https://docs.pydantic.dev/latest/api/pydantic_settings/).

It is powered by the [Jinja2](https://jinja.palletsprojects.com/en/latest/) templating engine and [Click](https://click.palletsprojects.com) framework. If you don't like the built-in templates, you can easily modify them or write completely custom ones. All attributes of the [`BaseSettings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) models are exposed to the templates.

<!--
    How to generate TOC from PyCharm:
    https://github.com/vsch/idea-multimarkdown/wiki/Table-of-Contents-Extension
-->
[TOC levels=1,2 markdown formatted bullet hierarchy]: # "Table of content"

# Table of content
- [Installation](#installation)
- [Usage](#usage)
  - [Minimal example](#minimal-example)
  - [Class auto-discovery](#class-auto-discovery)
  - [Adding more information](#adding-more-information)
  - [Updating existing documentation](#updating-existing-documentation)
- [Advanced usage](#advanced-usage)
  - [Rendering documentation in code](#rendering-documentation-in-code)
  - [Custom templates](#custom-templates)
  - [Custom settings attributes in templates](#custom-settings-attributes-in-templates)
  - [As a pre-commit hook](#as-a-pre-commit-hook)
- [Features overview](#features-overview)
  - [Markdown](#markdown)
  - [.env](#env)

# Installation

```
pip install settings-doc
```

# Command-line usage

See `settings-doc --help` for all options.

## Minimal example

Let's assume the following [`BaseSettings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) in `src/settings.py` of a project:

```python
from pydantic_settings import BaseSettings

class AppSettings(BaseSettings):
    logging_level: str
```

You can generate a Markdown documentation into stdout with:

```shell script
settings-doc generate --class src.settings.AppSettings --output-format markdown
```

Which will output:

```markdown
# `LOGGING_LEVEL`

**Required**
```

Similarly, you can generate a `.env` file for local development with:

```shell script
settings-doc generate --class src.settings.AppSettings --output-format dotenv
```

Which will output:

```dotenv
LOGGING_LEVEL=

```

## Class auto-discovery

If you have a module with a single settings class or want to load multiple classes at once as a source, you can also use the `--module` option. The following example works exactly like the one above and will use the `AppSettings` class automatically.

```shell script
settings-doc generate --module src.settings --output-format dotenv
```

If multiple classes contain a field with the same name, all instances will appear in the output.

## Adding more information

You can add any extra field parameters to the settings. By default, `settings-doc` will utilise the default value, whether the parameter is required or optional, description, example value, and list of possible values:

```python
from pydantic_settings import BaseSettings, Field

class AppSettings(BaseSettings):
    logging_level: str = Field(
        "WARNING",
        description="Log level.",
        examples=["WARNING"],
        possible_values=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
    )
```

Which will generate the following markdown:

```markdown
# `LOGGING_LEVEL`

*Optional*, default value: `WARNING`

Log level.

## Examples

`WARNING`

## Possible values

`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
```

or `.env` file:

```dotenv
# Log level.
# Possible values:
#   `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
# LOGGING_LEVEL=WARNING
```

You can find even more complex usage of `settings-doc` in [one of my other projects](https://github.com/radeklat/mqtt-influxdb-gateway/blob/main/README.md#environment-variables).

## Updating existing documentation

It is possible to generate documentation into an existing document. To fit with the heading structure, you can adjust the heading levels with `--heading-offset`. Additionally, you can specify the location where to generate the documentation with two marks set by `--between <START MARK> <END MARK>`.

Let's assume your `README.md` looks like this:

```markdown
# My app

This app is distributes as a docker image and configurable via environment variables. See the list below.

# Environment variables
<!-- generated env. vars. start -->
<!-- generated env. vars. end -->
```

When you run:

```shell script
settings-doc generate \
  --class src.settings.AppSettings \
  --output-format markdown \ 
  --update README.md \
  --between "<!-- generated env. vars. start -->" "<!-- generated env. vars. end -->" \
  --heading-offset 1
```

the updated `README.md` will get only the specified location overwritten:

```markdown
# My app

This app is distributes as a docker image and configurable via environment variables. See the list below.

# Environment variables
<!-- generated env. vars. start -->
## `LOGGING_LEVEL`

*Optional*, default value: `WARNING`

Log level.

### Examples

`WARNING`

### Possible values

`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
<!-- generated env. vars. end -->
```

# Advanced usage

## Rendering documentation in code

The `settings_doc.render()` function can be used to render the documentation in code. It returns a string with the rendered documentation. Using the [Minimal example](#minimal-example) from the command line usage, the code usage is as follows:

```python
from settings_doc import render, OutputFormat

print(
    render(
        class_name="AppSettings",
        module="src.settings",
        output_format=OutputFormat.MARKDOWN,
    )
)
```

## Custom templates

`settings-doc` comes with a few built-in templates. You can override them or write completely new ones.

To just modify the existing ones:
1. Copy the built-in templates into a new directory:
   ```shell script
   mkdir custom_templates
   settings-doc templates --copy-to custom_templates
   ```
2. Modify the template copies in `custom_templates` to suit your needs. You can keep only the modified ones as `settings-doc` always falls back to the built-in ones.
3. Use them when generating the documentation:
   ```shell script
   settings-doc generate \
     --class src.settings.AppSettings \
     --output-format dotenv \
     --templates custom_templates
   ```

To create new ones, create a folder and then a Jinja2 template with a file names `<OUTPUT_FORMAT>.jinja`. Then simply reference both in the command line options:

```shell script
mkdir custom_templates

echo "{{ field.description }}" > custom_templates/only_descriptions.jinja

settings-doc generate \
 --class src.settings.AppSettings \
 --output-format only_descriptions \
 --templates custom_templates
```

## Custom settings attributes in templates

By default, there are several variables available in all templates:
- `heading_offset` - the value of the `--heading-offset` option. Defaults to `0`.
- `fields` is a list of `str` / [`FieldInfo`](https://github.com/samuelcolvin/pydantic/blob/master/pydantic/fields.py) tuples. The string is the name of the settings attribute and the values come from `BaseSettings.model_fields.values()`. In other words, a list of individual settings fields and their names. If multiple classes are used to generate the documentation, `FieldInfo`s from all classes are collected into `fields`. The information about original classes is not retained.
- `classes` - a dictionary, where keys are the `BaseSettings` sub-classes and values are lists of extracted `FieldInfo`s of that class. This can be used for example to split individual classes into sections.

Extra parameters unknown to pydantic can be stored as a dict in the `json_schema_extra` attribute.

To access information from the `BaseSettings` classes, use the `classes` variable in the templates:

```jinja2
{% for cls, fields in classes.items() %}
# {{ cls.__name__ }}
{% endfor %}
```

## As a pre-commit hook

It's possible to use `settings-doc` as a pre-commit hook to keep your documentation up to date. There is one hook `id` per output format:
- `settings-doc-markdown`
- `settings-doc-dotenv`

There are two caveats:

1. You have to provide *all* the arguments (except `--output-format`) in the `args` section.
2. You have to provide `additional_dependencies`, specifying each package, that is imported in
your module. For example, if you use YAML loading for your settings, and you have `import yaml` in
your module, you have to specify it. Depending on how your imports are organized, you might need to
specify *all* of your dependencies.

Example `.pre-commit-config.yaml` section provided below:

```yaml
- repo: https://github.com/radeklat/settings-doc
  rev: '3.0.0'
  hooks:
    - id: settings-doc-markdown
      args:
        - '--module'
        - 'src.settings'
        - '--update'
        - 'README.md'
        - '--between'
        - "<!-- generated env. vars. start -->"
        - "<!-- generated env. vars. end -->"
        - '--heading-offset'
        - '1'
      additional_dependencies:
        - "pyyaml>=5.3.1"
```

You can use the same hook to check if the documentation is up-to-date in CI:

```shell
pip install pre-commit
pre-commit run --all-files settings-doc-markdown  # or other settings-doc-<output-format>
```

Consider caching the `~/.cache/pre-commit` environment cache for faster subsequent runs.

# Features overview

- Output into several formats with `--output-format`: markdown, dotenv
- Writes into stdout by default, which allows piping to other tools for further processing.
- Able to update specified file with `--update`, optionally between two given string marks with `--between`. Useful for keeping documentation up to date.
- Additional templates and default template overrides via `--templates`.

## Markdown

- Allows setting a `--heading-offset` to fit into existing documentation.
- Intelligently formats example values as:
  - Single line if all values fit within 75 characters.
  - List of values if all values won't fit on a single line.
  - List of `<VALUE>: <DESCRIPTION>` if example values are tuples of 1-2 items.

## .env

- Leaves environment variables commented if they have a default value as the app doesn't require them.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/radeklat/settings-doc",
    "name": "settings-doc",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0.0,>=3.8.1",
    "maintainer_email": null,
    "keywords": "documentation, environment variables, generated, markdown, BaseSettings",
    "author": "Radek L\u00e1t",
    "author_email": "radek.lat@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/ab/fc/9e65297a3368ec70681bd6805c274a476f5802ac30a228c12c2e06a5e0e1/settings_doc-4.3.1.tar.gz",
    "platform": null,
    "description": "<h1 align=\"center\" style=\"border-bottom: none;\">\u2699&nbsp;\ud83d\udcdd&nbsp;&nbsp;Settings&nbsp;Doc&nbsp;&nbsp;\ud83d\udcdd&nbsp;\u2699</h1>\n<h3 align=\"center\">A (command line) tool for generating Markdown documentation and .env files from <a href=\"\">pydantic_settings.BaseSettings</a>.</h3>\n\n<p align=\"center\">\n    <a href=\"https://app.circleci.com/pipelines/github/radeklat/settings-doc?branch=main\">\n        <img alt=\"CircleCI\" src=\"https://img.shields.io/circleci/build/github/radeklat/settings-doc\">\n    </a>\n    <a href=\"https://app.codecov.io/gh/radeklat/settings-doc/\">\n        <img alt=\"Codecov\" src=\"https://img.shields.io/codecov/c/github/radeklat/settings-doc\">\n    </a>\n    <a href=\"https://github.com/radeklat/settings-doc/tags\">\n        <img alt=\"GitHub tag (latest SemVer)\" src=\"https://img.shields.io/github/tag/radeklat/settings-doc\">\n    </a>\n    <img alt=\"Maintenance\" src=\"https://img.shields.io/maintenance/yes/2024\">\n    <a href=\"https://github.com/radeklat/settings-doc/commits/main\">\n        <img alt=\"GitHub last commit\" src=\"https://img.shields.io/github/last-commit/radeklat/settings-doc\">\n    </a>\n    <a href=\"https://pypistats.org/packages/settings-doc\">\n        <img alt=\"PyPI - Downloads\" src=\"https://img.shields.io/pypi/dm/settings-doc\">\n    </a>\n    <a href=\"https://github.com/radeklat/settings-doc/blob/main/LICENSE\">\n        <img alt=\"PyPI - License\" src=\"https://img.shields.io/pypi/l/settings-doc\">\n    </a>\n    <a href=\"https://www.python.org/doc/versions/\">\n        <img alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/settings-doc\">\n    </a>\n    <a href=\"https://pydantic.dev\">\n        <img src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json\" alt=\"Pydantic Version 2\" style=\"max-width:100%;\">\n    </a>\n</p>\n\nThe same way you are able to generate OpenAPI documentation from [`pydantic.BaseModel`](https://pydantic-docs.helpmanual.io/usage/models/), `settings-doc` allows you to generate documentation from [`pydantic_settings.BaseSettings`](https://docs.pydantic.dev/latest/api/pydantic_settings/).\n\nIt is powered by the [Jinja2](https://jinja.palletsprojects.com/en/latest/) templating engine and [Click](https://click.palletsprojects.com) framework. If you don't like the built-in templates, you can easily modify them or write completely custom ones. All attributes of the [`BaseSettings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) models are exposed to the templates.\n\n<!--\n    How to generate TOC from PyCharm:\n    https://github.com/vsch/idea-multimarkdown/wiki/Table-of-Contents-Extension\n-->\n[TOC levels=1,2 markdown formatted bullet hierarchy]: # \"Table of content\"\n\n# Table of content\n- [Installation](#installation)\n- [Usage](#usage)\n  - [Minimal example](#minimal-example)\n  - [Class auto-discovery](#class-auto-discovery)\n  - [Adding more information](#adding-more-information)\n  - [Updating existing documentation](#updating-existing-documentation)\n- [Advanced usage](#advanced-usage)\n  - [Rendering documentation in code](#rendering-documentation-in-code)\n  - [Custom templates](#custom-templates)\n  - [Custom settings attributes in templates](#custom-settings-attributes-in-templates)\n  - [As a pre-commit hook](#as-a-pre-commit-hook)\n- [Features overview](#features-overview)\n  - [Markdown](#markdown)\n  - [.env](#env)\n\n# Installation\n\n```\npip install settings-doc\n```\n\n# Command-line usage\n\nSee `settings-doc --help` for all options.\n\n## Minimal example\n\nLet's assume the following [`BaseSettings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) in `src/settings.py` of a project:\n\n```python\nfrom pydantic_settings import BaseSettings\n\nclass AppSettings(BaseSettings):\n    logging_level: str\n```\n\nYou can generate a Markdown documentation into stdout with:\n\n```shell script\nsettings-doc generate --class src.settings.AppSettings --output-format markdown\n```\n\nWhich will output:\n\n```markdown\n# `LOGGING_LEVEL`\n\n**Required**\n```\n\nSimilarly, you can generate a `.env` file for local development with:\n\n```shell script\nsettings-doc generate --class src.settings.AppSettings --output-format dotenv\n```\n\nWhich will output:\n\n```dotenv\nLOGGING_LEVEL=\n\n```\n\n## Class auto-discovery\n\nIf you have a module with a single settings class or want to load multiple classes at once as a source, you can also use the `--module` option. The following example works exactly like the one above and will use the `AppSettings` class automatically.\n\n```shell script\nsettings-doc generate --module src.settings --output-format dotenv\n```\n\nIf multiple classes contain a field with the same name, all instances will appear in the output.\n\n## Adding more information\n\nYou can add any extra field parameters to the settings. By default, `settings-doc` will utilise the default value, whether the parameter is required or optional, description, example value, and list of possible values:\n\n```python\nfrom pydantic_settings import BaseSettings, Field\n\nclass AppSettings(BaseSettings):\n    logging_level: str = Field(\n        \"WARNING\",\n        description=\"Log level.\",\n        examples=[\"WARNING\"],\n        possible_values=[\"DEBUG\", \"INFO\", \"WARNING\", \"ERROR\", \"CRITICAL\"],\n    )\n```\n\nWhich will generate the following markdown:\n\n```markdown\n# `LOGGING_LEVEL`\n\n*Optional*, default value: `WARNING`\n\nLog level.\n\n## Examples\n\n`WARNING`\n\n## Possible values\n\n`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`\n```\n\nor `.env` file:\n\n```dotenv\n# Log level.\n# Possible values:\n#   `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`\n# LOGGING_LEVEL=WARNING\n```\n\nYou can find even more complex usage of `settings-doc` in [one of my other projects](https://github.com/radeklat/mqtt-influxdb-gateway/blob/main/README.md#environment-variables).\n\n## Updating existing documentation\n\nIt is possible to generate documentation into an existing document. To fit with the heading structure, you can adjust the heading levels with `--heading-offset`. Additionally, you can specify the location where to generate the documentation with two marks set by `--between <START MARK> <END MARK>`.\n\nLet's assume your `README.md` looks like this:\n\n```markdown\n# My app\n\nThis app is distributes as a docker image and configurable via environment variables. See the list below.\n\n# Environment variables\n<!-- generated env. vars. start -->\n<!-- generated env. vars. end -->\n```\n\nWhen you run:\n\n```shell script\nsettings-doc generate \\\n  --class src.settings.AppSettings \\\n  --output-format markdown \\ \n  --update README.md \\\n  --between \"<!-- generated env. vars. start -->\" \"<!-- generated env. vars. end -->\" \\\n  --heading-offset 1\n```\n\nthe updated `README.md` will get only the specified location overwritten:\n\n```markdown\n# My app\n\nThis app is distributes as a docker image and configurable via environment variables. See the list below.\n\n# Environment variables\n<!-- generated env. vars. start -->\n## `LOGGING_LEVEL`\n\n*Optional*, default value: `WARNING`\n\nLog level.\n\n### Examples\n\n`WARNING`\n\n### Possible values\n\n`DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`\n<!-- generated env. vars. end -->\n```\n\n# Advanced usage\n\n## Rendering documentation in code\n\nThe `settings_doc.render()` function can be used to render the documentation in code. It returns a string with the rendered documentation. Using the [Minimal example](#minimal-example) from the command line usage, the code usage is as follows:\n\n```python\nfrom settings_doc import render, OutputFormat\n\nprint(\n    render(\n        class_name=\"AppSettings\",\n        module=\"src.settings\",\n        output_format=OutputFormat.MARKDOWN,\n    )\n)\n```\n\n## Custom templates\n\n`settings-doc` comes with a few built-in templates. You can override them or write completely new ones.\n\nTo just modify the existing ones:\n1. Copy the built-in templates into a new directory:\n   ```shell script\n   mkdir custom_templates\n   settings-doc templates --copy-to custom_templates\n   ```\n2. Modify the template copies in `custom_templates` to suit your needs. You can keep only the modified ones as `settings-doc` always falls back to the built-in ones.\n3. Use them when generating the documentation:\n   ```shell script\n   settings-doc generate \\\n     --class src.settings.AppSettings \\\n     --output-format dotenv \\\n     --templates custom_templates\n   ```\n\nTo create new ones, create a folder and then a Jinja2 template with a file names `<OUTPUT_FORMAT>.jinja`. Then simply reference both in the command line options:\n\n```shell script\nmkdir custom_templates\n\necho \"{{ field.description }}\" > custom_templates/only_descriptions.jinja\n\nsettings-doc generate \\\n --class src.settings.AppSettings \\\n --output-format only_descriptions \\\n --templates custom_templates\n```\n\n## Custom settings attributes in templates\n\nBy default, there are several variables available in all templates:\n- `heading_offset` - the value of the `--heading-offset` option. Defaults to `0`.\n- `fields` is a list of `str` / [`FieldInfo`](https://github.com/samuelcolvin/pydantic/blob/master/pydantic/fields.py) tuples. The string is the name of the settings attribute and the values come from `BaseSettings.model_fields.values()`. In other words, a list of individual settings fields and their names. If multiple classes are used to generate the documentation, `FieldInfo`s from all classes are collected into `fields`. The information about original classes is not retained.\n- `classes` - a dictionary, where keys are the `BaseSettings` sub-classes and values are lists of extracted `FieldInfo`s of that class. This can be used for example to split individual classes into sections.\n\nExtra parameters unknown to pydantic can be stored as a dict in the `json_schema_extra` attribute.\n\nTo access information from the `BaseSettings` classes, use the `classes` variable in the templates:\n\n```jinja2\n{% for cls, fields in classes.items() %}\n# {{ cls.__name__ }}\n{% endfor %}\n```\n\n## As a pre-commit hook\n\nIt's possible to use `settings-doc` as a pre-commit hook to keep your documentation up to date. There is one hook `id` per output format:\n- `settings-doc-markdown`\n- `settings-doc-dotenv`\n\nThere are two caveats:\n\n1. You have to provide *all* the arguments (except `--output-format`) in the `args` section.\n2. You have to provide `additional_dependencies`, specifying each package, that is imported in\nyour module. For example, if you use YAML loading for your settings, and you have `import yaml` in\nyour module, you have to specify it. Depending on how your imports are organized, you might need to\nspecify *all* of your dependencies.\n\nExample `.pre-commit-config.yaml` section provided below:\n\n```yaml\n- repo: https://github.com/radeklat/settings-doc\n  rev: '3.0.0'\n  hooks:\n    - id: settings-doc-markdown\n      args:\n        - '--module'\n        - 'src.settings'\n        - '--update'\n        - 'README.md'\n        - '--between'\n        - \"<!-- generated env. vars. start -->\"\n        - \"<!-- generated env. vars. end -->\"\n        - '--heading-offset'\n        - '1'\n      additional_dependencies:\n        - \"pyyaml>=5.3.1\"\n```\n\nYou can use the same hook to check if the documentation is up-to-date in CI:\n\n```shell\npip install pre-commit\npre-commit run --all-files settings-doc-markdown  # or other settings-doc-<output-format>\n```\n\nConsider caching the `~/.cache/pre-commit` environment cache for faster subsequent runs.\n\n# Features overview\n\n- Output into several formats with `--output-format`: markdown, dotenv\n- Writes into stdout by default, which allows piping to other tools for further processing.\n- Able to update specified file with `--update`, optionally between two given string marks with `--between`. Useful for keeping documentation up to date.\n- Additional templates and default template overrides via `--templates`.\n\n## Markdown\n\n- Allows setting a `--heading-offset` to fit into existing documentation.\n- Intelligently formats example values as:\n  - Single line if all values fit within 75 characters.\n  - List of values if all values won't fit on a single line.\n  - List of `<VALUE>: <DESCRIPTION>` if example values are tuples of 1-2 items.\n\n## .env\n\n- Leaves environment variables commented if they have a default value as the app doesn't require them.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A command line tool for generating Markdown documentation and .env files from pydantic BaseSettings.",
    "version": "4.3.1",
    "project_urls": {
        "Homepage": "https://github.com/radeklat/settings-doc"
    },
    "split_keywords": [
        "documentation",
        " environment variables",
        " generated",
        " markdown",
        " basesettings"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a547ea1ede80f52e768d1eb45ed78413c07582301fec179227831f13f37470ea",
                "md5": "1372c73e06163dfaa7a81a0cb801acd3",
                "sha256": "d0c9c4cf5b7510601153987f7cb80fc8ba9d6eed747a9ffcb034a186170767b4"
            },
            "downloads": -1,
            "filename": "settings_doc-4.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1372c73e06163dfaa7a81a0cb801acd3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0.0,>=3.8.1",
            "size": 14359,
            "upload_time": "2024-09-19T09:32:42",
            "upload_time_iso_8601": "2024-09-19T09:32:42.853340Z",
            "url": "https://files.pythonhosted.org/packages/a5/47/ea1ede80f52e768d1eb45ed78413c07582301fec179227831f13f37470ea/settings_doc-4.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "abfc9e65297a3368ec70681bd6805c274a476f5802ac30a228c12c2e06a5e0e1",
                "md5": "fa5f5fe0dafd27a3741eccb9621385f8",
                "sha256": "f15535c42f4330a454306ddebc79dd5c0acf45b1af7e87ab0cabc0b10e340148"
            },
            "downloads": -1,
            "filename": "settings_doc-4.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "fa5f5fe0dafd27a3741eccb9621385f8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0.0,>=3.8.1",
            "size": 16160,
            "upload_time": "2024-09-19T09:32:44",
            "upload_time_iso_8601": "2024-09-19T09:32:44.165407Z",
            "url": "https://files.pythonhosted.org/packages/ab/fc/9e65297a3368ec70681bd6805c274a476f5802ac30a228c12c2e06a5e0e1/settings_doc-4.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-19 09:32:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "radeklat",
    "github_project": "settings-doc",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "circle": true,
    "lcname": "settings-doc"
}
        
Elapsed time: 9.57338s