maypy 1.0.0

Creator: bradpython12

Last updated:

Add to Cart

Description:

maypy 1.0.0

Source Code: https://github.com/MLetrone/maypy
documentation: https://mletrone.github.io/maypy



Maypy is python implementation of the well known Java Optional API.
It's designed to help you handle potential None values, reducing error from NoneType.
Features :

Brings functional programming
Easy to use
Fully typed and compatible with mypy !
Lightweight


installation
pip install maypy

That's all ! Ready to use
Usage
Description

It's not rare to handle return from function that maybe either a value or None.
Like .get from a dictionary, results from api or ORM etc.
With no more if value is None with MayPy, encapsulate your value and do what you want to.
MayPy brings Maybe a wrapper (container), it is either empty if the value passed was None or valuated,
in this case it contains the value, and we can perform operation on it.

Examples
Checking value presence:
from maypy import Maybe

assert Maybe.empty().is_empty()
assert Maybe.of(None).is_empty()
assert Maybe.of("value").is_present()

Using chaining operation over wrapped value:
from maypy import Maybe
from typing import List, Optional


def convert_to_celsius(fahrenheit: float) -> float:
return (fahrenheit - 32) * 5 / 9


fahrenheit_temperatures: List[Optional[float]] = [32.45, None, 26.6, 100, 72, None, 10]

for temp in fahrenheit_temperatures:
Maybe.of(temp).map(convert_to_celsius).filter(lambda celsius: celsius > 0)

Defining return from database result:
from dataclasses import dataclass
from enum import StrEnum, unique

from maypy import Maybe
from pydantic import BaseModel
from sqlalchemy.orm import Session


@unique
class Gender(StrEnum):
MALE = "M"
FEMALE = "F"
UNKNOWN = "X"


@dataclass
class User:
id: str
email: str
gender: Gender


class UserEntity(BaseModel):
id: str
email: str
gender: str

class Config:
orm_mode = True


def get_user(db: Session, user_id: str) -> Maybe[User]:
return Maybe.of(db.query(UserEntity).filter(UserEntity.id == user_id).first()).map(to_domain)


def to_domain(user_dto: UserEntity) -> User:
return User(
id=user_dto.id,
email=user_dto.email,
gender=Gender(user_dto.gender)
)


user = get_user(db, "481efz4x1d").or_else_raise(Exception("User id<481efz4x1d> not found"))

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.