An enhanced version of Pydantic's BaseModel, allowing for advanced model manipulations.
Project description
# Pydantic-Set-Operations
The Pydantic-Set-Operations package provides an enhanced version of Pydantic's BaseModel, allowing for advanced model manipulations, such as field unions, exclusions, and intersections. This subclass of BaseModel introduces bitwise operations (like |, &, and -) for combining, intersecting, and excluding fields between models.
Key Model Features
- Field Union (
unionmethod): Combines fields from two models, prioritizing fields from the initiating model if overlaps exist. - Field Exclusion (
omitmethod): Creates a new model excluding specified fields or fields present in another model. - Field Intersection (
pickmethod): Creates a model containing only fields shared between two models.
Key Instance Features
- Field Union (
|operator): Returns an instance combining fields from both instances. - Field Exclusion (
-operator): Returns an instance excluding fields present in another instance. - Field Intersection (
&operator): Returns an instance containing only fields shared between two instances.
API Methods
union
Creates a new model by merging fields from the current model (self) and another ExtendedBaseModel. In cases of field overlap, fields from the current model are prioritized.
Parameters
_name(str): The name for the resulting model.other(ExtendedBaseModel): The model to merge fields with.
Returns
BaseModel: A new model containing fields from both models.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class ModelA(ExtendedBaseModel):
name: str
age: int
class ModelB(ExtendedBaseModel):
age: float
location: str
MergedModel = ModelA.union("MergedModel", ModelB)
merged_instance = MergedModel(name="Alice", age=30, location="Paris")
print(merged_instance.dict())
# Output: {'name': 'Alice', 'age': 30, 'location': 'Paris'}
omit
Creates a new model by excluding specified fields from the current model.
Parameters
_name(str): The name for the resulting model.*excluded_fields(str): Fields to exclude from the model.
Returns
BaseModel: A new model without the specified fields.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class Model(ExtendedBaseModel):
id: int
name: str
email: str
NoEmailModel = Model.omit("NoEmailModel", "email")
no_email_instance = NoEmailModel(id=1, name="Alice")
print(no_email_instance.dict())
# Output: {'id': 1, 'name': 'Alice'}
pick
Creates a new model containing only the specified fields.
Parameters
_name(str): The name for the resulting model.*included_fields(str): Fields to include in the model.
Returns
BaseModel: A new model containing only the specified fields.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class Model(ExtendedBaseModel):
username: str
password: str
email: str
UsernameEmailModel = Model.pick("UsernameEmailModel", "username", "email")
user_instance = UsernameEmailModel(username="alice", email="alice@example.com")
print(user_instance.dict())
# Output: {'username': 'alice', 'email': 'alice@example.com'}
& Operator (intersection)
The & operator between two ExtendedBaseModel instances creates a model containing only fields common to both instances, taking values from the initiating model.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class ModelA(ExtendedBaseModel):
name: str
age: int
class ModelB(ExtendedBaseModel):
age: int
location: str
intersection = ModelA(name="Alice", age=30) & ModelB(age=25, location="Paris")
print(intersection.dict())
# Output: {'age': 30}
- Operator (exclusion)
The - operator excludes fields present in another instance of ExtendedBaseModel.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class ModelA(ExtendedBaseModel):
id: int
username: str
password: str
class ModelB(ExttendedBaseModel):
password: str
exclusion = ModelA(id=1, username="user123", password="pass") - ModelB(password="pass")
print(exclusion.dict())
# Output: {'id': 1, 'username': 'user123'}
| Operator (exclusion)
The | operator merges fields from two models, prioritizing values from the initiating model.
Example usage
from pydantic_set_operations import ExtendedBaseModel
class ModelA(ExtendedBaseModel):
first_name: str
last_name: str
class ModelB(ExtendedBaseModel):
last_name: str
age: int
union = ModelA(first_name="Alice", last_name="Johnson") | ModelB(last_name="Smith", age=30)
print(union.dict())
# Output: {'first_name': 'Alice', 'last_name': 'Johnson', 'age': 30}
Summary
Pydantic-Set-Operations offers a flexible way to perform advanced model operations, enabling complex field manipulations through familiar bitwise operators. With features like union, exclusion, and intersection, this package is ideal for projects that require dynamic model restructuring or filtering based on specific fields.
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 pydantic_set_operations-1.0.0.tar.gz.
File metadata
- Download URL: pydantic_set_operations-1.0.0.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcdcd30018e69f49ed394d4f24231b91f04f8b50bae07382f5ed89be9b353ba1
|
|
| MD5 |
d41235250ea2b15da8c5300e78ad9ce9
|
|
| BLAKE2b-256 |
01b26bb328479fe8b6c55b964848185e2a218f37e31e5a5854bd82d8ca36bb48
|
File details
Details for the file pydantic_set_operations-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pydantic_set_operations-1.0.0-py3-none-any.whl
- Upload date:
- Size: 3.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb1076349f26908b233cb7a1a91a5c2c6e3ba64c891efcb1c895b7d18efb06f1
|
|
| MD5 |
29c1edae536b55cbb80272013676e51d
|
|
| BLAKE2b-256 |
163227547b7ca1c741d5f64c70b721ff0bb24730375f9f0a9901494e9870b409
|