{ "info": { "author": "Rotem Yaari", "author_email": "vmalloc@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Utilities" ], "description": "bunch\n=====\n\nBunch is a dictionary that supports attribute-style access, a la JavaScript.\n\n>>> b = Bunch()\n>>> b.hello = 'world'\n>>> b.hello\n'world'\n>>> b['hello'] += \"!\"\n>>> b.hello\n'world!'\n>>> b.foo = Bunch(lol=True)\n>>> b.foo.lol\nTrue\n>>> b.foo is b['foo']\nTrue\n\n\nDictionary Methods\n------------------\n\nA Bunch is a subclass of ``dict``; it supports all the methods a ``dict`` does:\n\n>>> b.keys()\n['foo', 'hello']\n\nIncluding ``update()``:\n\n>>> b.update({ 'ponies': 'are pretty!' }, hello=42)\n>>> print repr(b)\nBunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')\n\nAs well as iteration:\n\n>>> [ (k,b[k]) for k in b ]\n[('ponies', 'are pretty!'), ('foo', Bunch(lol=True)), ('hello', 42)]\n\nAnd \"splats\":\n\n>>> \"The {knights} who say {ni}!\".format(**Bunch(knights='lolcats', ni='can haz'))\n'The lolcats who say can haz!'\n\n\nSerialization\n-------------\n\nBunches happily and transparently serialize to JSON and YAML.\n\n>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')\n>>> import json\n>>> json.dumps(b)\n'{\"ponies\": \"are pretty!\", \"foo\": {\"lol\": true}, \"hello\": 42}'\n\nIf JSON support is present (``json`` or ``simplejson``), ``Bunch`` will have a ``toJSON()`` method which returns the object as a JSON string.\n\nIf you have PyYAML_ installed, Bunch attempts to register itself with the various YAML Representers so that Bunches can be transparently dumped and loaded.\n\n>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')\n>>> import yaml\n>>> yaml.dump(b)\n'!bunch.Bunch\\nfoo: !bunch.Bunch {lol: true}\\nhello: 42\\nponies: are pretty!\\n'\n>>> yaml.safe_dump(b)\n'foo: {lol: true}\\nhello: 42\\nponies: are pretty!\\n'\n\nIn 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.\n\nFinally, 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.\n\n\nMiscellaneous\n-------------\n\n* It is safe to ``import *`` from this module. You'll get: ``Bunch``, ``bunchify``, and ``unbunchify``.\n\n* Ample doctests::\n\n $ python -m bunch.test\n $ python -m bunch.test -v | tail -n22\n 1 items had no tests:\n bunch.fromYAML\n 16 items passed all tests:\n 8 tests in bunch\n 13 tests in bunch.Bunch\n 7 tests in bunch.Bunch.__contains__\n 4 tests in bunch.Bunch.__delattr__\n 7 tests in bunch.Bunch.__getattr__\n 3 tests in bunch.Bunch.__repr__\n 5 tests in bunch.Bunch.__setattr__\n 2 tests in bunch.Bunch.fromDict\n 2 tests in bunch.Bunch.toDict\n 5 tests in bunch.bunchify\n 2 tests in bunch.from_yaml\n 3 tests in bunch.toJSON\n 6 tests in bunch.toYAML\n 3 tests in bunch.to_yaml\n 3 tests in bunch.to_yaml_safe\n 4 tests in bunch.unbunchify\n 77 tests in 17 items.\n 77 passed and 0 failed.\n Test passed.\n\n\nFeedback\n--------\n\nOpen a ticket / fork the project on GitHub_, or send me an email at `dsc@less.ly`_.\n\n.. _PyYAML: http://pyyaml.org/wiki/PyYAML\n.. _GitHub: http://github.com/dsc/bunch\n.. _dsc@less.ly: mailto:dsc@less.ly", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/Infinidat/infi.bunch", "keywords": "bunch,dict,mapping,container,collection", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "infi.bunch", "package_url": "https://pypi.org/project/infi.bunch/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/infi.bunch/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/Infinidat/infi.bunch" }, "release_url": "https://pypi.org/project/infi.bunch/2.0.0/", "requires_dist": null, "requires_python": null, "summary": "A dot-accessible dictionary (a la JavaScript objects)", "version": "2.0.0" }, "last_serial": 793277, "releases": { "1.0.1": [], "2.0.0": [ { "comment_text": "", "digests": { "md5": "1dfc0ea092ad5aa5641d7413169a1e65", "sha256": "76a655ae3fa4a27a3233f5f18440ba4cb3023af08d0355a4fb3584e26f9eaebb" }, "downloads": -1, "filename": "infi.bunch-2.0.0.tar.gz", "has_sig": false, "md5_digest": "1dfc0ea092ad5aa5641d7413169a1e65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7305, "upload_time": "2012-07-22T16:16:45", "url": "https://files.pythonhosted.org/packages/cf/95/dc268b05012ddaf5e0e120bd59521f69a4dba2b6595541c12fbd2ad718d5/infi.bunch-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1dfc0ea092ad5aa5641d7413169a1e65", "sha256": "76a655ae3fa4a27a3233f5f18440ba4cb3023af08d0355a4fb3584e26f9eaebb" }, "downloads": -1, "filename": "infi.bunch-2.0.0.tar.gz", "has_sig": false, "md5_digest": "1dfc0ea092ad5aa5641d7413169a1e65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7305, "upload_time": "2012-07-22T16:16:45", "url": "https://files.pythonhosted.org/packages/cf/95/dc268b05012ddaf5e0e120bd59521f69a4dba2b6595541c12fbd2ad718d5/infi.bunch-2.0.0.tar.gz" } ] }