Browse Source

added class AutoDict

Fabian Peter Hammerle 8 years ago
parent
commit
7b2b788a08
2 changed files with 21 additions and 0 deletions
  1. 5 0
      ioex/__init__.py
  2. 16 0
      tests/test_autodict.py

+ 5 - 0
ioex/__init__.py

@@ -96,3 +96,8 @@ def yaml_diff(a, b, dumper = None, colors = False):
     if colors:
         diff_lines = [u'%s%s%s' % (yaml_diff_colors[l[0]], l, ioex.shell.TextColor.default) for l in diff_lines]
     return u''.join(diff_lines)
+
+class AutoDict(dict):
+    def __missing__(self, key):
+        value = self[key] = type(self)()
+        return value

+ 16 - 0
tests/test_autodict.py

@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+import pytest
+
+from ioex import AutoDict
+
+def test_assign():
+    d = AutoDict()
+    assert d == {}
+    d['A'] = 1
+    assert d == {'A': 1}
+    d['B'][2] = 'b'
+    assert d == {'A': 1, 'B': {2: 'b'}}
+    del d['A']
+    assert d == {'B': {2: 'b'}}
+    d['C'][3]['c'] = ('Γ', 'γ')
+    assert d == {'B': {2: 'b'}, 'C': {3: {'c': ('Γ', 'γ')}}}