diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2015-11-12 11:34:39 +0200 |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2015-11-12 11:34:39 +0200 |
commit | b1085ec4b4e23ba2d17c236c00c5429e36b87a29 (patch) | |
tree | bd2a251116c31e91b207dc174278ccdd043f58f3 /Lib/pydoc.py | |
parent | 97b037327814b3243f881eebfeb77bbdfe38c51a (diff) | |
parent | 9178e265018d62f1e56de870e2df494f1a4f0014 (diff) | |
download | cpython-b1085ec4b4e23ba2d17c236c00c5429e36b87a29.tar.gz |
Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now
rejects builtin types with not defined __new__.
Added tests for non-pickleable types.
Diffstat (limited to 'Lib/pydoc.py')
-rw-r--r--[-rwxr-xr-x] | Lib/pydoc.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index a9c04f0728..a73298d715 100755..100644 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -209,6 +209,18 @@ def classify_class_attrs(object): results.append((name, kind, cls, value)) return results +def sort_attributes(attrs, object): + 'Sort the attrs list in-place by _fields and then alphabetically by name' + # This allows data descriptors to be ordered according + # to a _fields attribute if present. + fields = getattr(object, '_fields', []) + try: + field_order = {name : i-len(fields) for (i, name) in enumerate(fields)} + except TypeError: + field_order = {} + keyfunc = lambda attr: (field_order.get(attr[0], 0), attr[0]) + attrs.sort(key=keyfunc) + # ----------------------------------------------------- module manipulation def ispackage(path): @@ -867,8 +879,7 @@ class HTMLDoc(Doc): object.__module__) tag += ':<br>\n' - # Sort attrs by name. - attrs.sort(key=lambda t: t[0]) + sort_attributes(attrs, object) # Pump out the attrs, segregated by kind. attrs = spill('Methods %s' % tag, attrs, @@ -1286,8 +1297,8 @@ location listed above. else: tag = "inherited from %s" % classname(thisclass, object.__module__) - # Sort attrs by name. - attrs.sort() + + sort_attributes(attrs, object) # Pump out the attrs, segregated by kind. attrs = spill("Methods %s:\n" % tag, attrs, |