Skip to main content

auto-optional

Logo

auto-optional: adds the Optional type-hint to arguments where the default value is None

actions batch pypi python versions codecov License: MIT Code style: black


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 None parameter implies an Optional type.
  • 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 Optional are supported, that means both;
    • Union[X, None]
    • x | None (allowed since python 3.10+).
  • Existing imports are reused.
    • import as and from 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.

  • There is no exclude (for file patterns) option yet [#2]
  • There is no ignore (for code lines) option yet [#3]
  • Code is aways read and written as UTF-8 (which is accurate most of the time). [#4]
  • There is no diff or check command yet for a dry-run or linting. [#5]

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)

Source distribution for auto-optional 0.3.2
File Size Uploaded
auto-optional-0.3.2.tar.gz 7.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for auto-optional 0.3.2
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page