[master 01/15] IndexedDict class for storing the installer steps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



---
 pyanaconda/indexed_dict.py                 |   46 ++++++++++++++++++++++++++++
 tests/pyanaconda_test/indexed_dict_test.py |   39 +++++++++++++++++++++++
 2 files changed, 85 insertions(+), 0 deletions(-)
 create mode 100644 pyanaconda/indexed_dict.py
 create mode 100644 tests/pyanaconda_test/indexed_dict_test.py

diff --git a/pyanaconda/indexed_dict.py b/pyanaconda/indexed_dict.py
new file mode 100644
index 0000000..eb5050c
--- /dev/null
+++ b/pyanaconda/indexed_dict.py
@@ -0,0 +1,46 @@
+# indexed_dict.py
+# Implements IndexedDictionary class.
+#
+# Copyright (C) 2009  Red Hat, Inc.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# the GNU General Public License v.2, or (at your option) any later version.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY expressed or implied, including the implied warranties of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
+# Public License for more details.  You should have received a copy of the
+# GNU General Public License along with this program; if not, write to the
+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
+# source code or documentation are not subject to the GNU General Public
+# License and may only be used or replicated with the express permission of
+# Red Hat, Inc.
+#
+
+class IndexedDict(dict):
+    """ Indexed dictionary that remembers order of the inserted elements.
+
+        Values can be inserted with string keys only, but referenced by both
+        string keys or index.
+
+        There's a unit test for the class, please maintain it along.
+    """
+    def __init__(self):
+        super(IndexedDict, self).__init__()
+        self._indexes = []
+
+    def __getitem__(self, key):
+        if type(key) is int:
+            key = self._indexes[key]
+        return super(IndexedDict, self).__getitem__(key)
+
+    def __setitem__(self, key, value):
+        if type(key) is int:
+            raise TypeError("IndexedDict only accepts strings as new keys")
+        assert(len(self) == len(self._indexes))
+        self._indexes.append(key)
+        return super(IndexedDict, self).__setitem__(key, value)
+
+    def index(self, string_key):
+        return self._indexes.index(string_key)
diff --git a/tests/pyanaconda_test/indexed_dict_test.py b/tests/pyanaconda_test/indexed_dict_test.py
new file mode 100644
index 0000000..c56a9df
--- /dev/null
+++ b/tests/pyanaconda_test/indexed_dict_test.py
@@ -0,0 +1,39 @@
+import mock
+from pyanaconda.indexed_dict import IndexedDict
+
+class IndexedDictTest(mock.TestCase):
+    def instantiation_test(self):
+        d = IndexedDict()
+        self.assertIsInstance(d, IndexedDict)
+
+    def append_test(self):
+        d = IndexedDict()
+        stored_data = [1, 2, 3]
+        d["some_step"] = stored_data
+        self.assertIs(d["some_step"], stored_data)
+
+    def cant_append_test(self):
+        def assign_int(indexed_dict):
+            indexed_dict[3] = [1, 2, 3]
+        d = IndexedDict()
+        self.assertRaises(TypeError, d.__setitem__, 3, [1, 2, 3])
+
+    def referencing_test(self):
+        d = IndexedDict()
+        d["first"] = 10
+        d["second"] = 20
+        d["third"] = 30
+        self.assertEqual(d[0], 10)
+        self.assertEqual(d[1], 20)
+        self.assertEqual(d[2], 30)
+        self.assertRaises(IndexError, d.__getitem__, 3)
+
+    def index_test(self):
+        d = IndexedDict()
+        d["first"] = 10
+        d["second"] = 20
+        d["third"] = 30
+
+        self.assertEqual(d.index("first"), 0)
+        self.assertEqual(d.index("second"), 1)
+        self.assertEqual(d.index("third"), 2)
\ No newline at end of file
-- 
1.7.3.3

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux