Bunch is a dictionary that supports attribute-style access, a la JavaScript.
>>> b = Bunch() >>> b.hello = 'world' >>> b.hello 'world' >>> b['hello'] += "!" >>> b.hello 'world!' >>> b.foo = Bunch(lol=True) >>> b.foo.lol True >>> b.foo is b['foo'] True
Dictionary Methods
A Bunch is a subclass of dict; it supports all the methods a dict does:
>>> b.keys() ['foo', 'hello']
Including update():
>>> b.update({ 'ponies': 'are pretty!' }, hello=42)
>>> print repr(b)
Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')
As well as iteration:
>>> [ (k,b[k]) for k in b ]
[('ponies', 'are pretty!'), ('foo', Bunch(lol=True)), ('hello', 42)]
And “splats”:
>>> "The {knights} who say {ni}!".format(**Bunch(knights='lolcats', ni='can haz'))
'The lolcats who say can haz!'
Serialization
Bunches happily and transparently serialize to JSON and YAML.
>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')
>>> import json
>>> json.dumps(b)
'{"ponies": "are pretty!", "foo": {"lol": true}, "hello": 42}'
If JSON support is present (json or simplejson), Bunch will have a toJSON() method which returns the object as a JSON string.
If you have PyYAML installed, Bunch attempts to register itself with the various YAML Representers so that Bunches can be transparently dumped and loaded.
>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')
>>> import yaml
>>> yaml.dump(b)
'!bunch.Bunch\nfoo: !bunch.Bunch {lol: true}\nhello: 42\nponies: are pretty!\n'
>>> yaml.safe_dump(b)
'foo: {lol: true}\nhello: 42\nponies: are pretty!\n'
In addition, Bunch instances will have a toYAML() method that returns the YAML string using yaml.safe_dump(). This method also replaces __str__ if present, as I find it far more readable. You can revert back to Python’s default use of __repr__ with a simple assignment: Bunch.__str__ = Bunch.__repr__. The Bunch class will also have a static method Bunch.fromYAML(), which loads a Bunch out of a YAML string.
Finally, Bunch converts easily and recursively to (unbunchify(), Bunch.toDict()) and from (bunchify(), Bunch.fromDict()) a normal dict, making it easy to cleanly serialize them in other formats.
Miscellaneous
It is safe to import * from this module. You’ll get: Bunch, bunchify, and unbunchify.
Ample doctests:
$ python -m bunch.test -v
Feedback
Open a ticket at http://github.com/dsc/bunch or send me an email at dsc@less.ly .
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
File details
Details for the file bunch-1.0.1.zip.
File metadata
- Download URL: bunch-1.0.1.zip
- Upload date:
- Size: 11.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c554816ba260634b55c1edf8de6467d8122dbd18ec20f323e181869bc48ac93
|
|
| MD5 |
1d89b4e6ac970368cba8d8d47b2ba915
|
|
| BLAKE2b-256 |
cc56ceef9c8c12600a1ceb3dcefdd9e5094c72fbdba0c3af785b4a69205022c1
|
File details
Details for the file bunch-1.0.1.tar.gz.
File metadata
- Download URL: bunch-1.0.1.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50c77a0fc0cb372dfe48b5e11937d5f70e743adbf42683f3a6d2857645a76aaa
|
|
| MD5 |
0a829d64e95ed96defbcae2bf9061bb0
|
|
| BLAKE2b-256 |
efbfa4cf1779a4ffb4f610903fa08e15d1f4a8a2f4e3353a02afbe097c5bf4a8
|