A config util package to flatten-reduce long keys
Project description
Config (YAML/JSON) Keys Flatten-Reducer
conduce - A simple config package which flatten-reduces all keys of either a YAML or JSON config
to allow a simple way to get values from long keys.
Installation
pip install conduce
some.yaml
alpha:
beta:
gamma: "hello"
some.json:
{"alpha": {"beta": {"gamma": "world"}}}
some_deep_nested.yaml:
alpha:
beta:
gamma:
delta:
theta:
phi:
"finally!!!"
hello:
- 1
- 2
- 3
- rho:
- 10
- 100
- fellow: "end of the road"
example.py reading YAML/JSON into ConfigReader:
from conduce import conduce
# read config with nstruct=False as default for ConfigReader conversion
c1 = conduce.read_yaml(config_name="some.yaml", root_path="some/path/to/the/yaml")
c2 = conduce.read_json(config_name="some.json", root_path="some/path/to/the/json")
c3 = conduce.read_yaml(config_name="some_deep_nested.yaml", root_path="some/path/to/the/yaml")
c4 = conduce.read_config(config_type="json", config_name="some.json", root_path="some/path/to/the/yaml")
# get values
c1('alpha.beta.gamma') # returns value "hello"
c2('alpha.beta.gamma') # returns value "world"
c3('alpha.beta.gamma.delta.theta.phi') # returns value "finally!!!"
c4('alpha.beta.gamma') # returns value "world" (same as c2)
c4() # empty key returns full config dictionary of some.json
example2.py reading YAML/JSON into NStruct:
from conduce import conduce
# NStruct (class object) example
c5 = conduce.read_yaml(config_name="some_deep_nested.yaml",
root_path="some/path/to/the/yaml",
nstruct=True) # set nstruct=True for NStruct
# set nstruct=False for ConfigReader
c5.alpha.hello[3].rho[2].fellow # returns value "end of the road"
c5.value() # returns the full config dictionary
c5.alpha.hello[3].value() # returns the full dictionary of "rho"
example3.py converting dictionary into NStruct:
from conduce import conduce
ex_dict = {"a": 1, "b": {"c": [1, 2, {"d": 3}]}, "d": []} # example dic
ex_obj = conduce.NStruct(**ex_dict) # convert dict to NStruct
print(ex_obj.b.c[2].d) # returns 3
print(ex_obj.value()) # returns whole ex_dict dictionary
example4.py converting dictionary into ConfigReader:
ex_dict = {"a": 1, "b": {"c": [1, 2, {"d": 3}]}, "d": []} # example dic
ex_obj = conduce.ConfigReader(ex_dict).get # convert dict to ConfigReader
print(ex_obj("b.c")[2]["d"]) # returns 3
print(ex_obj()) # returns whole ex_dict dictionary
Function signatures:
# read config (general)
def read_config(
config_type: str,
config_name: str,
root_path="",
nstruct=False
):
"""
general config reader
:param config_type: json or yaml
:param config_name: yaml/json file name
:param root_path: yaml/json file path
:param nstruct: True if return obj is NStruct otherwise is ConfigReader
:return: ConfigReader object containing config
"""
# read config (yaml)
def read_yaml(
config_name: str,
root_path="",
nstruct=False
):
"""
read yaml config into ConfigReader object
:param config_name: yaml file name
:param root_path: yaml file path
:param nstruct: True if return obj is NStruct otherwise is ConfigReader
:return: ConfigReader object
"""
# read config (json)
def read_json(
config_name: str,
root_path="",
nstruct=False
):
"""
read json config into ConfigReader object
:param config_name: json file name
:param root_path: json file path
:param nstruct: True if return obj is NStruct otherwise is ConfigReader
:return: ConfigReader object
"""
# reduce dic calls to a single string with '.' delimitation (ConfigReader)
def reduce_get(cfg: dict, key: str):
"""
gets value from dictionary based on flat 'key' provided
e.g. instead of dict1["alpha"]["beta"]["gamma"], we do: key = "alpha.beta.gamma"
:param cfg: config dictionary
:param key: flat key e.g. "alpha.beta.gamma"
:return: value from dictionary
"""
def traverse_nstruct(dic: dict) -> dict:
"""
traverses through list converting NStruct to dictionaries
:param dic: input list
:return: returns transformed list where dics are converted to NStruct
"""
def traverse_list(lss: list, obj_type) -> list:
"""
traverses through list converting dictionaries to NStruct
:param lss: input list
:param obj_type: either NStruct or dict
:return: returns transformed list where dics are converted to NStruct
"""
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file conduce-1.1.5.tar.gz.
File metadata
- Download URL: conduce-1.1.5.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7698b5ce8c90b7529883006bab746d19d66e37880c7b05782492ee082d0908d
|
|
| MD5 |
95bbffe38a1a51da093e3aa723ebd6a3
|
|
| BLAKE2b-256 |
d56d8d5161bdc19cd23d4048636727cb60ead393a0d20ce69fe17f75494d03a8
|
File details
Details for the file conduce-1.1.5-py3-none-any.whl.
File metadata
- Download URL: conduce-1.1.5-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.1 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2651695d2be61af02cc0a87338fc74394686cf98e50b11baf52eb2c38ae223c8
|
|
| MD5 |
2361318ec3179eb5b9403b988bbbc073
|
|
| BLAKE2b-256 |
f344cfdd26c3eff4f37a37d5c1f52ace6bf0f7b13dbacefdf09d5d05109ed7c1
|