Skip to main content

Plucking (deep) keys/paths safely from python collections has never been easier.

Project description

https://img.shields.io/pypi/v/plucky.svg https://img.shields.io/pypi/l/plucky.svg https://img.shields.io/pypi/wheel/plucky.svg https://img.shields.io/pypi/pyversions/plucky.svg https://api.travis-ci.org/randomir/plucky.svg?branch=master

plucky.pluckable happily wraps any Python object and allows for chained soft plucking with attribute- and item- getters (e.g. .attr, ["key"], [idx], [::2], or a combination: ["key1", "key2"], and [0, 3:7, ::-1]; even: ["length", 0:5, 7]).

plucky.pluck will allow you to pluck same as with pluckable (regarding the plucking operations), but accepting a string selector instead of a Python expression.

plucky.plucks enables you to safely extract several-levels deep values by using a concise string selector comprised of dictionary-like keys and list-like indices/slices. Stands for pluck simplified, since it supports only a subset of pluck syntax. It’s simpler and a more efficient.

plucky.merge facilitates recursive merging of two data structures, reducing leaf values with the provided binary operator.

Installation

plucky is available as a zero-dependency Python package. Install with:

$ pip install plucky

Usage

from plucky import pluck, plucks, pluckable, merge

pluckable(obj).users[2:5, 10:15].name["first", "middle"].value

pluck(obj, 'users[2:5, 10:15].name["first", "middle"]')

plucks(obj, 'users.2:5.name.first')

merge({"x": 1, "y": 0}, {"x": 2})

Examples

obj = {
    'users': [{
        'uid': 1234,
        'name': {
            'first': 'John',
            'last': 'Smith',
        }
    }, {
        'uid': 2345,
        'name': {
            'last': 'Bono'
        }
    }, {
        'uid': 3456
    }]
}

plucks(obj, 'users.1.name')
# -> {'last': 'Bono'}

plucks(obj, 'users.name.last')
# -> ['Smith', 'Bono']

plucks(obj, 'users.*.name.first')
# -> ['John']

pluckable(obj).users.name.first.value
# -> ['John']

pluckable(obj).users.uid[0, 2, 1].value
# -> [1234, 3456, 2345]

pluckable([datetime.datetime.now(), None, {'month': 8}])[::2].month
# -> [5, 8]

pluckable(obj, skipmissing=False, default='Unnamed').users.name.first.value
# -> ['John', 'Unnamed', 'Unnamed']

More Examples! :)

pluckable(obj).users[:, ::-1].name.last.value
# -> ['Smith', 'Bono', 'Bono', 'Smith']

pluckable(obj).users[:, ::-1].name.last[0, -1].value
# -> ['Smith', 'Smith']

pluck(obj, 'users[:, ::-1].name.last[0, -1]')
# -> ['Smith', 'Smith']

plucks([1, {'val': 2}, 3], 'val')
# -> [2]

plucks([1, {'val': [1,2,3]}, 3], '1.val.-1')
# -> 3

merge({"x": 1, "y": 0}, {"x": 2})
# -> {"x": 3, "y": 0}

merge({"a": [1, 2], "b": [1, 2]}, {"a": [3, 4], "b": [3]})
# -> {"a": [4, 6], "b": [1, 2, 3]}

Project details


Download files

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

Source Distribution

plucky-0.4.3.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

plucky-0.4.3-py2.py3-none-any.whl (10.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file plucky-0.4.3.tar.gz.

File metadata

  • Download URL: plucky-0.4.3.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.5

File hashes

Hashes for plucky-0.4.3.tar.gz
Algorithm Hash digest
SHA256 5bc75d43ae6b40f1b7ba42000b37e4934fa6bd2d6a6cd4e47461f803a404c194
MD5 b91764b23264d7ae5d8109f9db0628f6
BLAKE2b-256 4f4ea2d3157ec7031ea3ccc313400db27b92a65a9c002396a709e7457626f7ad

See more details on using hashes here.

File details

Details for the file plucky-0.4.3-py2.py3-none-any.whl.

File metadata

  • Download URL: plucky-0.4.3-py2.py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.5

File hashes

Hashes for plucky-0.4.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a358878f3e45b5e51d0b4e5b5c89d704422a72c2cf8ee9aaf9acedfa53f89105
MD5 cbb5b73fadd4a0921db6f96957c65ee1
BLAKE2b-256 d8707b43e7280284bafecb345f4edb3eea7042cf0d089c5d112920eda650fda5

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