auto-optional
auto-optional: adds the Optional type-hint to arguments where the default value is None
Documentation: auto-optional.daanluttik.nl
Source Code: github.com/luttik/auto-optional
What does auto-optional do
The basic purpose of auto-optional is ensuring that whenever a default argument is None the type annotation is Optional.
For example:
def foo(bar: str = None):
...
Would turn into
from typing import Optional
def foo(bar: Optional[str] = None):
...
Why would you want this
- Easily modify external libraries that didn't pay attention to proper use of optional to improve mypy lintingf.
- Force consistency in your own code-base:
Enforcing that
Noneparameter implies anOptionaltype. - Explicit is better than implicit — pep 20
In the media:
auto-optional was covered on PythonBytes #251
I love these little tools that you can run against your code that will just reformat them to be better.
— Michael Kennedy
Install
Install with pip install auto-optional.
Run
After installing you can run auto-optional using auto-optional [paths...]
(if no path is provided it'll process the current working directory).
pre-commit
You can run auto-optional via pre-commit.
Add the following text to your repositories .pre-commit-config.yaml:
repos:
- repo: https://github.com/luttik/auto-optional
rev: v0.3.1 # The version of auto-optional to use
hooks:
- id: auto-optional
Things of note
Things that are handled well
- The alternatives to
Optionalare supported, that means both;Union[X, None]x | None(allowed since python 3.10+).
- Existing imports are reused.
import asandfrom typing import ...statements are properly handled.
Things that need improvement
For all these points you can leave a thumbs-up if you want it. Also, I welcome pull-requests for these issues.
Metadata
Release files for auto-optional 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| auto-optional-0.3.2.tar.gz | 7.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| auto_optional-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.6 kB
Release files / auto-optional-0.3.2.tar.gz
| Download URL | auto-optional-0.3.2.tar.gz |
|---|---|
| Size | 7.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dcd2af973badd67a89f1bef021a50b298882fc95935739a8818b43c5942118d8
|
|
BLAKE2b-256 checksum How to use checksums |
8f006b9c939c097e7d0ed0235213c87055807e29dad031b6e27a0f2e82e3cc54
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.8.12 Linux/5.11.0-1025-azure
|
Release files / auto_optional-0.3.2-py3-none-any.whl
| Download URL | auto_optional-0.3.2-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
19f9a368b1397db46bbb96701315c9799e11811c3a9a295a62282a4b68a1e01e
|
|
BLAKE2b-256 checksum How to use checksums |
fdf82a44b9120478af2cbf3da9171e2979290c3560cae55bbb4b9381229a87f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.1.12 CPython/3.8.12 Linux/5.11.0-1025-azure
|