Skip to main content

Validation library

Project description

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

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

pypermissive-1.1.3.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypermissive-1.1.3-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file pypermissive-1.1.3.tar.gz.

File metadata

  • Download URL: pypermissive-1.1.3.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.0 CPython/3.12.7 Linux/6.11.0-24-generic

File hashes

Hashes for pypermissive-1.1.3.tar.gz
Algorithm Hash digest
SHA256 aade024dc48034d514e0ac2af2b905f5c36df96b53a4cdfeaa77af26b665917e
MD5 d3f3d99a130c084f11c132bb0c718126
BLAKE2b-256 9d1271e3d5c146c7d6185e3cc04dae342c1fccb3ee1beee9ea02a3f81ef5b3bb

See more details on using hashes here.

File details

Details for the file pypermissive-1.1.3-py3-none-any.whl.

File metadata

  • Download URL: pypermissive-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.0.0 CPython/3.12.7 Linux/6.11.0-24-generic

File hashes

Hashes for pypermissive-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f2ca65a88f7c8e8edf5b8bf379d7a1838ec1ea938cb10140b2e64e51e8f83be4
MD5 e42b98ff19ff6e229ecd7384a65d32fc
BLAKE2b-256 8a06a6c7010a1fd296d0e1d2d15aa5e5dbc9496b3b8463bb0262f38921ae36c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page