bunch

A Bunch is a Python dictionary that provides attribute-style access (a la JavaScript objects).

https://github.com/dsc/bunch

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
Last synced: 10 months ago · JSON representation

Repository

A Bunch is a Python dictionary that provides attribute-style access (a la JavaScript objects).

Basic Info
Statistics
  • Stars: 492
  • Watchers: 11
  • Forks: 175
  • Open Issues: 14
  • Releases: 0
Created over 16 years ago · Last pushed over 1 year ago
Metadata Files
Readme License

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, and unbunchify.
  • bunch somehow 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

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

All Time
  • Total Commits: 45
  • Total Committers: 9
  • Avg Commits per committer: 5.0
  • Development Distribution Score (DDS): 0.533
Past Year
  • Commits: 17
  • Committers: 5
  • Avg Commits per committer: 3.4
  • Development Distribution Score (DDS): 0.529
Top Committers
Name Email 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
2.0 (4) tests (2)
Pull Request Labels
interesting (1)

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)

  • Versions: 2
  • Dependent Packages: 15
  • Dependent Repositories: 355
  • Downloads: 26,373 Last month
  • Docker Downloads: 39,529,037
Rankings
Dependent repos count: 0.8%
Dependent packages count: 0.9%
Downloads: 1.4%
Docker downloads count: 1.9%
Average: 2.0%
Stargazers count: 2.9%
Forks count: 3.8%
Maintainers (2)
Last synced: 10 months ago
pypi.org: zato-ext-bunch

A dot-accessible dictionary (a la JavaScript objects)

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 149 Last month
Rankings
Stargazers count: 2.8%
Forks count: 3.9%
Dependent packages count: 6.6%
Downloads: 10.4%
Average: 10.9%
Dependent repos count: 30.6%
Maintainers (1)
Last synced: 10 months ago
conda-forge.org: bunch
  • Versions: 1
  • Dependent Packages: 2
  • Dependent Repositories: 1
Rankings
Forks count: 14.2%
Stargazers count: 18.1%
Average: 19.0%
Dependent packages count: 19.6%
Dependent repos count: 24.1%
Last synced: 10 months ago

Dependencies

setup.py pypi