Releases: mewwts/addict
freeze/unfreeze
Calling .freeze() forbids getting/setting missing keys. Use .unfreeze() to undo. Ref #121, #130. Thanks to @sumukhbarve.
Add support for `|` and `|=`
Releasing with changes from 8181a94. On PyPi.
Add LICENSE and tests to releases
Proper support for subclassing
In this release it's easier / better to inherit from a Dict
instance. Thanks to @MisterVladimir for contributing.
License file included
This release ensures the LICENSE file is included for easier packaging in Linux distros.
addict.deepcopy() arrives
You can now deep copy an addict
instance by doing ad.deepcopy()
setdefault arrives in addict
addict
now has setdefault
which should properly work.
Thanks to @bmerry.
Fix issues in addict 2.0.
2.0
addict now no longer adds keys when you peek on items! ☄️
This means that it's functionality now differs from defaultdict
, where calls to getitem
will produce a new entry in the defaultdict
. Hence, the following now happens when you peek on an empty key:
from addict import Dict
>>> a = Dict()
>>> a.a
{}
>>> a
{}
However, calls to setitem
works just like before:
>>> a.a = 2
>>> a
{'a': 2}
This is possible because of a new implementation detail. Calls to getitem
now still returns a new addict Dict
, but this instance have to special keyword arguments __parent
and __key
supplied to __init__
. The __parent
argument is meant to hold a reference to the Dict
in which we called getitem
, and the __key
argument refers to the key we were peeking on. When, or rather if, this new Dict
instance's setitem
method is called, it will also call setitem on it's __parent
with the key __key
and the value itself. Let me illustrate with an example.
>>> a = Dict()
>>> b = a.b
>>> a
{}
>>> b
{}
Above, both a
and b
are empty Dicts
. But let's see what happens to a
when we set an item on b
>>> b.c = 2
>>> b
{'c': 2}
>>> a
{'b': {'c': 2}}
Magic.
You should consider these arguments to __init__
reserved, they will not appear as keys in your Dict
, and will cause trouble if used in the wrong way. Example:
>>> a = Dict(__parent=2, __key='a')
>>> a.v = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mats/dev/mewwts/addict/addict/addict.py", line 28, in __setattr__
self[name] = value
File "/Users/mats/dev/mewwts/addict/addict/addict.py", line 39, in __setitem__
p.__setattr__(key, self)
AttributeError: 'int' object has no attribute 'a'
Fixed __init__ and added __add__ functionality.
To be added in more detail.