bunch
A Bunch is a Python dictionary that provides attribute-style access (a la JavaScript objects).
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Committers with academic emails
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.5%) to scientific vocabulary
Repository
A Bunch is a Python dictionary that provides attribute-style access (a la JavaScript objects).
Basic Info
- Host: GitHub
- Owner: dsc
- License: mit
- Language: Python
- Default Branch: master
- Homepage: http://github.com/dsc/bunch
- Size: 55.7 KB
Statistics
- Stars: 492
- Watchers: 11
- Forks: 175
- Open Issues: 14
- Releases: 0
Metadata Files
README.md
bunch
Bunch is a dictionary that supports attribute-style access, à la JavaScript.
```py
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 ```
bunch somehow still supports Python 2.5 (?!)
Dictionary Methods
A Bunch is a subclass of dict; it supports all the methods a dict does:
```py
b.keys() ['foo', 'hello'] ```
Including update():
```py
b.update({ 'ponies': 'are pretty!' }, hello=42) print repr(b) Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!') ```
As well as iteration:
```py
[ (k,b[k]) for k in b ] [('ponies', 'are pretty!'), ('foo', Bunch(lol=True)), ('hello', 42)] ```
And "splats":
```py
"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.
```py
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 (stdlib json, or simplejson to support python <= 2.5), 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.
```py
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 also has a static method Bunch.fromYAML(), which loads a Bunch out of a YAML string. Note this implicitly uses yaml.full_load() -- see details here https://msg.pyyaml.org/load for changes in PyYAML 5.1+. For your convenience, the fromYaml() method accepts multiple arguments to customize the loader.
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, andunbunchify. bunchsomehow still supports python 2.5 (?!). Please thank our contributors.Ample doctests:
$ python -m bunch.test $ python -m bunch.test -v | tail -n24 20 items passed all tests: 8 tests in bunch 13 tests in bunch.Bunch 7 tests in bunch.Bunch.__add__ 11 tests in bunch.Bunch.__contains__ 4 tests in bunch.Bunch.__delattr__ 7 tests in bunch.Bunch.__getattr__ 5 tests in bunch.Bunch.__iadd__ 3 tests in bunch.Bunch.__repr__ 5 tests in bunch.Bunch.__setattr__ 5 tests in bunch.Bunch.copy 2 tests in bunch.Bunch.fromDict 4 tests in bunch.Bunch.fromYAML 2 tests in bunch.Bunch.toDict 3 tests in bunch.Bunch.toJSON 6 tests in bunch.Bunch.toYAML 5 tests in bunch.bunchify 2 tests in bunch.from_yaml 3 tests in bunch.to_yaml 3 tests in bunch.to_yaml_safe 4 tests in bunch.unbunchify 102 tests in 20 items. 102 passed and 0 failed. Test passed.
Feedback
Open a ticket / fork the project on GitHub, or send me an email at dsc@less.ly.
Owner
- Name: David Schoonover
- Login: dsc
- Kind: user
- Location: New York, NY
- Website: http://less.ly
- Repositories: 131
- Profile: https://github.com/dsc
GitHub Events
Total
- Issues event: 6
- Watch event: 12
- Issue comment event: 8
- Push event: 1
- Fork event: 1
Last Year
- Issues event: 6
- Watch event: 12
- Issue comment event: 8
- Push event: 1
- Fork event: 1
Committers
Last synced: about 1 year ago
Top Committers
| Name | Commits | |
|---|---|---|
| dsc | d****r@g****m | 21 |
| Mistress Alisi | 9****i | 6 |
| Toshio Kuratomi | t****o@f****g | 4 |
| Rotem Yaari | v****c@g****m | 4 |
| MAA | F****x | 4 |
| Peter Kogan | p****r@m****v | 3 |
| Simon Chopin | c****n@g****m | 1 |
| Robert Oliveira | o****r@g****m | 1 |
| Dariusz Suchojad | d****b@g****l | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 10 months ago
All Time
- Total issues: 25
- Total pull requests: 37
- Average time to close issues: over 5 years
- Average time to close pull requests: about 5 years
- Total issue authors: 17
- Total pull request authors: 27
- Average comments per issue: 3.04
- Average comments per pull request: 0.76
- Merged pull requests: 10
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 3
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 3
- Pull request authors: 0
- Average comments per issue: 0.0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- femtotrader (8)
- scls19fr (2)
- dsc (2)
- cjkrolak (1)
- s-celles (1)
- jayd3e (1)
- prat-man (1)
- brunobord (1)
- vmalloc (1)
- ishahak (1)
- maxiplux (1)
- techtonik (1)
- betolink (1)
- kgk (1)
- scott-martin (1)
Pull Request Authors
- olivecoder (14)
- FooBarQuaxx (3)
- abadger (3)
- PeterKogan (3)
- abhinavdas (2)
- ell-hol (2)
- benwah (2)
- fangli (2)
- theho (2)
- pirumpi (2)
- bil-bas (2)
- mistressAlisi (2)
- laarmen (2)
- dsuch (2)
- ayalash (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 3
-
Total downloads:
- pypi 26,522 last-month
- Total docker downloads: 39,529,037
-
Total dependent packages: 17
(may contain duplicates) -
Total dependent repositories: 356
(may contain duplicates) - Total versions: 5
- Total maintainers: 3
pypi.org: bunch
A dot-accessible dictionary (a la JavaScript objects)
- Homepage: http://github.com/dsc/bunch
- Documentation: https://bunch.readthedocs.io/
- License: MIT
-
Latest release: 1.0.1
published over 14 years ago
Rankings
Maintainers (2)
pypi.org: zato-ext-bunch
A dot-accessible dictionary (a la JavaScript objects)
- Homepage: http://github.com/dsc/bunch
- Documentation: https://zato-ext-bunch.readthedocs.io/
- License: MIT
-
Latest release: 1.3
published about 1 year ago
Rankings
Maintainers (1)
conda-forge.org: bunch
- Homepage: http://github.com/dsc/bunch
- License: MIT
-
Latest release: 1.0.1
published almost 4 years ago