pydarg

Pure Python decorator for more complex dictionary handling


Keywords
python, dictionary, decorator, configuration, utils
License
MIT
Install
pip install pydarg==0.1

Documentation

pydarg

Pydarg is a python simple utility package providing a way to handle more deeply dictionary parameters of implemented function

REQUIREMENT

Require python 3.6+

INSTALLATION

Run this command line to fetch the package on Pypi

$ pip install pydarg

USAGE

This package provide a method "dct_arg" used as a decorator

Basic Usage

without any parameter, dct_arg unpacks the dictionary argument of function signature

@dct_arg
def example(foo,bar):
    print(foo,bar)

param = {'foo':'1,'bar':'2','other':3}
example(param)

the main advantage of using dct_arg instead of **param is that it avoid binding extra argument, making it really useful for handling configuration dictionary having multiple of parameter.

those functions call would also be valid

example(foo='foo',bar='bar')
example({'foo':'foo_1'},bar='bar)
example({},'foo','bar')

It is also possible to override dct_arg's name by using keyword argument. making this line printing "foo_2" and "bar_2"

example({'foo':'foo_1','bar:'bar_1},'foo_2,bar='bar_2)

parameters

dct_arg(
    _fct=None, *,
    is_positional=True,
    is_keyword=True,
    name='dct_arg',
    path="",
    fetch_args=None
    ):

Where :

  • arg_type:

    define what is the type of the dct_arg

    • ArgType.POSITIONAL
    • ArgType.KEY_WORD
    • ArgType.BOTH,
  • name

    represent the keyword name of the dct_arg

  • path

    if the desired dct_arg is nested you you can specify the path with "/"

  • fetch_args

    dictionary composed of key representing keyword parameter, and the path with "/" to fetch them in the dct_arg

Examples

fetch the nested dictionary argument named config

@dct_arg(name='config,path='child/subchild')
def example(e0, e1):
    print(e1, e0)


example(config={'child': {'subchild': {'e1': 1, 'e0': 0}}})
example({'child': {'subchild': {'e1': 1}}}, e0=0)

since by default a dct_arg is a positional keyword both function call works

fetch the dct_arg itself as an argument

@dct_arg(fetch_args={'config': ""})
def example(config, e0):
    pass

example(configuration={'e0': 0})