miyamo2 / py_nullable

Python's None Wrapper, inspired by java.util.Optional

Home Page:https://pypi.org/project/py-nullable/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

py_nullable

PyPI - Python Version PyPI GitHub release (latest by date) PyPI - Wheel GitHub Workflow Status (with event) Coverage GitHub Downloads

Introduction

Python's None Wrapper, inspired by java.util.Optional

Document(latest version only)

Getting Started

Installing

install from PyPI with:

python -m pip install py_nullable

install from source with:

git clone https://github.com/miyamo2theppl/py_nullable.git
cd py_nullable
python -m pip install .

Simple Usage

if you want to get value.

from py_nullable import Nullable

nullable: Nullable[str] = Nullable[str]("some string")
if nullable.isPresent():
    print(nullable.get()) # Prints some string

if you want to generate a new Nullable from an existing Nullable with the mapping function.

from typing import Callable
from py_nullable import Nullable

nullable: Nullable[str] = Nullable[str]("1234")

callback: Callable[[str], int] = lambda x: int(x) * 2
result: Nullable[int] = nullable.map(callback)

print(result.get()) # Prints 2468

if you want to refactor the return value from Optional[T] to Nullable[T].

from yourpackage import YourClass
from py_nullable import Nullable, nullable_wrap


in_memory_db: dict[str, YourClass] = {"A001": YourClass("foo")}


@nullable_wrap
def find_by_id(id: str) -> Optional[YourClass]:
    return in_memory_db.get(id)


nullable: Nullable[YourClass] = find_by_id("B001")
print(nullable.isEmpty()) # Prints True

Contributing

Create a feature branch

git checkout -b feature_{example}

Set up your environment

python -m venv .venv
.venv/bin/activate
pip install -r dev_requirements.txt
pip install -e .

Running Tests

pytest --cov py_nullable --cov-branch --cov-report=html

About

Python's None Wrapper, inspired by java.util.Optional

https://pypi.org/project/py-nullable/

License:MIT License


Languages

Language:Python 100.0%