Addict

Latest version: v2.4.0

Safety actively analyzes 631030 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 2

2.1.0

addict` now has `setdefault` which should properly work.

Thanks to bmerry.

2.0.1

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

Thanks to bmerry for spotting these faults in `addict`.

2.0.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:

Python
from addict import Dict
>>> a = Dict()
>>> a.a
{}
>>> a
{}


However, calls to `setitem` works just like before:

Python
>>> 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.

Python
>>> 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`

Python
>>> 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:

Python
>>> 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'

1.1.0

To be added in more detail.

1.0.0

New, potentially _breaking_, feature is that we do not modify or clone objects set after construction, as we did before. The following will throw `AttributeError`

Python
a = Dict()
a.a = {}
a.a.b = 2 throws AttributeError as a.a is a dict (and not an addict)


For this functionality you should rather do

Python
a = Dict()
a.a = Dict()
a.a.b = 2 works


Items set through the constructor will be cloned (as before)

Python
a = Dict({'a': {'b': 2}})
a.a.c = 3 works




Mats

Page 2 of 2

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.