[Python-checkins] CVS: python/dist/src/Lib pydoc.py,1.45,1.46

Tim Peters tim_one@users.sourceforge.net
2001年9月24日 01:05:13 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv2025/python/Lib
Modified Files:
	pydoc.py 
Log Message:
More work on class display:
+ Minor code cleanup, generalization and simplification.
+ "Do something" to make the attribute aggregation more apparent:
 - In text mode, stick a "* " at the front of subgroup header lines.
 - In GUI mode, display a horizontal rule between subgroups.
 For GUI mode, this is a huge improvement, at least under IE.
Index: pydoc.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pydoc.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** pydoc.py	2001年09月24日 04:47:19	1.45
--- pydoc.py	2001年09月24日 08:05:11	1.46
***************
*** 129,140 ****
 return methods
 
! def _split_class_attrs(attrs, predicate):
 yes = []
 no = []
! for tuple in attrs:
! if predicate(tuple):
! yes.append(tuple)
 else:
! no.append(tuple)
 return yes, no
 
--- 129,147 ----
 return methods
 
! def _split_list(s, predicate):
! """Split sequence s via predicate, and return pair ([true], [false]).
! 
! The return value is a 2-tuple of lists,
! ([x for x in s if predicate(x)],
! [x for x in s if not predicate(x)])
! """
! 
 yes = []
 no = []
! for x in s:
! if predicate(x):
! yes.append(x)
 else:
! no.append(x)
 return yes, no
 
***************
*** 609,615 ****
 push = contents.append
 
 def spill(msg, attrs, predicate):
! ok, attrs = _split_class_attrs(attrs, predicate)
 if ok:
 push(msg)
 for name, kind, homecls, value in ok:
--- 616,633 ----
 push = contents.append
 
