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
.
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
Release history Release notifications | RSS feed
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.tar.gz
(4.2 kB
view hashes)
Built Distribution
Close
Hashes for awesomedict-0.1-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d3c636c5704995e7c62f0e6f34c6b331a779314914b89b1ec1083258b05bc66 |
|
MD5 | 7b3b0687b89e22d063409efceb94a789 |
|
BLAKE2b-256 | bc82755e4b484157aa549d9c593235a78402ac3cdee329216fa09734fc5736ed |