Show More
Commit Description:
merge with algo and add brython files that were missing
Commit Description:
merge with algo and add brython files that were missing
References:
File last commit:
Show/Diff file:
Action:
lib/assets/Lib/xml/dom/minicompat.py
| 105 lines
| 3.3 KiB
| text/x-python
| PythonLexer
|
r584 | """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 | ||||
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.") | ||||
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)) | ||||
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) | ||||