-
Notifications
You must be signed in to change notification settings - Fork 111
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
bff677f
commit a264b40
Showing
3 changed files
with
132 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,131 @@ | ||
Box | ||
=== | ||
|
||
Python dictionaries with recursive dot notation access. | ||
|
||
.. code:: python | ||
from box import Box | ||
my_box = Box({"owner": "Mr. Powers", | ||
"contents": ["blue crushed-velvet suit", | ||
"frilly lace crava", | ||
"gold medallion with peace symbol", | ||
"Italian shoes", | ||
"tie-dyed socks"], | ||
"affiliates": { | ||
"Vanessa": "Sexy", | ||
"Dr Evil": "Not groovy", | ||
"Scott Evil": "Doesn't want to take over family business" | ||
}}) | ||
my_box.affiliates.Vanessa == my_box['affiliates']['Vanessa'] | ||
my_box.funny_line = "They tried to steal my lucky charms!" | ||
my_box['funny_line'] | ||
# 'They tried to steal my luck charms!' | ||
my_box.credits = {'Austin Powers': "Mike Myers", "Vanessa Kensington": "Elizabeth Hurley"} | ||
# <Box: {'Austin Powers': 'Mike Myers', 'Vanessa Kensington': 'Elizabeth Hurley'}> | ||
Install | ||
------- | ||
|
||
.. code:: bash | ||
pip install python-box | ||
(Don't see a box package, but alas, can't claim the name for some reason.) | ||
|
||
Box is tested on python 2.6+, 3.3+ and PyPy2, and should work on other | ||
interpreters as well. If it does not install with this command, please | ||
open a ticket with the error you are experiencing! | ||
|
||
Overview | ||
-------- | ||
|
||
This module provides two main classes `Box` and `ConfigBox`. | ||
They are designed to be easy drop in replacements for dictionaries, | ||
with the latter having tools for dealing with config files. | ||
|
||
`Box` is designed to transparently act as a dictionary, thanks to Python's | ||
duck typing capabilities, but add dot notation access like classes do. Any sub | ||
dictionaries or ones set after initiation will be automatically converted to | ||
a `Box` object. You can always run `.to_dict()` on it to return the object | ||
and all sub objects back into a regular dictionary. | ||
|
||
|
||
.. code:: python | ||
# Will only convert outermost object | ||
dict(my_box) | ||
# {'owner': 'Mr. Powers', 'affiliates': <Box: {'Vanessa': 'Sexy', | ||
# 'Dr Evil': 'Not groovy', 'Scott Evil': "Doesn't want to take over family business"}>, | ||
# 'credits': <Box: {'Austin Powers': 'Mike Myers', 'Vanessa Kensington': 'Elizabeth Hurley'}>} | ||
my_box.to_dict() | ||
# {'owner': 'Mr. Powers', 'affiliates': {'Vanessa': 'Sexy', | ||
# 'Dr Evil': 'Not groovy', 'Scott Evil': "Doesn't want to take over family business"}, | ||
# 'credits': {'Austin Powers': 'Mike Myers', 'Vanessa Kensington': 'Elizabeth Hurley'}} | ||
This module was pulled from my other project, reusables, so it has support for | ||
a `ConfigBox`. | ||
|
||
test_config.ini | ||
|
||
.. code:: ini | ||
[General] | ||
example=A regular string | ||
[Examples] | ||
my_bool=yes | ||
anint=234 | ||
exampleList=234,123,234,543 | ||
floatly=4.4 | ||
With the combination of reusables and ConfigBox you can easily read python | ||
config values into python types. It supports `list`, `bool`, `int` and `float`. | ||
|
||
.. code:: python | ||
import reusables | ||
from box import ConfigBox | ||
config = ConfigBox(reusables.config_dict("test_config.ini")) | ||
# <ConfigBox: {'General': {'example': 'A regular string'}, | ||
# 'Examples': {'my_bool': 'yes', 'anint': '234', 'examplelist': '234,123,234,543', 'floatly': '4.4'}}> | ||
config.Examples.list('examplelist') | ||
# ['234', '123', '234', '543'] | ||
config.Examples.float('floatly') | ||
# 4.4 | ||
Similar Libraries | ||
----------------- | ||
|
||
**Bunch** | ||
|
||
Does not work recursively. | ||
|
||
**EasyDict** | ||
|
||
EasyDict not have a way to make sub items recursively back into a regular dictionary. | ||
|
||
Both EasyDicts `str` and `repr` print a dictionary look alike, `Box` makes it clear in repr | ||
that it is a unique object. | ||
|
||
**addict** | ||
|
||
Is a default dictionary, as in it will never fail on lookup. | ||
It also goes into lists and makes those into sub objects as. | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters