optionaldict.py 999 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import sys
  4. __version__ = '0.1.1'
  5. __author__ = 'messense'
  6. __all__ = ['optionaldict', 'OptionalDict']
  7. PY3 = sys.version_info[0] == 3
  8. if PY3:
  9. def _iteritems(d, **kwargs):
  10. return iter(d.items(**kwargs))
  11. else:
  12. def _iteritems(d, **kwargs):
  13. return iter(d.iteritems(**kwargs))
  14. class OptionalDict(dict):
  15. """A dictionary only store non none values"""
  16. def __init__(self, *args, **kwargs):
  17. self.update(*args, **kwargs)
  18. def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
  19. if value is None:
  20. return
  21. return dict_setitem(self, key, value)
  22. def update(self, *args, **kwargs):
  23. for k, v in _iteritems(dict(*args, **kwargs)):
  24. self[k] = v
  25. def setdefault(self, k, d=None, dict_setdefault=dict.setdefault):
  26. if d is None:
  27. return
  28. return dict_setdefault(self, k, d)
  29. optionaldict = OptionalDict