Skip to main content

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

Project description

PyBoa

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.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: PyBoa-1.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.6.9

File hashes

Hashes for PyBoa-1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b3ba987b234dc98879ff1a46332ae42f913bcaa4a2d60864d0a4c14fa8be5b4f
MD5 cebe6caa2483db37c68296619121293d
BLAKE2b-256 29a8c1a275362a68737909d638d8051108b11ac5889962c6d0e7a281bc30ed94

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