Python's None Wrapper, inspired by java.util.Optional
Project description
py_nullable
Introduction
Python's None Wrapper, inspired by java.util.Optional
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
py_nullable-0.3.2.tar.gz
(10.7 kB
view hashes)
Built Distribution
Close
Hashes for py_nullable-0.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 852b6364536fee34c5310164ed951775b9b2c61847e8dcec6e893fc8686934b9 |
|
MD5 | 5f9f2ea4040b15a381189211bfdba684 |
|
BLAKE2b-256 | 8eaca8c3f7963388d325fd554b29b8aa99ce9e6a528c099d1b2d1942f9664401 |