123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- """Python version compatibility support for minidom.
- This module contains internal implementation details and
- should not be imported; use xml.dom.minidom instead.
- """
- # 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
- StringTypes = (str,)
- 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.")
- # For backward compatibility
- def __setstate__(self, state):
- if state is None:
- 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))
- 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)
|