<h1 align="center" style="border-bottom: none;">⚙ 📝 Settings Doc 📝 ⚙</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 \ud83d\udcdd Settings Doc \ud83d\udcdd \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"
}