Module mongoset.model.immutable_arguments
Expand source code
class _Unset:
pass
class Immutable:
"""
Set a field of an ObjectModel to this class to make it immutable.
Examples:
class ExampleObject(ObjectModel):
x: int = Immutable(5)
y: str = Immutable()
"""
def __init__(self, default_val=_Unset):
self.default_val = default_val
def _add_immutables_to_namespace(bases: list, namespace: dict) -> dict:
immutables = {}
# Add all immutables in this class's bases to this one
for base in bases:
if "__immutables__" in base.__dict__:
immutables.update(base.__immutables__)
# Check each annotation to see if it's immutable
if "__annotations__" in namespace:
for var_name, var_type in namespace["__annotations__"].items():
if var_name in namespace:
# The variable actually has a value (only way it could be immutable)
var_value = namespace[var_name]
if isinstance(var_value, Immutable):
# The variable's value is the Immutable class
if var_value.default_val == _Unset:
# If there is no default value, delete the variable from the namespace
del namespace[var_name]
else:
# Otherwise set the value in the namespace with the correct value so pydantic gets it
namespace[var_name] = var_value.default_val
# Add this new immutable to the dict
immutables.update({var_name: var_value})
namespace.update({"__immutables__": immutables})
return namespace
Classes
class Immutable (default_val=mongoset.model.immutable_arguments._Unset)-
Set a field of an ObjectModel to this class to make it immutable.
Examples
class ExampleObject(ObjectModel): x: int = Immutable(5) y: str = Immutable()
Expand source code
class Immutable: """ Set a field of an ObjectModel to this class to make it immutable. Examples: class ExampleObject(ObjectModel): x: int = Immutable(5) y: str = Immutable() """ def __init__(self, default_val=_Unset): self.default_val = default_val