Skip to content

Releases: mewwts/addict

freeze/unfreeze

21 Nov 16:20
3389362
Compare
Choose a tag to compare

Calling .freeze() forbids getting/setting missing keys. Use .unfreeze() to undo. Ref #121, #130. Thanks to @sumukhbarve.

Add support for `|` and `|=`

12 Sep 07:51
01b8f76
Compare
Choose a tag to compare

Releasing with changes from 8181a94. On PyPi.

Add LICENSE and tests to releases

28 Apr 08:15
Compare
Choose a tag to compare

Proper support for subclassing

23 Aug 05:40
Compare
Choose a tag to compare

In this release it's easier / better to inherit from a Dict instance. Thanks to @MisterVladimir for contributing.

License file included

12 May 19:15
Compare
Choose a tag to compare

This release ensures the LICENSE file is included for easier packaging in Linux distros.

addict.deepcopy() arrives

25 Jan 12:57
Compare
Choose a tag to compare

You can now deep copy an addict instance by doing ad.deepcopy()

setdefault arrives in addict

05 Mar 09:19
Compare
Choose a tag to compare

addict now has setdefault which should properly work.

Thanks to @bmerry.

Fix issues in addict 2.0.

05 Mar 08:49
Compare
Choose a tag to compare

This fixes several issues with addict, namely #85, #86 and #88.

Thanks to @bmerry for spotting these faults in addict.

2.0

12 Dec 14:14
Compare
Choose a tag to compare
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.

10 Oct 19:05
Compare
Choose a tag to compare