+ # Cute little class to pump out a horizontal rule between sections.
+ class HorizontalRule:
+ def __init__(self):
+ self.needone = 0
+ def maybe(self):
+ if self.needone:
+ push('<hr>\n')
+ self.needone = 1
+ hr = HorizontalRule()
+ 
 def spill(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
+ hr.maybe()
 push(msg)
 for name, kind, homecls, value in ok:
***************
*** 622,628 ****
 # and it doesn't appear that the getter, setter and del'er methods
 # are discoverable. For now, just pump out their names.
! def spillproperties(msg, attrs):
! ok, attrs = _split_class_attrs(attrs, lambda t: t[1] == 'property')
 if ok:
 push(msg)
 for name, kind, homecls, value in ok:
--- 640,647 ----
 # and it doesn't appear that the getter, setter and del'er methods
 # are discoverable. For now, just pump out their names.
! def spillproperties(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
+ hr.maybe()
 push(msg)
 for name, kind, homecls, value in ok:
***************
*** 630,636 ****
 return attrs
 
! def spilldata(msg, attrs):
! ok, attrs = _split_class_attrs(attrs, lambda t: t[1] == 'data')
 if ok:
 push(msg)
 for name, kind, homecls, value in ok:
--- 649,656 ----
 return attrs
 
! def spilldata(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
+ hr.maybe()
 push(msg)
 for name, kind, homecls, value in ok:
***************
*** 659,674 ****
 pass
 
! # All attrs defined in this class come first.
! attrs, inherited = _split_class_attrs(attrs,
! lambda t: t[2] is object)
! # Sort inherited attrs by name of defining class.
! inherited.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
 
! thisclass = object
! while attrs or inherited:
 if thisclass is object:
 tag = "defined here"
 else:
! tag = "inherited from class %s" % self.classlink(thisclass,
 object.__module__)
 tag += ':<br>\n'
--- 679,693 ----
 pass
 
! # Sort attrs by name of defining class.
! attrs.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
 
! thisclass = object # list attrs defined here first
! while attrs:
! attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
! 
 if thisclass is object:
 tag = "defined here"
 else:
! tag = "inherited from %s" % self.classlink(thisclass,
 object.__module__)
 tag += ':<br>\n'
***************
*** 684,689 ****
 attrs = spill("Static methods %s" % tag, attrs,
 lambda t: t[1] == 'static method')
! attrs = spillproperties("Properties %s" % tag, attrs)
! attrs = spilldata("Data %s" % tag, attrs)
 assert attrs == []
 
--- 703,710 ----
 attrs = spill("Static methods %s" % tag, attrs,
 lambda t: t[1] == 'static method')
! attrs = spillproperties("Properties %s" % tag, attrs,
! lambda t: t[1] == 'property')
! attrs = spilldata("Data %s" % tag, attrs,
! lambda t: t[1] == 'data')
 assert attrs == []
 
***************
*** 693,698 ****
 attrs = inherited
 thisclass = attrs[0][2]
- attrs, inherited = _split_class_attrs(attrs,
- lambda t: t[2] is thisclass)
 
 contents = ''.join(contents)
--- 714,717 ----
***************
*** 974,978 ****
 
 def spill(msg, attrs, predicate):
! ok, attrs = _split_class_attrs(attrs, predicate)
 if ok:
 push(msg)
--- 993,997 ----
 
 def spill(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
 push(msg)
***************
*** 985,990 ****
 # and it doesn't appear that the getter, setter and del'er methods
 # are discoverable. For now, just pump out their names.
! def spillproperties(msg, attrs):
! ok, attrs = _split_class_attrs(attrs, lambda t: t[1] == 'property')
 if ok:
 push(msg)
--- 1004,1009 ----
 # and it doesn't appear that the getter, setter and del'er methods
 # are discoverable. For now, just pump out their names.
! def spillproperties(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
 push(msg)
***************
*** 993,998 ****
 return attrs
 
! def spilldata(msg, attrs):
! ok, attrs = _split_class_attrs(attrs, lambda t: t[1] == 'data')
 if ok:
 push(msg)
--- 1012,1017 ----
 return attrs
 
! def spilldata(msg, attrs, predicate):
! ok, attrs = _split_list(attrs, predicate)
 if ok:
 push(msg)
***************
*** 1005,1021 ****
 attrs = inspect.classify_class_attrs(object)
 
! # All attrs defined in this class come first.
! attrs, inherited = _split_class_attrs(attrs,
! lambda t: t[2] is object)
! # Sort inherited attrs by name of defining class.
! inherited.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
 
! thisclass = object
! while attrs or inherited:
 if thisclass is object:
 tag = "defined here"
 else:
! tag = "inherited from class %s" % classname(thisclass,
! object.__module__)
 
 # Sort attrs by name.
--- 1024,1039 ----
 attrs = inspect.classify_class_attrs(object)
 
! # Sort attrs by name of defining class.
! attrs.sort(lambda t1, t2: cmp(t1[2].__name__, t2[2].__name__))
 
! thisclass = object # list attrs defined here first
! while attrs:
! attrs, inherited = _split_list(attrs, lambda t: t[2] is thisclass)
! 
 if thisclass is object:
 tag = "defined here"
 else:
! tag = "inherited from %s" % classname(thisclass,
! object.__module__)
 
 # Sort attrs by name.
***************
*** 1023,1034 ****
 
 # Pump out the attrs, segregated by kind.
! attrs = spill("Methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'method')
! attrs = spill("Class methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'class method')
! attrs = spill("Static methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'static method')
! attrs = spillproperties("Properties %s:\n" % tag, attrs)
! attrs = spilldata("Data %s:\n" % tag, attrs)
 assert attrs == []
 
--- 1041,1054 ----
 
 # Pump out the attrs, segregated by kind.
! attrs = spill("* Methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'method')
! attrs = spill("* Class methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'class method')
! attrs = spill("* Static methods %s:\n" % tag, attrs,
 lambda t: t[1] == 'static method')
! attrs = spillproperties("* Properties %s:\n" % tag, attrs,
! lambda t: t[1] == 'property')
! attrs = spilldata("* Data %s:\n" % tag, attrs,
! lambda t: t[1] == 'data')
 assert attrs == []
 
***************
*** 1038,1043 ****
 attrs = inherited
 thisclass = attrs[0][2]
- attrs, inherited = _split_class_attrs(attrs,
- lambda t: t[2] is thisclass)
 
 contents = '\n'.join(contents)
--- 1058,1061 ----

AltStyle によって変換されたページ (->オリジナル) /