Skip to main content

No more KeyError! Set default values and filter via regex

Project description

INTRODUCTION

A magic dictionary which never raises KeyError but creates non-existent items as they are requested. By default newly created items in this way are an empty instance of AwesomeDict, but that can be set with set_defaults. The instances also have a filter method which can filter based on a regular expression matched against the key or value. A default regex for filter can be set with set_filter.

INSTALLATION

pip install awesomedict

EXAMPLE USAGE

from awesomedict import AwesomeDict
import json

# create a default order
mdorder = AwesomeDict().set_defaults(
    {
        '^price$': 0,
        '_address$': 'No such street, PO 000'
    }).set_defaults({'^items$': []}, do_copy=True)
mdorder['items']
mdorder['price']
mdorder['shipping_address']
mdorder['billing_address']

md = AwesomeDict().set_defaults(
    {'^[0-9]+$': mdorder}, do_copy=True).set_filter('^!')
md['customers']['foo'][1]['price'] = 15
md['customers']['foo'][1]['items'].append('notebook')
md['customers']['foo'][1]['shipping_address'] = 'FOO street'
md['customers']['foo'][1]['billing_address'] = 'FOO office'
md['customers']['foo'][1]['!notes'] = 'important notes'
md['customers']['foo'][2]  # use all defaults
md['customers']['!important customer'][1]['price'] = 25  # use default address
md['customers']['!important customer'][1]['items'].append('pen')
print(json.dumps(md, default=lambda o: o.data, indent=2))
print('\n-----important only:-----\n')
print(json.dumps(md.filter(), default=lambda o: o.data, indent=2))
print('\n-----items only:-----\n')
print(json.dumps(md.filter('^items$'), default=lambda o: o.data, indent=2))
$ python demo.py
{
  "customers": {
    "foo": {
      "1": {
        "items": [
          "notebook"
        ],
        "price": 15,
        "shipping_address": "FOO street",
        "billing_address": "FOO office",
        "!notes": "important notes"
      },
      "2": {
        "items": [],
        "price": 0,
        "shipping_address": "No such street, PO 000",
        "billing_address": "No such street, PO 000"
      }
    },
    "!important customer": {
      "1": {
        "items": [
          "pen"
        ],
        "price": 25,
        "shipping_address": "No such street, PO 000",
        "billing_address": "No such street, PO 000"
      }
    }
  }
}

-----important only:-----

{
  "customers": {
    "foo": {
      "1": {
        "!notes": "important notes"
      }
    },
    "!important customer": {
      "1": {
        "items": [
          "pen"
        ],
        "price": 25,
        "shipping_address": "No such street, PO 000",
        "billing_address": "No such street, PO 000"
      }
    }
  }
}

-----items only:-----

{
  "customers": {
    "foo": {
      "1": {
        "items": [
          "notebook"
        ]
      },
      "2": {
        "items": []
      }
    },
    "!important customer": {
      "1": {
        "items": [
          "pen"
        ]
      }
    }
  }
}

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

awesomedict-0.1.1.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

awesomedict-0.1.1-py2-none-any.whl (5.4 kB view details)

Uploaded Python 2

File details

Details for the file awesomedict-0.1.1.tar.gz.

File metadata

  • Download URL: awesomedict-0.1.1.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for awesomedict-0.1.1.tar.gz
Algorithm Hash digest
SHA256 db9a310bbc83e8559a775da9be410c3abd929d434fc827b7bc844f50c6ffcc22
MD5 cfe9447e09f685b12ea99c04c7980485
BLAKE2b-256 8536dc622fa20e2c0a7e395f2554045a2564e80ae6bdcd430e06334913715804

See more details on using hashes here.

File details

Details for the file awesomedict-0.1.1-py2-none-any.whl.

File metadata

  • Download URL: awesomedict-0.1.1-py2-none-any.whl
  • Upload date:
  • Size: 5.4 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.0.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for awesomedict-0.1.1-py2-none-any.whl
Algorithm Hash digest
SHA256 90fc00d12149ca1960cd9200489f65145579513755f18276234f9793ea15f13b
MD5 f6f2e1f5b4173f790f1fd10bae9faf87
BLAKE2b-256 ad51f82d418823fcf70876932da47f0f2c4b52e9ad5f547a8a99fc9b6282ea08

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