On Thu, Aug 13, 2009 at 7:44 AM, John Hunter<jdh2...@gmail.com> wrote:
> On Wed, Aug 12, 2009 at 7:12 AM, John Hunter<jdh2...@gmail.com> wrote:
>> Those of you with an interest in mpl docstring processing may want to
>> comment on this tracker item
>>
>> https://sourceforge.net/tracker/index.php?func=detail&aid=2835685&group_id=80706&atid=560720
>
> This patch has come a long way since initial submission, and I am
> personally +1 on it, but it is wide reaching in the code and I'd like
> to get a signoff at least from Eric who has done the most with the
> docstrings before committing.  Comments from anyone else are also
> welcome of course.  Darren, I think his latest approach satisfies your
> requests, but I made the comment I would prefer some of the very
> common combinations rolled up into single line decorators.

I appreciate how much time has gone into the patch, but this impacts
so much code I think it is important to really nail the
implementation. I think everything should be rolled up into a single
high level decorator if possible. I offered a suggestion in the
tracker. Consider:

with_doc(*args, **kwargs):
    mod_doc(f):
        if args:
            if not isinstance(args[0], str):
                # inherit docstring from first argument
                inherit = args.pop(0).__doc__
                if f.__doc__ is None:
                    f.__doc__ = inherit
                else:
                    f.__doc__ = inherit + '\n\n' +  f.__doc__
        if kwargs:
            # mapping interpolation
            f.__doc__ = f.__doc__ % kwargs
        if args:
            try:
                # inserting
                f.__doc__ = f.__doc__ % args
            except TypeError:
                 # appending
                 if f.__doc__ is None:
                     f.__doc__ = ''
                 f.__doc__ = f.__doc__ + '\n\n'+ '\n\n'.join(args)
        return f
    return mod_doc

I left out the dedentation for now, and it is untested. This can cover
lots of ground, I think it can be chained on itself:

@with_doc('append me', prepend='prepend me as well')
@with_doc(other_method)
@with_doc('prepend me %(prepend)s')

If it is not possible, or possible but messy because of dedentation or
other reasons, to pack everything into a single high-level decorator,
then maybe there should be a few like:

inherit_doc(fun) overwrite or prepend with fun's docstring
insert_doc(*args, **kwargs) interpolate
append_doc(*args)

but since these are high-level decorators, chaining decorators would
result in repeated calls to dedent.

Darren

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to