]> git.proxmox.com Git - mirror_edk2.git/blobdiff - AppPkg/Applications/Python/Python-2.7.10/Lib/xml/dom/minicompat.py
AppPkg/Applications/Python/Python-2.7.10: Initial Checkin part 4/5.
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Lib / xml / dom / minicompat.py
diff --git a/AppPkg/Applications/Python/Python-2.7.10/Lib/xml/dom/minicompat.py b/AppPkg/Applications/Python/Python-2.7.10/Lib/xml/dom/minicompat.py
new file mode 100644 (file)
index 0000000..a5fcee0
--- /dev/null
@@ -0,0 +1,110 @@
+"""Python version compatibility support for minidom."""\r
+\r
+# This module should only be imported using "import *".\r
+#\r
+# The following names are defined:\r
+#\r
+#   NodeList      -- lightest possible NodeList implementation\r
+#\r
+#   EmptyNodeList -- lightest possible NodeList that is guaranteed to\r
+#                    remain empty (immutable)\r
+#\r
+#   StringTypes   -- tuple of defined string types\r
+#\r
+#   defproperty   -- function used in conjunction with GetattrMagic;\r
+#                    using these together is needed to make them work\r
+#                    as efficiently as possible in both Python 2.2+\r
+#                    and older versions.  For example:\r
+#\r
+#                        class MyClass(GetattrMagic):\r
+#                            def _get_myattr(self):\r
+#                                return something\r
+#\r
+#                        defproperty(MyClass, "myattr",\r
+#                                    "return some value")\r
+#\r
+#                    For Python 2.2 and newer, this will construct a\r
+#                    property object on the class, which avoids\r
+#                    needing to override __getattr__().  It will only\r
+#                    work for read-only attributes.\r
+#\r
+#                    For older versions of Python, inheriting from\r
+#                    GetattrMagic will use the traditional\r
+#                    __getattr__() hackery to achieve the same effect,\r
+#                    but less efficiently.\r
+#\r
+#                    defproperty() should be used for each version of\r
+#                    the relevant _get_<property>() function.\r
+\r
+__all__ = ["NodeList", "EmptyNodeList", "StringTypes", "defproperty"]\r
+\r
+import xml.dom\r
+\r
+try:\r
+    unicode\r
+except NameError:\r
+    StringTypes = type(''),\r
+else:\r
+    StringTypes = type(''), type(unicode(''))\r
+\r
+\r
+class NodeList(list):\r
+    __slots__ = ()\r
+\r
+    def item(self, index):\r
+        if 0 <= index < len(self):\r
+            return self[index]\r
+\r
+    def _get_length(self):\r
+        return len(self)\r
+\r
+    def _set_length(self, value):\r
+        raise xml.dom.NoModificationAllowedErr(\r
+            "attempt to modify read-only attribute 'length'")\r
+\r
+    length = property(_get_length, _set_length,\r
+                      doc="The number of nodes in the NodeList.")\r
+\r
+    def __getstate__(self):\r
+        return list(self)\r
+\r
+    def __setstate__(self, state):\r
+        self[:] = state\r
+\r
+\r
+class EmptyNodeList(tuple):\r
+    __slots__ = ()\r
+\r
+    def __add__(self, other):\r
+        NL = NodeList()\r
+        NL.extend(other)\r
+        return NL\r
+\r
+    def __radd__(self, other):\r
+        NL = NodeList()\r
+        NL.extend(other)\r
+        return NL\r
+\r
+    def item(self, index):\r
+        return None\r
+\r
+    def _get_length(self):\r
+        return 0\r
+\r
+    def _set_length(self, value):\r
+        raise xml.dom.NoModificationAllowedErr(\r
+            "attempt to modify read-only attribute 'length'")\r
+\r
+    length = property(_get_length, _set_length,\r
+                      doc="The number of nodes in the NodeList.")\r
+\r
+\r
+def defproperty(klass, name, doc):\r
+    get = getattr(klass, ("_get_" + name)).im_func\r
+    def set(self, value, name=name):\r
+        raise xml.dom.NoModificationAllowedErr(\r
+            "attempt to modify read-only attribute " + repr(name))\r
+    assert not hasattr(klass, "_set_" + name), \\r
+           "expected not to find _set_" + name\r
+    prop = property(get, set, doc=doc)\r
+    setattr(klass, name, prop)\r