[IPython-dev] Comments about IPython.frontend, getting ready for merge of ipython-sync-frontend (fwd)

Gael Varoquaux gael.varoquaux at normalesup.org
Mon Aug 11 14:44:31 EDT 2008


Forgot to Cc the mailing list.

----- Forwarded message from Gael Varoquaux <gael.varoquaux at normalesup.org> -----

Date: Mon, 11 Aug 2008 20:43:43 +0200
From: Gael Varoquaux <gael.varoquaux at normalesup.org>
To: Fernando Perez <fperez.net at gmail.com>
Subject: Re:  [IPython-dev] Comments about IPython.frontend, getting ready
	for merge of ipython-sync-frontend

On Fri, Aug 08, 2008 at 02:05:54AM -0700, Fernando Perez wrote:

> fd_redirector
> =============

> I imagine this is the part you've been struggling with, from your comments. 

Partly, but that's only a tiny fraction of the tip of the iceberg. The
hardest part was embedding all this in a GUI loop and try to stay
interestive without threads.

> We certainly need this to gracefully handle i/o under GUIs.  Docstrings
> and tests are critically needed though, and the docstrings should
> conform to the reST api for sphinx.

Docstring and tests are now there. All this should work under windows,
including the tests.

> All attributes should be declared in the constructor, even if they are set to
> None with a comment of what they do and that their true value is given later
> (such as in start() ).  The fact that Python allows us to create attributes at
> any point doesn't mean we should do it in normal code, its a feature whose
> valid use cases are in decorating/annotating external objects.  But classes we
> write should declare their attribute API completely in the constructor, for
> readability/comprehensibility reasons.

> Is it necessary to call stop() in getvalue()?

Pretty much. I think I need to close the file descriptor, and redo the
duplication, so I pretty much need to implement the stop method in the
getvalue.

> file_like.py
> ============

> - writelines should read simply "map(self.write,lines)".  Faster, cleaner,
> shorter.

Done.

> - why are the other methods implemented as 'pass'?  Wouldn't it be better not
>   to have them?  Making them pass means they return None, which can lead to
>   them being used by other code which will then strangely break when None is
>   the wrong thing to get.

I have to implement them to satisfy the file-interface. I have documented
this requirement in the code, now.

> output_trap.py
> ==============

> This one implements a smaller set of functionality than the original
> OutputTrap.  Why?  Do we need to merge the two?  Right now we have in
> core.shell uses of the old module and in core.interpreter, of the new, so
> likely some sort of merge will be needed.

Hum, I am not too sure I am following. I haven't created a second
implementation of something, AFAIK.


> redirector_output_trap.py
> =========================

> No docstrings on constructor.

Fixed.

> sync_traceback_trap.py
> ======================

> No docstrings on constructor. The top-level docstring could be a bit more
> verbose.

I improved this, but I must admit I don't fully understand the way
traceback_trap is supposed to work (no docstrings), so I cannot fully
document this object?

I now feel that the branch is in good-enough shape to be merged in.
Obviously there still is some work to be done (more test for a better
coverage, althought the GUI frontends are pretty much impossible to
test). I however feel that we should merge ASAP, and that I will continue
to work on this in the trunk.

I would appreciate another quick review to check that everything is in
order, and for more feedback.

Gaël


----- End forwarded message -----



More information about the IPython-dev mailing list