Skip to main content

Permissive Path


PyPermissive

tests Python 3.x PyPI Downloads License

Validation library in Python, modeled after Pydantic


Example

Inherit from BaseModel and describe required types.
PyPermissive supports validation for primitive types:

class Employee(BaseModel):
    employee_id: int
    name: str
    salary: float
    elected_benefits: bool = False
    
employee = Employee(
    employee_id=1,
    name="Foo Bar",
    salary=123_000.00,
    elected_benefits=True,
)

collections:

class Book(BaseModel):
    characters: dict[str, str]
    chapters: list[str]
    
book = Book(
    characters={"Pelleas": "he", "Melisande": "she"},
    chapters=["Beginning", "Middle", "End"]
)

unions, classes and fields.


Fields are similar to pydantic with one caveat: you need to give value type explicitly:

class User(BaseModel):
    name: Field(type=str, default="Jimmie", frozen=True)
    age: Field(type=int, gt=18, lt=35)
    id: Field(type=UUID, default_factory=uuid4)
    email: Field(type=str, pattern=r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+$")
    nickname: Field(type=str, min_length=6, max_length=12)
    PIN: Field(type=str, field_validator=lambda x: x.isdigit())

You can also use decorators:
@ComputedField (invoke only from instances) and @ComputedClassField (invoke both on class and instance level)

class Thesis:
    BAZZ = ["1", "2", "3"]

    def __init__(self):
        self.fizz = [1, 2, 3, 4, 5]
        self.buzz = [6, 7, 8, 9]

    @ComputedField
    def foo(self):
        return [val for val in itertools.product(self.fizz, self.buzz)]

    @ComputedClassField
    def bar(self):
        return list(itertools.permutations(self.BAZZ))

    

The library supports @validate_call that checks both argument and return types:

@validate_call
def some_func(delimiter: str, count: int, numbers: list[int]) -> str:
    return (delimiter * count).join([str(d) for d in numbers])

@Interface checks on a class-definition level if the decorated class implements all described methods with the specified signature

class MyInterface:
    def pow(self, x: int, y: int) -> int: ...


@Interface(MyInterface)
class Powerful:
    def pow(self, x: int, y: int) -> int:
        return x ** y
class OtherInterface:
    def moo(self): ...


@Interface(MyInterface, OtherInterface)
class Frankenstein:
    def pow(self, x: int, y: int) -> int:
        return x ** y

    def moo(self):
        return "Yeah Mr. White..."

Metadata

Release files for pypermissive 1.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pypermissive 1.1.3
File Size Uploaded
pypermissive-1.1.3.tar.gz 5.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pypermissive 1.1.3
File Interpreter ABI Platform
pypermissive-1.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 11.3 kB

Release files / pypermissive-1.1.3.tar.gz

Download URL pypermissive-1.1.3.tar.gz
Size 5.0 kB
Tags Source
SHA-256 checksum
How to use checksums
aade024dc48034d514e0ac2af2b905f5c36df96b53a4cdfeaa77af26b665917e
BLAKE2b-256 checksum
How to use checksums
9d1271e3d5c146c7d6185e3cc04dae342c1fccb3ee1beee9ea02a3f81ef5b3bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.0 CPython/3.12.7 Linux/6.11.0-24-generic

Release files / pypermissive-1.1.3-py3-none-any.whl

Download URL pypermissive-1.1.3-py3-none-any.whl
Size 6.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2ca65a88f7c8e8edf5b8bf379d7a1838ec1ea938cb10140b2e64e51e8f83be4
BLAKE2b-256 checksum
How to use checksums
8a06a6c7010a1fd296d0e1d2d15aa5e5dbc9496b3b8463bb0262f38921ae36c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.0.0 CPython/3.12.7 Linux/6.11.0-24-generic

Release history Release notifications | RSS feed

This release

1.1.3 This release

2 release files

1.1.2

2 release files

1.0.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