MergeableModel
MergeableModel is a frozen pydantic v2 base class with the same merge
interface as MergeableMixin.
Requirements
pydantic v2 must be installed:
pip install "pleroma[pydantic]"
Basic usage
from pleroma.contrib.pydantic import MergeableModel
class AppSettings(MergeableModel):
debug: bool | None = None
workers: int | None = None
log_level: str | None = None
defaults = AppSettings(debug=False, workers=4, log_level="INFO")
overrides = AppSettings(workers=8)
result = AppSettings.merge([defaults, overrides])
# AppSettings(debug=False, workers=8, log_level='INFO')
Frozen by default
All MergeableModel instances are immutable. Attempting to assign a field
after construction raises pydantic.ValidationError:
s = AppSettings(workers=4)
s.workers = 8 # raises ValidationError
merge and merged_with always return a new instance — they never mutate
existing ones.
Same interface as MergeableMixin
All methods — merge, merged_with, _iter_instances, and _merge_two —
behave identically to their MergeableMixin counterparts.
# class method
AppSettings.merge([defaults, overrides], overwrite_none=True)
# instance shorthand
defaults.merged_with(overrides)
The predefined iteration strategies work with
MergeableModel in exactly the same way as with MergeableMixin:
from pleroma import iter_reversed
from pleroma.contrib.pydantic import MergeableModel
class PrioritySettings(MergeableModel):
priority: int
value: str | None = None
@classmethod
def _iter_instances(cls, instances):
return iter(sorted(instances, key=lambda s: s.priority))