Metadata-Version: 2.1
Name: frozenjsondict
Version: 1.0.0
Summary: Immutable JSON dictionary with hash functionality
Home-page: https://github.com/comprehensivetech/frozenjsondict
Author: Carlos Ruiz Lantero
Author-email: carlos.ruiz.lantero@comprehensivetech.co.uk
Maintainer: Carlos Ruiz Lantero
Maintainer-email: carlos.ruiz.lantero@comprehensivetech.co.uk
License: UNKNOWN
Platform: UNKNOWN
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Provides-Extra: test
Requires-Dist: black (==20.8b1) ; extra == 'test'
Requires-Dist: flake8 (==3.9.0) ; extra == 'test'
Requires-Dist: pytest (==6.2.3) ; extra == 'test'
Requires-Dist: pytest-cov (==2.11.1) ; extra == 'test'

![Test](https://github.com/comprehensivetech/frozenjsondict/workflows/Test/badge.svg?branch=master)

# frozenjsondict

Inspired in [https://github.com/slezica/python-frozendict](https://github.com/slezica/python-frozendict), this variation
takes it one step further and lets you build immutable JSON dictionaries that can be used as dictionary keys and set
elements.

Its hash function uses JSON serialization, so you can use it as long as your data is JSON-serializable.

Example of usage:

```python
from frozenjsondict import FrozenJsonDict

fjd_1 = FrozenJsonDict({"a": [1, 2, 3]})
fjd_2 = FrozenJsonDict({"b": [3, 4], "c": [6]})
fjd_3 = FrozenJsonDict({"c": [6], "b": [3, 4]})

# Support for common interfaces
"a" in fjd_1  # True
fjd_1["a"]  # [1, 2, 3]
fjd_1.a  # [1, 2, 3]
len(fjd_2)  # 2
fjd_2 == fjd_3  # True
for key, value in fjd_2.items():
    print(f"{key}: {value}")
    # b: [3, 4]
    # c: [6]

# Usage as dictionary key
fjd_dict = dict()
fjd_dict[fjd_1] = 1
fjd_dict[fjd_2] = 2
fjd_dict[fjd_3] = 3
print(fjd_dict)
# {<FrozenJsonDict {"a":[1,2,3]}>: 1, <FrozenJsonDict {"b":[3,4],"c":[6]}>: 3}

# Usage as set element
fjd_set = set()
fjd_set.add(fjd_1)
fjd_set.add(fjd_2)
fjd_set.add(fjd_3)
print(fjd_set)
# {<FrozenJsonDict {"a":[1,2,3]}>, <FrozenJsonDict {"b":[3,4],"c":[6]}>}
```

