<div dir="ltr">On Fri, Dec 7, 2012 at 1:27 AM, Brian Granger <span dir="ltr">&lt;<a href="mailto:ellisonbg@gmail.com" target="_blank">ellisonbg@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="im">&gt; I&#39;ve enhanced the test failure stack traces such that the function&#39;s<br>

&gt; &quot;filename&quot; (like &lt;ipython-input-DD-HHHHHHHHHHHH&gt;) links to the cell that<br>
&gt; defines that code. That makes it easy to click close to the definition of a<br>
&gt; failing test or function. Even better would be linking directly to the line<br>
&gt; of code in question… :)  Unfortunately the current implementation has a<br>
&gt; visual bug when linking to an anchor: the top IPython bar shifts up about<br>
&gt; 0.3em (it shifts back if you hit the empty fragment, &quot;#&quot;).<br>
<br>
</div>Ahh, this is a nice feature.  Can you describe a bit more about how<br>
you track this information as it flows though the code.  Do the cell<br>
ids get sent to the kernel?  What does the kernet do with them?<br>
</blockquote><div><br></div><div>When each cell gets compiled, ipython generates a (IPython.core.compilerop.code_name, I think) and uses that the (pseudo-)filename associated with the code object. I don&#39;t have to track it myself:<br>
</div><div>1. The traceback lists the (pseudo-)filename in a pretty recognizeable way:  re.search(<span class="">r&#39;ipython-input-(?P&lt;cell_eval_order&gt;\d+)-[0-9a-f]{12}&#39;</span><span class=""></span>, …)<br></div>
<div>2. Each cell has the cell_eval_order in square brackets beside it.<br></div><div><br></div><div>All I have to do is link the two. :) The kernel itself doesn&#39;t need to know anything, I&#39;m just taking advantage of the predictability of the HTML output. One could as easily do all the linkifying in JS instead of beforehand in the plugin&#39;s Python code.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&gt; I do have a few questions up-front:<br><div class="im">
&gt; 1. Is there a better way than peeking at sys.displayhook to determine what<br>
&gt; kind of output to produce?<br>
<br>
</div>I am not quite sure what you mean and how you &quot;peek&quot; and<br>
sys.displayhook for this.<br>
</blockquote><div><br></div><div>For now, I stole a page from <a href="https://github.com/catherinedevlin/ipython_doctester">https://github.com/catherinedevlin/ipython_doctester</a> with respect to displaying text/plain when using ipython console vs displaying text/html+application/javascript in the notebook. But it feels like a REALLY ugly hack (and requires pyzmq to be installed just for an import to see that we&#39;re NOT using the notebook…).<br>
<br></div><div>The particular code is <a href="https://github.com/taavi/ipython_nose/blob/master/ipython_nose.py#L293">https://github.com/taavi/ipython_nose/blob/master/ipython_nose.py#L293</a> .<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">
&gt; 2. I&#39;d really like to have cell anchor generation happen always. Seems like<br>
&gt; it would be useful to provide intra-notebook links to cells. I&#39;m not sure<br>
&gt; how one would manage those links as the execution order evolves, though. For<br>
&gt; this extension, that migration is actually a good thing, as the anchor<br>
&gt; points to the code that was actually run even if it&#39;s no longer visible.<br>
<br>
</div>I am trying to understand what the usage cases are.  Would these links<br>
be typed in by hand by a user?  If so, we would want the ids to have a<br>
human readable form.  If they are always generated by code they could<br>
be ugly.<br></blockquote><div><br></div><div>Nope, these are just the automatically-generated links already mentioned above. They&#39;re there just so the user can click on a psuedo-filename and (hopefully) have the browser scroll to the cell that contained the test code itself.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
The other thing we have to keep in mind is that we can&#39;t ever couple<br>
the kernel to the notebook frontend.  That is, the kernel can&#39;t ever<br>
know about these cell ids in any formal way.<br></blockquote><div><br></div><div>That makes sense. I&#39;m more interested in the notebook frontend being able to take advantage of the kernel&#39;s existing data, which is sort of the opposite thing (I think).<br>
<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">&gt; 3. I&#39;d love to have a consistent interface to stream something like stdout<br>
&gt; character-wise instead of line-wise. Right now it&#39;s hacked to hook stdout<br>
&gt; directly on the console, and with even more horrible jQuery machinations on<br>
&gt; the notebook side.<br>
<br>
</div>Can&#39;t you call flush to do this?  Can you describe this a bit more.<br>
Again, not following how all of this is used.  It sounds messy...<br></blockquote><div><br></div><div>Nope, somehow whenever I try to write a single char for each test, it comes out on its own line (wrapped in its own pre tag).<br>
<br></div><div>Huh. But it looks like if I do this in an ipython notebook cell:<br>import sys<br>import time<br>sys.stdout.write(&#39;a&#39;)<br>sys.stdout.flush()<br>time.sleep(5)<br>sys.stdout.write(&#39;b&#39;)<br><br>
</div><div>it works! So there must be something else going on causing the extra tags. Thanks for pointing out that it OUGHT to work! <a href="https://github.com/taavi/ipython_nose/issues/4">https://github.com/taavi/ipython_nose/issues/4</a><br>
</div><div> <br></div>-- <br></div>taa<br>/*eof*/<br>
</div></div>