cdgriffith / Box

Python dictionaries with advanced dot notation access
https://github.com/cdgriffith/Box/wiki
MIT License
2.61k stars 106 forks source link

BoxKeyError when constructing a Box with box_dots = True in v7.0.0 #250

Open roosephu opened 1 year ago

roosephu commented 1 year ago

To reproduce:

>>> import box
>>> box.__version__
'7.0.0'
>>> box.Box({'a.b': 1})
Box({'a.b': 1})
>>> box.Box({'a.b': 1}, box_dots=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "box/box.py", line 286, in box.box.Box.__init__
  File "box/box.py", line 653, in box.box.Box.__setitem__
box.exceptions.BoxKeyError: "'<class 'box.box.Box'>' object has no attribute a"

It seems to work in v6.0.2:

>>> import box
>>> box.__version__
'6.0.2'
>>> box.Box({'a.b': 1})
Box({'a.b': 1})
>>> box.Box({'a.b': 1}, box_dots=True)
Box({'a.b': 1})

Python 3.10.9.

roosephu commented 1 year ago

This might be related to #170.

>>> import box
>>> box.__version__
'7.0.0'
>>> box.Box({'a.b': 1}, default_box=True)
Box({'a.b': 1})
>>> box.Box({'a.b': 1}, default_box=True, box_dots=True)
Box({'a': {'b': 1}})

That is, we have to set default_box=True to avoid BoxKeyError.

roosephu commented 1 year ago

Found this is in the list of breaking changes which unfortunately I didn't read through. The examples in the wiki should be updated, though.