Revision: 6526
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6526&view=rev
Author:   jdh2358
Date:     2008-12-08 23:28:55 +0000 (Mon, 08 Dec 2008)

Log Message:
-----------
add support for docstring.hardcopy to format the docstrings less verbosesly for 
interactive use

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/doc/matplotlibrc
    trunk/matplotlib/lib/matplotlib/artist.py
    trunk/matplotlib/lib/matplotlib/rcsetup.py
    trunk/matplotlib/matplotlibrc.template

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2008-12-08 23:27:08 UTC (rev 6525)
+++ trunk/matplotlib/CHANGELOG  2008-12-08 23:28:55 UTC (rev 6526)
@@ -1,3 +1,13 @@
+2008-12-08 Some of the changes Michael made to improve the output of
+           the property tables in the rest docs broke of made
+           difficult to use some of the interactive doc helpers, eg
+           setp and getp.  Having all the rest markup in the ipython
+           shell also confused the docstrings.  I added a new rc param
+           docstring.harcopy, to format the docstrings differently for
+           hardcopy and other use.  Ther ArtistInspector could use a
+           little refactoring now since there is duplication of effort
+           between the rest out put and the non-rest output - JDH
+
 2008-12-08 Updated spectral methods (psd, csd, etc.) to scale one-sided
            densities by a factor of 2 and, optionally, scale all densities
            by the sampling frequency.  This gives better MatLab

Modified: trunk/matplotlib/doc/matplotlibrc
===================================================================
--- trunk/matplotlib/doc/matplotlibrc   2008-12-08 23:27:08 UTC (rev 6525)
+++ trunk/matplotlib/doc/matplotlibrc   2008-12-08 23:28:55 UTC (rev 6526)
@@ -294,6 +294,9 @@
 #svg.image_noscale : False     # suppress scaling of raster data embedded in 
SVG
 #svg.embed_chars : True       # embed character outlines in the SVG file
 
+# docstring params
+docstring.hardcopy = True  # set this when you want to generate hardcopy 
docstring
+
 # Set the verbose flags.  This controls how much information
 # matplotlib gives you at runtime and where it goes.  The verbosity
 # levels are: silent, helpful, debug, debug-annoying.  Any level is
@@ -311,5 +314,6 @@
 #
 # You can access the verbose instance in your code
 #   from matplotlib import verbose.
+
 #verbose.level  : silent      # one of silent, helpful, debug, debug-annoying
 #verbose.fileo  : sys.stdout  # a log filename, sys.stdout or sys.stderr

Modified: trunk/matplotlib/lib/matplotlib/artist.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/artist.py   2008-12-08 23:27:08 UTC (rev 
6525)
+++ trunk/matplotlib/lib/matplotlib/artist.py   2008-12-08 23:28:55 UTC (rev 
6526)
@@ -1,5 +1,6 @@
 from __future__ import division
 import re, warnings
+import matplotlib
 import matplotlib.cbook as cbook
 from transforms import Bbox, IdentityTransform, TransformedBbox, 
TransformedPath
 from path import Path
@@ -640,9 +641,12 @@
         type) and it is your responsibility to make sure this is so.
         """
         if cbook.iterable(o) and len(o): o = o[0]
+
+        self.oorig = o
         if not isinstance(o, type):
             o = type(o)
         self.o = o
+
         self.aliasd = self.get_aliases()
 
     def get_aliases(self):
@@ -735,7 +739,7 @@
         if ds is None: return False
         return ds.startswith('alias for ')
 
-    def aliased_name(self, s, target):
+    def aliased_name(self, s):
         """
         return 'PROPNAME or alias' if *s* has an alias, else return
         PROPNAME.
@@ -746,11 +750,28 @@
         """
 
         if s in self.aliasd:
+            return s + ''.join([' or %s' % x for x in self.aliasd[s].keys()])
+        else:
+            return s
+
+
+    def aliased_name_rest(self, s, target):
+        """
+        return 'PROPNAME or alias' if *s* has an alias, else return
+        PROPNAME formatted for ReST
+
+        E.g. for the line markerfacecolor property, which has an
+        alias, return 'markerfacecolor or mfc' and for the transform
+        property, which does not, return 'transform'
+        """
+
+        if s in self.aliasd:
             aliases = ''.join([' or %s' % x for x in self.aliasd[s].keys()])
         else:
             aliases = ''
         return ':meth:`%s <%s>`%s' % (s, target, aliases)
 
+
     def pprint_setters(self, prop=None, leadingspace=2):
         """
         If *prop* is *None*, return a list of strings of all settable properies
@@ -772,8 +793,36 @@
         attrs.sort()
         lines = []
 
