Home

Awesome

auto-optional

<img src="https://raw.githubusercontent.com/Luttik/auto-optional/main/docs/assets/images/logo-with-text.svg" style="width: 100%; margin: 32pt 0" alt="Logo"> <p align="center"> auto-optional: adds the Optional type-hint to arguments where the default value is None </p> <p align="center"> <a href="https://github.com/Luttik/auto-optional/actions?query=workflow%3ACI+branch%3Amaster"> <img src="https://github.com/luttik/auto-optional/workflows/CI/badge.svg" alt="actions batch"> </a> <a href="https://pypi.org/project/auto-optional/"> <img src="https://badge.fury.io/py/auto-optional.svg" alt="pypi"> </a> <a href="https://pypi.org/project/auto-optional/"> <img src="https://shields.io/pypi/pyversions/auto-optional" alt="python versions"> </a> <a href="https://codecov.io/gh/luttik/auto-optional"> <img src="https://codecov.io/gh/Luttik/auto-optional/branch/main/graph/badge.svg" alt="codecov"> </a> <a href="https://github.com/Luttik/auto-optional/blob/main/LICENSE"> <img src="https://shields.io/github/license/luttik/auto-optional" alt="License: MIT"> </a> <a href="https://github.com/psf/black"> <img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black"> </a> </p>

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

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

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.