Metadata-Version: 2.1
Name: python-benedict
Version: 0.3.2
Summary: The Python dictionary for humans dealing with evil/complex data.
Home-page: https://github.com/fabiocaccamo/python-benedict
Author: Fabio Caccamo
Author-email: fabio.caccamo@gmail.com
License: MIT
Download-URL: https://github.com/fabiocaccamo/python-benedict/archive/0.3.2.tar.gz
Keywords: benedict,python,dict,keypath,parse,utility
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Software Development :: Build Tools
Requires-Dist: python-dateutil
Requires-Dist: python-slugify
Requires-Dist: ftfy (==4.4.3) ; python_version < "3.4"
Requires-Dist: ftfy ; python_version > "2.7"

|Build Status| |codecov| |Codacy| |Requirements Status|
|PyPI version| |PyPI downloads| |Py versions| |License|

python-benedict
===============

The Python dictionary for humans dealing with evil/complex data.

Features
--------

-  Full **keypath** support *(using the dot syntax)*
-  Many **utility methods** to retrieve data as needed *(all methods listed below)*
-  Give **benediction to dict objects** before they are returned *(they receive benedict casting)*
-  100% **backward-compatible** *(you can replace existing dicts without pain)*

Requirements
------------

-  Python 2.7, 3.4, 3.5, 3.6, 3.7

Installation
------------

-  Run ``pip install python-benedict``

Testing
-------

-  Run ``tox`` / ``python setup.py test``

Usage
-----

``benedict`` is a dict subclass, so it is possible to use it as a normal
dict *(you can just cast an existing dict)*.

Basic get/set using keypath
^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code:: python

    from benedict import benedict

    d = benedict()
    d['profile.firstname'] = 'Fabio'
    d['profile.lastname'] = 'Caccamo'
    print(d) # -> { 'profile':{ 'firstname':'Fabio', 'lastname':'Caccamo' } }
    print(d['profile']) # -> { 'firstname':'Fabio', 'lastname':'Caccamo' }
    print('profile.lastname' in d) # -> True

Extra methods
^^^^^^^^^^^^^

.. code:: python

    # Return a deepcopy of the dict.
    d.deepcopy()

.. code:: python

    # Return a readable representation of any dict/list.
    s = benedict.dump(d.keypaths())
    print(s)

.. code:: python

    # Return a readable representation of the dict for the given key (optional).
    s = d.dump_items(key=None)
    print(s)

.. code:: python

    # Return a list of all keypaths in the dict.
    d.keypaths()

Utility methods
^^^^^^^^^^^^^^^

.. code:: python

    # Get value by key or keypath trying to return it as bool.
    # Values like `1`, `true`, `yes`, `on`, `ok` will be returned as `True`.
    d.get_bool(key, default=False)

.. code:: python

    # Get value by key or keypath trying to return it as list of bool values.
    # If separator is specified and value is a string it will be splitted.
    d.get_bool_list(key, default=[], separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as datetime.
    # If format is not specified it will be autodetected.
    # If options and value is in options return value otherwise default.
    d.get_datetime(key, default=None, format=None, options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of datetime values.
    # If separator is specified and value is a string it will be splitted.
    d.get_datetime_list(key, default=[], format=None, separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as Decimal.
    # If options and value is in options return value otherwise default.
    d.get_decimal(key, default=Decimal('0.0'), options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of Decimal values.
    # If separator is specified and value is a string it will be splitted.
    d.get_decimal_list(key, default=[], separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as dict.
    # If value is a json string it will be automatically decoded.
    d.get_dict(key, default={})

.. code:: python

    # Get value by key or keypath trying to return it as float.
    # If options and value is in options return value otherwise default.
    d.get_float(key, default=0.0, options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of float values.
    # If separator is specified and value is a string it will be splitted.
    d.get_float_list(key, default=[], separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as int.
    # If options and value is in options return value otherwise default.
    d.get_int(key, default=0, options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of int values.
    # If separator is specified and value is a string it will be splitted.
    d.get_int_list(key, default=[], separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as list.
    # If separator is specified and value is a string it will be splitted.
    d.get_list(key, default=[], separator=',')

.. code:: python

    # Get list by key or keypath and return value at the specified index.
    # If separator is specified and list value is a string it will be splitted.
    d.get_list_item(key, index=0, default=None, separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as slug.
    # If options and value is in options return value otherwise default.
    d.get_slug(key, default='', options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of slug values.
    # If separator is specified and value is a string it will be splitted.
    d.get_slug_list(key, default=[], separator=',')

.. code:: python

    # Get value by key or keypath trying to return it as string.
    # Encoding issues will be automatically fixed.
    # If options and value is in options return value otherwise default.
    d.get_str(key, default='', options=[])

.. code:: python

    # Get value by key or keypath trying to return it as list of str values.
    # If separator is specified and value is a string it will be splitted.
    d.get_str_list(key, default=[], separator=',')

License
-------

Released under `MIT License <LICENSE.txt>`__.

.. |Build Status| image:: https://travis-ci.org/fabiocaccamo/python-benedict.svg?branch=master
.. |codecov| image:: https://codecov.io/gh/fabiocaccamo/python-benedict/branch/master/graph/badge.svg
.. |Codacy| image:: https://api.codacy.com/project/badge/Grade/0dbd5cc2089f4dce80a0e49e6822be3c
.. |Requirements Status| image:: https://requires.io/github/fabiocaccamo/python-benedict/requirements.svg?branch=master
.. |PyPI version| image:: https://badge.fury.io/py/python-benedict.svg
.. |PyPI downloads| image:: https://img.shields.io/pypi/dm/python-benedict.svg
.. |Py versions| image:: https://img.shields.io/pypi/pyversions/python-benedict.svg
.. |License| image:: https://img.shields.io/pypi/l/python-benedict.svg


