Library to test all fields of a python dictionary
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Build Status

Library to explicitly test all the fields of a python dictionary, even when you don't know all of their values.


From PyPi:

$ pip install dsert

From GitHub:

$ pip install git+


>>> from dsert import assert_valid_dict
>>> my_dict = {'balance': 123.45, 'status': 'homeowner', 'good_credit': True}

Check all the fields (will return None):

>>> assert_valid_dict(my_dict, known_contents={'balance': 123.45}, known_types={'status': str, 'good_credit': bool})

Check some of the fields (will raise an Exception with helpful debug instructions):

>>> assert_valid_dict(my_dict, known_contents={'balance': 123.45})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "dsert/", line 35, in assert_valid_dict
    raise KeyError(err_msg)
KeyError: "Keys for {'good_credit': True, 'status': 'homeowner'} not in known_contents keys (['balance']), known_types keys ([]), nor excluded_fields ([])."


Most tests are opt-in, where we test certain keys/values only:

>>> self.assertEqual(some_dict['a'], 1)

This can work well, but it can also cause situations where the tests pass and yet a bug has slipped in!

From The Zen of Python

Explicit is better than implicit.

Coming Soon

More complex validators. Don't just test that a dictionary value is of type int, test that it's a positive/even/prime int.


Check out repo:

$ git checkout git+ && cd dsert

Install locally

$ pip install --editable .

Confirm tests pass:

$ nosetests .

(this requires having nose installed)

Make your changes and confirm that tests still pass:

$ nosetests .

Updating PyPi

You must have the credentials in order to push updates to PyPi.

Create a .pypirc file in your home directory:

$ cat ~/.pypirc

repository =
username = paxos
password = <password goes here>

Install twine:

$ pip install twine

Create a distribution:

$ python sdist bdist_wheel

Push your distribution to PyPi:

$ twine upload dist/* -r pypi

To test this process, you can use PyPi's test server. Add an entry to .pypirc that looks like this with whatever creds you create for testpypi:

repository =
username = <your user name goes here>
password = <your password goes here>

Then use the following command to push your distrobution to test PyPi:

$ twine upload dist/* -r testpypi