Adds the Optional type-hint to arguments where the default value is None
Project description
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 linting.
- 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 [path] (path is an optional argument).
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.2.0 # 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 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file auto-optional-0.2.1.tar.gz.
File metadata
- Download URL: auto-optional-0.2.1.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.8.12 Linux/5.8.0-1042-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68c802dc132b6713d9a6d9dd13f7c66d6862b7d668f71468eea0d2131ec4ecf4
|
|
| MD5 |
cfc36ba4f9e50ad8bcde8ef10d54421f
|
|
| BLAKE2b-256 |
665f877a81f2b0182062176e02b321070f6a39b0c73f8e6e3894abfe934b23db
|
File details
Details for the file auto_optional-0.2.1-py3-none-any.whl.
File metadata
- Download URL: auto_optional-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.11 CPython/3.8.12 Linux/5.8.0-1042-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf151afd2b8d3cfdd665fe0054e234000e7899902a570421e5865b8e1f070492
|
|
| MD5 |
a0f442f47bfb318c004aa34e107aeeac
|
|
| BLAKE2b-256 |
abb7444b47c7bd511a5031297742feacd6d3e2b5e43c225662894c6da4a0ebe9
|