Skip to main content

A python based library inspired by nested-property module in javascript

Project description

Nested Property Library for Python

A lightweight Python library for accessing, modifying, and manipulating nested dictionaries and lists using dot-separated paths. Inspired by JavaScript libraries like nested-property, with support for multi-character list index prefixes.


Features

  • Get nested values: get(obj, path)
  • Set nested values: set(obj, path, value)
  • Delete nested values: delete(obj, path)
  • Check existence: has(obj, path)
  • Push values to nested lists: push(obj, path, value)
  • Pull values from nested lists: pull(obj, path, value=None, index=None)
  • Supports list indices with optional prefixes, e.g., "$0" or "idx_0"
  • Default behavior treats numeric keys as list indices automatically (index_prefix=None)

Installation

pip install nested-property

Usage

import the functions

from nested_property import get, set, delete, has, push, pull

Note that you can also import unset which is an alias for delete

Basic usage

data = {"a": {"b": {"c": 42}}}

# Get a value
print(get(data, "a.b.c"))  # 42

# Set a value
set(data, "a.b.d", 100)
print(data)  # {'a': {'b': {'c': 42, 'd': 100}}}

# Check existence
print(has(data, "a.b.c"))  # True

# Delete a value
delete(data, "a.b.c")
print(has(data, "a.b.c"))  # False

Working with lists

data = {"items": [1, 2, 3]}

# Push a value to a list
push(data, "items", 4)
print(get(data, "items"))  # [1, 2, 3, 4]

# Pull a value by value
pull(data, "items", value=2)
print(get(data, "items"))  # [1, 3, 4]

# Pull a value by index
pull(data, "items", index=0)
print(get(data, "items"))  # [3, 4]

Using index prefix

data = {}

# Use "@" as prefix
set(data, "a.b.@0.items", [1, 2, 3], index_prefix="@")
push(data, "a.b.@0.items", 4, index_prefix="@")
print(get(data, "a.b.@0.items", index_prefix="@"))  # [1, 2, 3, 4]

# Use multi-character prefix "idx_"
set(data, "x.y.idx_0.list", [10, 20], index_prefix="idx_")
pull(data, "x.y.idx_0.list", value=10, index_prefix="idx_")
print(get(data, "x.y.idx_0.list", index_prefix="idx_"))  # [20]

Mixed usage

data = {"a": [{"b": [1, 2, 3]}]}

# Numeric keys work without prefix
print(get(data, "a.0.b"))  # [1, 2, 3]

# Push to nested list
push(data, "a.0.b", 4)
print(get(data, "a.0.b"))  # [1, 2, 3, 4]

API

Function Description Parameters
get(obj, path, default=None, index_prefix=None) Get nested value obj: dict/list, path: str, default: any, index_prefix: str or None
set(obj, path, value, index_prefix=None) Set nested value obj: dict/list, path: str, value: any, index_prefix: str or None
delete(obj, path, index_prefix=None) Delete nested value obj: dict/list, path: str, index_prefix: str or None
unset(obj, path, index_prefix=None) Alias for Delete obj: dict/list, path: str, index_prefix: str or None
has(obj, path, index_prefix=None) Check if nested value exists obj: dict/list, path: str, index_prefix: str or None
push(obj, path, value, index_prefix=None) Append value to nested list obj: dict/list, path: str, value: any, index_prefix: str or None
pull(obj, path, value=None, index=None, index_prefix=None) Remove value from nested list by value or index obj: dict/list, path: str, value: any, index: int, index_prefix: str or None

Notes

Dot-separated paths are used for nested keys, e.g., "a.b.c" or "x.y.0.z".

Index prefixes allow you to distinguish numeric dictionary keys from list indices.

When index_prefix=None (default), any key that is a valid integer string is treated as a list index automatically.

License

MIT License

Author

Created by Giles Tetteh. Inspired by JavaScript nested-property library.

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

nested_property-1.0.0.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nested_property-1.0.0-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file nested_property-1.0.0.tar.gz.

File metadata

  • Download URL: nested_property-1.0.0.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.13

File hashes

Hashes for nested_property-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0b74617a719fc566bdc6a9d29adebcedc0f422ff79c795dcac1e61383b0a6d51
MD5 bd823012c03f6a9a56464bc54bebdddb
BLAKE2b-256 14e3e8d805b7c22957900ba0b5abbaa24363a1eda05b7e648ef63749175a016c

See more details on using hashes here.

File details

Details for the file nested_property-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for nested_property-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1f3054a1a071265795104728ac70306355dfb4f97d42bfe1f4c02f90ec357a8
MD5 b7afbd8f03cd5345d69ebdb785d83b5b
BLAKE2b-256 ec74d477901977ac2d78ddf1a5ab6c13d46a391d9411bf4f712455beabeb978b

See more details on using hashes here.

Supported by

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