+        for prop, path in attrs:
+            accepts = self.get_valid_values(prop)
+            name = self.aliased_name(prop)
+
+            lines.append('%s%s: %s' %(pad, name, accepts))
+        return lines
+
+    def pprint_setters_rest(self, prop=None, leadingspace=2):
+        """
+        If *prop* is *None*, return a list of strings of all settable properies
+        and their valid values.  Format the output for ReST
+
+        If *prop* is not *None*, it is a valid property name and that
+        property will be returned as a string of property : valid
+        values.
+        """
+        if leadingspace:
+            pad = ' '*leadingspace
+        else:
+            pad  = ''
+        if prop is not None:
+            accepts = self.get_valid_values(prop)
+            return '%s%s: %s' %(pad, prop, accepts)
+
+        attrs = self._get_setters_and_targets()
+        attrs.sort()
+        lines = []
+
         ########
-        names = [self.aliased_name(prop, target) for prop, target in attrs]
+        names = [self.aliased_name_rest(prop, target) for prop, target in 
attrs]
         accepts = [self.get_valid_values(prop) for prop, target in attrs]
 
         col0_len = max([len(n) for n in names])
@@ -796,7 +845,7 @@
 
         for prop, path in attrs:
             accepts = self.get_valid_values(prop)
-            name = self.aliased_name(prop, path)
+            name = self.aliased_name_rest(prop, path)
 
             lines.append('%s%s: %s' %(pad, name, accepts))
         return lines
@@ -805,20 +854,27 @@
         """
         Return the getters and actual values as list of strings.
         """
-        getters = [name for name in dir(self.o)
+
+        o = self.oorig
+        getters = [name for name in dir(o)
                    if name.startswith('get_')
-                   and callable(getattr(self.o, name))]
+                   and callable(getattr(o, name))]
+        #print getters
         getters.sort()
         lines = []
         for name in getters:
-            func = getattr(self.o, name)
+            func = getattr(o, name)
             if self.is_alias(func): continue
+
             try: val = func()
             except: continue
             if getattr(val, 'shape', ()) != () and len(val)>6:
                 s = str(val[:6]) + '...'
             else:
                 s = str(val)
+            s = s.replace('\n', ' ')
+            if len(s)>50:
+                s = s[:50] + '...'
             name = self.aliased_name(name[4:])
             lines.append('    %s = %s' %(name, s))
         return lines
@@ -898,17 +954,17 @@
     insp = ArtistInspector(o)
 
     if property is None:
-        print '\n'.join(insp.pprint_getters())
+        ret = insp.pprint_getters()
+        print '\n'.join(ret)
         return
 
     func = getattr(o, 'get_' + property)
+
     return func()
 
-def get(o, *args, **kwargs):
-    return getp(o, *args, **kwargs)
-get.__doc__ = getp.__doc__
+# alias
+get = getp
 
-
 def setp(h, *args, **kwargs):
     """
     matplotlib supports the use of :func:`setp` ("set property") and
@@ -984,7 +1040,11 @@
     return [x for x in cbook.flatten(ret)]
 
 def kwdoc(a):
-    return '\n'.join(ArtistInspector(a).pprint_setters(leadingspace=2))
+    hardcopy = matplotlib.rcParams['docstring.hardcopy']
+    if hardcopy:
+        return 
'\n'.join(ArtistInspector(a).pprint_setters_rest(leadingspace=2))
+    else:
+        return '\n'.join(ArtistInspector(a).pprint_setters(leadingspace=2))
 
 kwdocd = dict()
 kwdocd['Artist'] = kwdoc(Artist)

Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/rcsetup.py  2008-12-08 23:27:08 UTC (rev 
6525)
+++ trunk/matplotlib/lib/matplotlib/rcsetup.py  2008-12-08 23:28:55 UTC (rev 
6526)
@@ -511,6 +511,8 @@
     'svg.image_inline'  : [True, validate_bool],    # write raster image data 
directly into the svg file
     'svg.image_noscale' : [False, validate_bool],  # suppress scaling of 
raster data embedded in SVG
     'svg.embed_char_paths' : [True, validate_bool],  # True to save all 
characters as paths in the SVG
+
+    'docstring.hardcopy' : [False, validate_bool],  # set this when you want 
to generate hardcopy docstring
     'plugins.directory' : ['.matplotlib_plugins', str], # where plugin 
directory is locate
 
     'path.simplify' : [False, validate_bool],

Modified: trunk/matplotlib/matplotlibrc.template
===================================================================
--- trunk/matplotlib/matplotlibrc.template      2008-12-08 23:27:08 UTC (rev 
6525)
+++ trunk/matplotlib/matplotlibrc.template      2008-12-08 23:28:55 UTC (rev 
6526)
@@ -323,6 +323,9 @@
 #svg.image_noscale : False     # suppress scaling of raster data embedded in 
SVG
 #svg.embed_char_paths : True       # embed character outlines in the SVG file
 
+# docstring params
+#docstring.hardcopy = False  # set this when you want to generate hardcopy 
docstring
+
 # Set the verbose flags.  This controls how much information
 # matplotlib gives you at runtime and where it goes.  The verbosity
 # levels are: silent, helpful, debug, debug-annoying.  Any level is


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to