diff options
| author | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2019-12-23 21:43:20 +0000 |
|---|---|---|
| committer | milde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> | 2019-12-23 21:43:20 +0000 |
| commit | 4bdd562fc0a0eaf6178bd60b1e567ef71f30057e (patch) | |
| tree | 609875dcf871563b86b6d7fab95195852e1dc23e /docutils | |
| parent | 9d01f14e3e6e5b2056e7d7f41372cdde80bc8b10 (diff) | |
| download | docutils-4bdd562fc0a0eaf6178bd60b1e567ef71f30057e.tar.gz | |
Use decorator in _traversal_list auxiliary class.
git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk@8446 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'docutils')
| -rw-r--r-- | docutils/docutils/nodes.py | 75 |
1 files changed, 25 insertions, 50 deletions
diff --git a/docutils/docutils/nodes.py b/docutils/docutils/nodes.py index 2e84c74cf..562f0254f 100644 --- a/docutils/docutils/nodes.py +++ b/docutils/docutils/nodes.py @@ -34,57 +34,32 @@ if sys.version_info >= (3, 0): unicode = str # noqa basestring = str # noqa - -class _traversal_list(): +class _traversal_list(list): # auxiliary class to report a FutureWarning - msg = ("\n The iterable returned by Node.traverse()" - "\n will become an iterator instead of a list in " - "Docutils > 0.16.") - - def __init__(self, iterable): - self.nodes = list(iterable) - - # iterating is not affected from the future change: - def __iter__(self): - return iter(self.nodes) - - def __len__(self): - # used in Python 2.7 when typecasting to `list` or `tuple` - return len(self.nodes) - - # other methods give a FutureWarning: - - def __getattr__(self, name): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return getattr(self.nodes, name) - - def __getitem__(self, i): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes[i] - - def __getslice__(self, i, j): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes[i:j] - - def __reversed__(self): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes.__reversed__() - - def append(self, object): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes.append(object) - - def extend(self, iterable): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes.extend(iterable) - - def pop(self): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes.pop() - - def reverse(self): - warnings.warn(self.msg, FutureWarning, stacklevel=2) - return self.nodes.reverse() + done = False + def _warning_decorator(fun): + msg = ("\n The iterable returned by Node.traverse()" + "\n will become an iterator instead of a list in " + "Docutils > 0.16.") + def wrapper(self, *args, **kwargs): + if not self.done: + warnings.warn(msg, FutureWarning, stacklevel=2) + self.done = True + return fun(self, *args, **kwargs) + return wrapper + + __add__ = _warning_decorator(list.__add__) + __contains__ = _warning_decorator(list.__contains__) + __getitem__ = _warning_decorator(list.__getitem__) + __reversed__ = _warning_decorator(list.__reversed__) + __setitem__ = _warning_decorator(list.__setitem__) + append = _warning_decorator(list.append) + count = _warning_decorator(list.count) + extend = _warning_decorator(list.extend) + index = _warning_decorator(list.index) + insert = _warning_decorator(list.insert) + pop = _warning_decorator(list.pop) + reverse = _warning_decorator(list.reverse) # ============================== |
