Skip to main content

PyPi Package Build Status Codacy Rating

run command to install

pip install pyfastkvjson

jsonstore kv

This module provides a class that maps keys and values from a JSON file onto its attributes.

The goal was to provide a convenient way of loading and saving configuration in a familiar human readable format. This is a bit more flexible than the configparser module which is included with Python.

This works is tested and working on Python 2.7+ and Python 3.3+. It will not work on 2.6 or lower, but is expected to work on 3.0-3.2. The tests do not work in 3.2.6 due to mistreating the 💩 when parsing the test code. This is also tested on pypy and pypy3.

Examples

Basics

# by default JsonStore commits on every change unless in a transaction
store = JsonStore('config.json')
store.a_string = "something"
store.a_list = [1, 2, 3]
store.a_dictionary = {
  'dict-list': [{}],
  'ln(2)': 0.69314718056,
  'for-you': u"💐",
}

# you can use […] to set/get/delete string keys
store['some_key'] = "a value"
# the key is split on '.'s and works on dictionaries
del store['a_dictionary.dict-list']
store['a_dictionary.new_value'] = "old value"
#  you can also use the syntactic sugar for tuple keys (explicit lists work too)
assert store['a_dictionary', 'new_value'] == "old value"
# you can traverse lists too
assert store['a_list', -1] == 3
# you can use slices in lists
assert len(store['a_list', 1:]) == 2

# deep copies are made when assigning values
my_list = ['fun']
store.a_list = my_list
assert store.a_list is not my_list
assert 'a_list' in store

# deep copies are also returned to avoid unsanitary changes being made
store.a_dictionary['new_value'] = "new value"  # won't update the store!
assert store.a_dictionary['new_value'] == "old value"
assert store.a_dictionary is not store.a_dictionary

# Appending to, extending a list
>>> store.list = [1, 2, 3]

# Because of the fact that .append won't modify the list in the actual file,
# but only a copy...
>>> store.list.append(4)
>>> store.list
[1, 2, 3]

# ... we need to rather use the += operator to append to a list.
>>> store.list += [4]
>>> store.list
[1, 2, 3, 4]

# Similarly, we can extend the list
>>> store.list += [5, 6]
>>> store.list
[1, 2, 3, 4, 5, 6]

Additional encryptions

TEST_PASSWORD="123456"
secret_file_name = mktemp() + ".aes"
store_ram = JsonStore(secret_file_name, indent=None, auto_commit=True, password=TEST_PASSWORD)

Transactions

JsonStore objects can be used as context managers to provide transactions which are rolled back in the event of an exception. The transaction model is primitive; you can only nest transactions.

While a store is put into a transaction, it will not save changes to file until all of the transactions have been closed.

from jsonstore import JsonStore

# even with auto_commit=True, the file won't be saved until the last contexts has been closed
with JsonStore('config.json', indent=None, auto_commit=False) as store:
  self.value = 1

# the context manager will roll back changes made if an exception is raised
store = JsonStore('config.json', indent=None)
try:
  with store:
    store.value = "new"
    raise Exception
except Exception:
  pass
# here we see the value that was saved previously
assert store.value == 1

Download files

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

Source Distribution

pyfastkvjson-3.1.16.tar.gz (159.4 kB view details)

Uploaded Source

Built Distribution

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

pyfastkvjson-3.1.16-py2.py3-none-any.whl (6.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pyfastkvjson-3.1.16.tar.gz.

File metadata

  • Download URL: pyfastkvjson-3.1.16.tar.gz
  • Upload date:
  • Size: 159.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.12

File hashes

Hashes for pyfastkvjson-3.1.16.tar.gz
Algorithm Hash digest
SHA256 1df9ccaa469cf17bc1d1fa55ec00381bfd2c813e307f3a84c3eb31e8ed350cf0
MD5 c46f32788bf4ee801094608d90ec34e9
BLAKE2b-256 d5f431a3dd0beb7aa02a94a2af0482f81c0df9274e22cba90b31e89f99d44a98

See more details on using hashes here.

File details

Details for the file pyfastkvjson-3.1.16-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pyfastkvjson-3.1.16-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 3bee4f6ee81f7e9d460dc1efc5c6376e4f150d831c14ca67fe0fa53107d53cf2
MD5 55960ae0ad1e99b9b65d1830c6ff0e91
BLAKE2b-256 da3b7d1aeaac56c22e5bc3955691c321bdbe4d6c8d76491243ab873d0f1f5d12

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

3.1.16 This release

2 files

2.1.104

2 files

2.1.103

2 files

Supported by

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