# Path: ckan_api_client/utils.py
# def freeze(obj):
#     """
#     Returns the "frozen" version of a mutable type.
# 
#     :raises TypeError:
#         if a frozen version for that object doesn't exist
#     """
#     if obj is None:
#         return None
#     if isinstance(obj, (basestring, int, float, bool)):
#         return obj
#     if isinstance(obj, dict):
#         return FrozenDict(obj)
#     if isinstance(obj, list):
#         return FrozenList(obj)
#     if isinstance(obj, tuple):
#         return FrozenTuple(obj)
#     raise TypeError("I don't know how to freeze this!")
# 
# class FrozenDict(MutableMapping):
#     """
#     Frozen dictionary.
#     Acts as a read-only dictionary, preventing changes
#     and returning frozen objects when asked for values.
#     """
# 
#     def __init__(self, *a, **kw):
#         self.__wrapped = dict(*a, **kw)
# 
#     def __getitem__(self, name):
#         return freeze(self.__wrapped[name])
# 
#     def __setitem__(self, name, value):
#         raise TypeError("FrozenDict doesn't support item assignment")
# 
#     def __delitem__(self, name):
#         raise TypeError("FrozenDict doesn't support item deletion")
# 
#     def __iter__(self):
#         return iter(self.__wrapped)
# 
#     def __len__(self):
#         return len(self.__wrapped)
# 
# class FrozenList(FrozenSequence):
#     """Immutable list-like."""
#     pass


import pytest
from ckan_api_client.utils import freeze, FrozenDict, FrozenList



def test_frozendict():
    my_dict = {
        'key': 'DEFAULT',
    }


# Path: ckan_api_client/utils.py
# def freeze(obj):
#     """
#     Returns the "frozen" version of a mutable type.
# 
#     :raises TypeError:
#         if a frozen version for that object doesn't exist
#     """
#     if obj is None:
#         return None
#     if isinstance(obj, (basestring, int, float, bool)):
#         return obj
#     if isinstance(obj, dict):
#         return FrozenDict(obj)
#     if isinstance(obj, list):
#         return FrozenList(obj)
#     if isinstance(obj, tuple):
#         return FrozenTuple(obj)
#     raise TypeError("I don't know how to freeze this!")
# 
# class FrozenDict(MutableMapping):
#     """
#     Frozen dictionary.
#     Acts as a read-only dictionary, preventing changes
#     and returning frozen objects when asked for values.
#     """
# 
#     def __init__(self, *a, **kw):
#         self.__wrapped = dict(*a, **kw)
# 
#     def __getitem__(self, name):
#         return freeze(self.__wrapped[name])
# 
#     def __setitem__(self, name, value):
#         raise TypeError("FrozenDict doesn't support item assignment")
# 
#     def __delitem__(self, name):
#         raise TypeError("FrozenDict doesn't support item deletion")
# 
#     def __iter__(self):
#         return iter(self.__wrapped)
# 
#     def __len__(self):
#         return len(self.__wrapped)
# 
# class FrozenList(FrozenSequence):
#     """Immutable list-like."""
#     pass


# Path: ckan_api_client/tests/unit/test_frozen_objects.py
import pytest
from ckan_api_client.utils import freeze, FrozenDict, FrozenList




def test_frozendict():
    my_dict = {
        'key': 'DEFAULT',
    }


    my_frozen_dict = freeze(my_dict)