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 .
Metadata
Release files for bunch 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distributions (sdists)
| File | Size | Uploaded | |
|---|---|---|---|
| bunch-1.0.1.zip | 11.1 kB | Details | |
| bunch-1.0.1.tar.gz | 6.6 kB | Details |
Release files / bunch-1.0.1.zip
| Download URL | bunch-1.0.1.zip |
|---|---|
| Size | 11.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3c554816ba260634b55c1edf8de6467d8122dbd18ec20f323e181869bc48ac93
|
|
BLAKE2b-256 checksum How to use checksums |
cc56ceef9c8c12600a1ceb3dcefdd9e5094c72fbdba0c3af785b4a69205022c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / bunch-1.0.1.tar.gz
| Download URL | bunch-1.0.1.tar.gz |
|---|---|
| Size | 6.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
50c77a0fc0cb372dfe48b5e11937d5f70e743adbf42683f3a6d2857645a76aaa
|
|
BLAKE2b-256 checksum How to use checksums |
efbfa4cf1779a4ffb4f610903fa08e15d1f4a8a2f4e3353a02afbe097c5bf4a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |