Skip to main content

Subclass of list and dict, recursively, giving attribute access and helper functions

Project description

PyBoa

Latest Version Supported Python versions

Subclass of list and dict, recursively, giving attribute access and helper functions

Do what you usually do

boa return a subclass of dict and list, letting you do everything you use to do

>>> from boa import boa
# recursively transforme the data into boa
>>> a = boa({'b': {'c': [2, 3]}})

# make it accessible by key or attribute
>>> a['b']['c']
[2, 3]
>>> a.b.c
[2, 3]

everything in doc: list, dict can still be done

with the exception of overided methodes:

list.reverse
>>> li = boa([1, 2])
>>> li.reverse()
[2, 1]
>>> li # no change in the original list
[1, 2]

# behaviour of list.reverse:
>>> li.reverse(side_effect=True)
>>> li
[2, 1]
# or use list.reverse directly
>>> li = boa([1, 2])
>>> list.reverse(li)
>>> li
[2, 1]
list.copy
>>> b = boa([1, {'d': 3}])
>>> c = b.copy()
>>> b[0] = 100

# c is a copy of b, and still a boa object:
>>> c[0]
1
>>> c[1].d
3

improvement:

list.index
>>> li = boa([1, 2])
>>> li.index(4)  # same behaviour as the original
ValueError: 4 is not in list

>>> li.index(4, raise_exception=False)  # improvement
None

transforme inserted data too:

>>> a = boa({})
>>> a.x = {'y': {'z': 3}}
>>> a.x.y.z
3
>>> a.li = []
>>> a.li.append({'b': 2})
>>> a.li[0].b
2
>>> a['b'] = [{'li': [1, 2]}]
>>> a.b[0].li.map(lambda x: x+1)
[2, 3]

Add some usefull functions

on list:

.map & .filter

>>> li = boa([1, 2])
>>> li.map(lambda x: x+1)
[2, 3]

>>> li = boa([x for x in range(10)])
>>> li.filter(lambda x: 1 < x <= 4)
[2, 3, 4]

# .filter & .map return boa list
>>> li = boa([{'x': x} for x in range(10)])
>>> li.filter(lambda obj: obj.x < 2).map(lambda obj: obj.x)
[0, 1]

.reduce

>>> li = boa([2, 3])
>>> li.reduce(lambda acc, x: acc*x)
6

random with .shuffle & .randomChoice

>>> arr = boa([x for x in range(10)])
>>> arr.shuffle()
[3, 1, 5, 8, 6, 2, 0, 7, 9, 4]

>>> arr.randomChoice()
4
# ``one of the element at random``

returning back to normal dict and list:

>>> a = boa({'li': [1, 2, {'k': 'v'}]})
>>> b = a.toPython()

>>> b.li
AttributeError: 'dict' object has no attribute 'li'
>>> b['li'].map()
AttributeError: 'list' object has no attribute 'map'
>>> b['li'][2].k
AttributeError: 'dict' object has no attribute 'k'

Overide attribute:

# can overide dictionary attributes, if you really want it:
>>> d = boa({'items': 1})
>>> d.keys = 2
>>> d.values()
dict_values([1, 2])

A wraps function

>>> from boa import boa_wraps
>>> def fun(x): return x

>>> @boa_wraps
>>> def fun(x):
>>>     return x

>>> fun({'a': 1}).a
1

wraps objet ?

class A:
    """simple doc"""
    d = {'key': 'value'}

    def fun(self, data):
        return data
>>> from boa import BoaWraps
>>> obj = BoaWraps(A())
# keep the class name and doc informations:
>>> obj.__class__.__name__
'A'
>>> obj.__doc__
'simple doc'
>>> obj.fun({'a': {'b': 4}}).a.b
4
>>> obj.d.key
'value'

# no side effect on class A:
>>> obj_2 = A()
>>> obj_2.fun({'b': 2}).b
AttributeError: 'dict' object has no attribute 'b'
>>> obj_2.d.key
AttributeError: 'dict' object has no attribute 'key'

to the moon !

class B:
    def get_a(self):
        return A()

    def get_b(self):
        return B()
>>> b = BoaWraps(B())
>>> b.get_a().d.key
'value'
>>> b.get_b().get_b().get_a().d.key
'value'

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

PyBoa-1.2-py3-none-any.whl (5.8 kB view details)

Uploaded Python 3

File details

Details for the file PyBoa-1.2-py3-none-any.whl.

File metadata

  • Download URL: PyBoa-1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2

File hashes

Hashes for PyBoa-1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ef92079b20c3dbee3ef02a84f0bdbd25373172357afafe701392fe4bf3108d7f
MD5 24740d32c053362202fe84edc9db12c9
BLAKE2b-256 020f1e91248ac09d4d6a000c6dcb118baf8b66cfbb63dc2e633bfca2ba12e2ca

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page