diff --git a/freezedata/__init__.py b/freezedata/__init__.py index 672d00b..f743f40 100644 --- a/freezedata/__init__.py +++ b/freezedata/__init__.py @@ -1,8 +1,8 @@ import os from .freezedata import freeze_data -DIR = os.path.dirname(__file__) -README = os.path.join(DIR, 'README.rst') + +__all__ = ['freeze_data'] __doc__ = """ Recursively convert lists to tuples, sets to frozensets, dicts to mappingproxy etc. @@ -32,5 +32,3 @@ >> TypeError: unhashable type: 'mappingproxy' """ -del os, DIR, README -del freezedata diff --git a/freezedata/freezedata.py b/freezedata/freezedata.py index 8a1d52f..d7fbddd 100644 --- a/freezedata/freezedata.py +++ b/freezedata/freezedata.py @@ -1,8 +1,20 @@ import types from collections import namedtuple - -def freeze_data(obj, *, allow=frozenset()): +if not hasattr(types, "MappingProxyType"): + # to support Python2 platform + try: + from frozen_dict import FrozenDict as MappingProxyType + except ImportError: + try: + from frozendict import frozendict as MappingProxyType + except ImportError: + # use default dict instead (making more sense then raising exception) + MappingProxyType = dict + + types.MappingProxyType = MappingProxyType + +def freeze_data(obj, allow=frozenset()): """Convert 'obj' recursively to a read-only object but selectively allow functions, modules and other hashables, which may not be read-only. This means that recursively: @@ -48,11 +60,10 @@ class instances (beside from built-in immutables like 9, "er", 9.7 etc.) will ra if isinstance(obj, types.ModuleType): return freeze_class_or_istance_or_module(obj, allow=allow) else: - print(123) return freeze_data_inner(obj, allow=allow) -def freeze_data_inner(obj, *, allow=frozenset()): +def freeze_data_inner(obj, allow=frozenset()): # check type and recursively return a new read-only object if isinstance(obj, (str, int, float, bytes, type(None), bool)): return obj diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c53830a --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +frozendict \ No newline at end of file