summaryrefslogtreecommitdiff
path: root/docutils
diff options
context:
space:
mode:
authormilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2019-12-23 21:43:20 +0000
committermilde <milde@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2019-12-23 21:43:20 +0000
commit4bdd562fc0a0eaf6178bd60b1e567ef71f30057e (patch)
tree609875dcf871563b86b6d7fab95195852e1dc23e /docutils
parent9d01f14e3e6e5b2056e7d7f41372cdde80bc8b10 (diff)
downloaddocutils-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.py75
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)
# ==============================