The Lib directory from the cPython 2.7.10 distribution. These files are unchanged and set the baseline for subsequent commits. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Daryl McDaniel <edk2-lists@mc2research.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18740 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Python version compatibility support for minidom."""
 | 
						|
 | 
						|
# This module should only be imported using "import *".
 | 
						|
#
 | 
						|
# The following names are defined:
 | 
						|
#
 | 
						|
#   NodeList      -- lightest possible NodeList implementation
 | 
						|
#
 | 
						|
#   EmptyNodeList -- lightest possible NodeList that is guaranteed to
 | 
						|
#                    remain empty (immutable)
 | 
						|
#
 | 
						|
#   StringTypes   -- tuple of defined string types
 | 
						|
#
 | 
						|
#   defproperty   -- function used in conjunction with GetattrMagic;
 | 
						|
#                    using these together is needed to make them work
 | 
						|
#                    as efficiently as possible in both Python 2.2+
 | 
						|
#                    and older versions.  For example:
 | 
						|
#
 | 
						|
#                        class MyClass(GetattrMagic):
 | 
						|
#                            def _get_myattr(self):
 | 
						|
#                                return something
 | 
						|
#
 | 
						|
#                        defproperty(MyClass, "myattr",
 | 
						|
#                                    "return some value")
 | 
						|
#
 | 
						|
#                    For Python 2.2 and newer, this will construct a
 | 
						|
#                    property object on the class, which avoids
 | 
						|
#                    needing to override __getattr__().  It will only
 | 
						|
#                    work for read-only attributes.
 | 
						|
#
 | 
						|
#                    For older versions of Python, inheriting from
 | 
						|
#                    GetattrMagic will use the traditional
 | 
						|
#                    __getattr__() hackery to achieve the same effect,
 | 
						|
#                    but less efficiently.
 | 
						|
#
 | 
						|
#                    defproperty() should be used for each version of
 | 
						|
#                    the relevant _get_<property>() function.
 | 
						|
 | 
						|
__all__ = ["NodeList", "EmptyNodeList", "StringTypes", "defproperty"]
 | 
						|
 | 
						|
import xml.dom
 | 
						|
 | 
						|
try:
 | 
						|
    unicode
 | 
						|
except NameError:
 | 
						|
    StringTypes = type(''),
 | 
						|
else:
 | 
						|
    StringTypes = type(''), type(unicode(''))
 | 
						|
 | 
						|
 | 
						|
class NodeList(list):
 | 
						|
    __slots__ = ()
 | 
						|
 | 
						|
    def item(self, index):
 | 
						|
        if 0 <= index < len(self):
 | 
						|
            return self[index]
 | 
						|
 | 
						|
    def _get_length(self):
 | 
						|
        return len(self)
 | 
						|
 | 
						|
    def _set_length(self, value):
 | 
						|
        raise xml.dom.NoModificationAllowedErr(
 | 
						|
            "attempt to modify read-only attribute 'length'")
 | 
						|
 | 
						|
    length = property(_get_length, _set_length,
 | 
						|
                      doc="The number of nodes in the NodeList.")
 | 
						|
 | 
						|
    def __getstate__(self):
 | 
						|
        return list(self)
 | 
						|
 | 
						|
    def __setstate__(self, state):
 | 
						|
        self[:] = state
 | 
						|
 | 
						|
 | 
						|
class EmptyNodeList(tuple):
 | 
						|
    __slots__ = ()
 | 
						|
 | 
						|
    def __add__(self, other):
 | 
						|
        NL = NodeList()
 | 
						|
        NL.extend(other)
 | 
						|
        return NL
 | 
						|
 | 
						|
    def __radd__(self, other):
 | 
						|
        NL = NodeList()
 | 
						|
        NL.extend(other)
 | 
						|
        return NL
 | 
						|
 | 
						|
    def item(self, index):
 | 
						|
        return None
 | 
						|
 | 
						|
    def _get_length(self):
 | 
						|
        return 0
 | 
						|
 | 
						|
    def _set_length(self, value):
 | 
						|
        raise xml.dom.NoModificationAllowedErr(
 | 
						|
            "attempt to modify read-only attribute 'length'")
 | 
						|
 | 
						|
    length = property(_get_length, _set_length,
 | 
						|
                      doc="The number of nodes in the NodeList.")
 | 
						|
 | 
						|
 | 
						|
def defproperty(klass, name, doc):
 | 
						|
    get = getattr(klass, ("_get_" + name)).im_func
 | 
						|
    def set(self, value, name=name):
 | 
						|
        raise xml.dom.NoModificationAllowedErr(
 | 
						|
            "attempt to modify read-only attribute " + repr(name))
 | 
						|
    assert not hasattr(klass, "_set_" + name), \
 | 
						|
           "expected not to find _set_" + name
 | 
						|
    prop = property(get, set, doc=doc)
 | 
						|
    setattr(klass, name, prop)
 |