Validation library
Project description
PyPermissive
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aade024dc48034d514e0ac2af2b905f5c36df96b53a4cdfeaa77af26b665917e
|
|
| MD5 |
d3f3d99a130c084f11c132bb0c718126
|
|
| BLAKE2b-256 |
9d1271e3d5c146c7d6185e3cc04dae342c1fccb3ee1beee9ea02a3f81ef5b3bb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2ca65a88f7c8e8edf5b8bf379d7a1838ec1ea938cb10140b2e64e51e8f83be4
|
|
| MD5 |
e42b98ff19ff6e229ecd7384a65d32fc
|
|
| BLAKE2b-256 |
8a06a6c7010a1fd296d0e1d2d15aa5e5dbc9496b3b8463bb0262f38921ae36c4
|