Skip to content

Commit

Permalink
Added "freeze" function to create immutable copies of mutable objects.
Browse files Browse the repository at this point in the history
  • Loading branch information
ndenny committed Jun 10, 2025
1 parent 425f193 commit 8749dc0
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions lib/Bastion/Common.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@
import pathlib
import logging
import urllib
from functools import singledispatch
from types import MappingProxyType

try:
from frozendict import frozendict
except ImportError:
frozendict = lambda d: MappingProxyType(d)

from typing import Any, FrozenSet

Expand Down Expand Up @@ -487,3 +494,26 @@ def asInteger(x):

def asNumeric(x):
return float(x)

@singledispatch
def freeze(obj):
"""
An outer function that takes a generic object and attempts to build an immutable version of the given object.
"""
return obj # default: assume immutable

@freeze.register
def _(obj: dict):
return frozendict({freeze(k): freeze(v) for k, v in obj.items()})

@freeze.register
def _(obj: list):
return tuple(freeze(i) for i in obj)

@freeze.register
def _(obj: set):
return frozenset(freeze(i) for i in obj)

@freeze.register
def _(obj: tuple):
return tuple(freeze(i) for i in obj)

0 comments on commit 8749dc0

Please sign in to comment.