Skip to main content

Enables self referential json entries

Project description

Build Status

dynamic-json

Dynamic-json allows self-referential entries in a json file. It requires no dependencies, but lacks all the nice features of the yaml specification. If you prefer yaml then see [dynamic-yaml][dynamic-yaml].

Usage

The key feature that was introduced is the ability for a string scalar to reference other parts of the configuration tree. This is done using the Python string formatting syntax. The characters '{' and '}' enclose a reference to another entry in the configuration structure. The reference takes the form key1.key2 where key1 maps to another mapping object and can be found in the root mapping, and key2 can be found in key1's mapping object. Multiple levels of nesting can be used (eg. key1.key2.key3 etc...).

An example yaml configuration:

{
  "project_name": "hello-world",
  "dirs": {
    "home": "/home/user",
    "venv": "{dirs.home}/venvs/{project_name}",
    "data": "{dirs.venv}/data",
    "output": "{dirs.data}/output-{parameters.parameter1}-{parameters.parameter2}"
  },
  "parameters": {
    "parameter1": "a",
    "parameter2": "b"
  }
}

Reading in a json file:

import dynamic_json

with open('/path/to/file.json') as fileobj:
    cfg = dynamic_json.load(fileobj)
    assert cfg.dirs.venv == '/home/user/venvs/hello-world'
    assert cfg.dirs.output == '/home/user/venvs/hello-world/data/output-a-b'

As the variables are dynamically resolved, it is also possible to combine this with argparse:

import dynamic_json

from argparse import ArgumentParser

with open('/path/to/file.yaml') as fileobj:
    cfg = dynamic_json.load(fileobj)
    parser = ArgumentParser()
    parser.add_argument('--parameter1')
    parser.add_argument('--parameter2')
    parser.parse_args('--parameter1 c --parameter2 d'.split(), namespace=cfg.parameters)
    assert cfg.dirs.output == '/home/user/venvs/hello-world/data/output-c-d'

Installation

To install, simply run:

pip install dynamic-json

Restrictions

Due to the short amount of time I was willing to spend on working upon this, there are a few restrictions that I could not overcome.

  • Certain keys can only be used via __getitem__ and not __getattr__. Because dict comes with it's own set of attributes that are always resolved first, the values for the following keys must be gotten using the item getter rather than the attribute getter (eg. config['items'] vs. config.items):
    • append
    • extend
    • insert
    • remove
    • pop
    • clear
    • index
    • count
    • sort
    • reverse
    • copy

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

dynamic-json-1.0.3.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

dynamic_json-1.0.3-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file dynamic-json-1.0.3.tar.gz.

File metadata

  • Download URL: dynamic-json-1.0.3.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.3

File hashes

Hashes for dynamic-json-1.0.3.tar.gz
Algorithm Hash digest
SHA256 c5585eb2aa91aa59663a5175b35cc5eb2e4fc0a64d257fc4df848ac0c880af44
MD5 c2e8fd36e722e9b8119098a9d45d166a
BLAKE2b-256 1c864c4986b252687b744f2710641d10874903aa127cc577585548ce9ac1ba7a

See more details on using hashes here.

File details

Details for the file dynamic_json-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: dynamic_json-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 4.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.7.3

File hashes

Hashes for dynamic_json-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b3535ebddb850a71b8cceeb9b7ac2ad231cf05a463d1c6d24def483dce2a618e
MD5 0a3ae85c9542faa01e972b4fd9fb0ce2
BLAKE2b-256 ea0b6e62f925d23d1fbc0be6f5f6a4f2603fff17ecf79d6059ad1dd30fc12847

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