move settings to the tornado settings dict,
rather than a mixture of tornado settings and application references,
and application.ipython_app references.
removes any reference to application / ipython_app attributes in the handlers,
in favor of the tornado settings dict.
These were a massive pain for anyone who might want to re-use our handlers.
Simple less classes
Simplify class handeling in js/css
Instead of setting several class (e.g: `cell vbox`) per dom element, use less to embed the definition of `vbox` into `cell`.
This should allow :
- more easy theming.
- responsive css on nbviewer
There are many other places where this can be done.
CM configurable Take 2
Change the way configurability works.
Config dict should be passed down to the parent class where it will be
merged with the default value and propagate to this only in the base
class.
This allow to both alter the configuration on a per instance basis, or
globaly by tempering with the class instance.
This also get rid of IPython global in some cases.
--
Still not **perfect** but I think this is the limit of my js knowledge, there is a minimal amount of code of 4 line to propagate the configuration :
```
var options = {foo:bar}; // default options can be class parameter
var overwrite_options ={boo:baz}; // came from args, or not
options = this.mergeopt(CodeCell, options, overwrite options);
IPython.Cell.apply(this,[options]);
```
generally not necessary, but sometimes the kernel connection can be dirty.
We have only seen this by starting a qtconsole via %qtconsole,
then killing the kernel, at which point the original notebook's connection
(at the zmq level) is never restored to the new kernel at the same endpoint.
It's weird, and probably a zmq bug, but a simple reconnect seems to solve it.
- MultiKernelManager no longer has IOLoop affiliations
- move connect_[channel] method to base KernelManager
- connect_[channel] wraps in ZMQStream in IOLoopKM subclass
- add KernelRestarter base class
- use decorators to minimize code in wrapped KM methods
ansispan function adapted from mmalecki/ansispan
The easiest way to see how slow the old way was is to create a very large traceback (e.g. max recursion), which bring everything to a screeching halt (even future page loads, if the output is saved). Now a max recursion error draws in a second or two.
closes#3198
and move the friendly version checks to notebookapp.py
DEFAULT_STATIC_FILES_PATH is now accessible without pyzmq/tornado/jinja being importable.
If someone tries to use old pyzmq or tornado directly with handlers,
the version check won't happen, but that's probably the right thing to do anyway.
Notebook support for a reverse proxy which handles SSL
Added a "trust_xheaders" config option to NotebookApp to enable the passing of the xheaders flag to tornado.HTTPServer. This is necessary so tornado can generate the correct wss:// scheme
fix `gaierror: [Errno -9] Address family for hostname not supported`
error from unassociated interfaces.
related to facebook/tornado#593 - but the fix was only applied to 3.0
I've verified that this fix works for tornado 2.1, 2.4, 2.4.1, and the behavior it fixes does not trigger on tornado 3.0
closes#3045
Change the way configurability works.
Config dict should be passed down to the parent class where it will be
merged with the default value and propagate to this only in the base
class.
This allow to both alter the configuration on a per instance basis, or
globaly by tempering with the class instance.
This also get rid of IPython global in some cases.
related to facebook/tornado#593
I've verified that this fix works for tornado 2.1, 2.4, 2.4.1, and the
behavior it fixes does not trigger on tornado 3.0
Strip useless ANSI escape codes in notebook
ANSI color escape codes get handled specially by the notebook, but other kinds of codes just get printed out. Strip these codes out of the notebook output.
closes#2385
The previous expression was matching both the beginning and the end of the line,
which would end up swallowing the next match,
ultimately matching every other URL in the string.
This removes the end-of-line check, so it will match every URL.
The wrapURLs function to make URLs easier to identify does not seem to have been necessary,
and has thus been removed.
closes#2834
Now you can visit `localhost:8888/My Notebook.ipynb`,
and it will redirect you to the UUID url.
This allows cross-notebook links, etc. with `[other notebook](Notebook Name.ipynb)`
Directory and url/port information for the notebook server is now
printed when it receives one of these signals. SIGINFO is available only
on BSD-based systems, and is triggered via Ctrl-T.
This commit makes it possible to differentiate between many different
long-running notebook servers, where the original ip address and port
information printed at the beginning has scrolled out of the screen.
We save the server location string that gets printed on startup, and
re-print it when the user attempts to interrupt the server with Ctrl-C
Thanks to @minrk for discussion on how this should work.
Also added a docstring to the start() method
fix celltoolbar layout on FF
Ok, bug was due to an extra empty div... This seem to lok ok on both FF and Chrome OS X.
Think of adding
$.getScript('/static/js/celltoolbarpresets/example.js')
to your custom.js to fully test.
- merged IPKernelApp into KernelApp, they are no longer separate classes
- embed_kernel moved to its own file
- ipkernel now only contains the Kernel class
- associated imports updated
Still more KernelManager cleanup
Finish up some more work from #2775closes#2722
- [x] ip/transport configurables only live on KernelManager objects, not ConsoleApp
- [x] fix default ipc paths in `ipython kernel` and `ipython notebook` cases
- [x] fix ipc file cleanup in a few more cases
- [x] add `--transport` alias for all appropriate entry points
General cleanup of kernel manager code.
This does some general cleanup of MultiKernelManager to better reflect how it is actually being used.
Sometimes there is a need to create kernel_id's elsewhere in code. This minor change allows a kernel_id to be created outside of the MultiKernelManager and passed in as a kwarg. An exception is raised if the id is already used.
Tasks:
- [x] Fix cleanup of ipc files.
- [x] Allow kernel_id to be passed to MultiKernelManager.start_kernel.
- [x] Add ipc support to MultiKernelManager.
- [x] Add more tests for MultiKernelManager.
- [x] Rename sub channel to iopub channel everywhere.
- [x] Use consistent naming for all channel classes in zmq, inprocess and qt.
- [x] Move BlockingChannelMixin to zmq.blockingkernelmanager.
- [x] Create ABC for KernelManager.
- [x] Make the InProcessKernelManager a Configurable.
- [x] Cleanup docstrings in ABCs.
- [x] Add tests for KernelManager.
- [x] Check over MultiKernelManager.
- [x] Make KernelManager,kill_kernel private in ABC and implementations.
- [x] Find bug that is causing the kernel manager tests to hang unless the shell channel linger is set to 0.
- [x] Decide about critical logging in ipkernel.
- [x] Debug lack of stderr redirect in tests.
The select menu for celltoolbar presets should live entirely in
the maintoolbar code - it was 1/2 in CellToolbar itself. This
fixes this issue using events and an additional method on
CellToolbar (list_presets).
The kernel_id is *always* the same under a restart and there
is no need to return it. The restart handler does pass
the original kernel_id back to the browser as it currently uses it.
This add a per-cell globally toggleable toolbar
the main purpouse is to easily edit metadata.
this come with a few example like adding checkbox,
dropdown list, simple button, button with icon...
please see the js-doc of
IPython/frontend/html/notebook/static/js/MetaUI.js
for more info
also bind shift tab for tooltip + config
This does not change the curent behavior, only add the shift+tab shortcut.
Note that the shift tab shortcut has a slightly different behavior. You can select part of a line and pressing shift-tab will show you the tooltip only for the selection.
This is disabled for multiline selection to still allow to unindent block of code, Keep in mind that the real real shortcut for indent unindent is Ctrl+] or [ . Select/tab is not really supported by codemirror.
Finally the "tooltip_on_tab" behavior is globally configurable via IPython.config so that it could be easily switched to false.
It can be overridden via js console for test purpose.
IPython.config.tooltip_on_tab = true | false
Take effect immediately, only on current notebook.
or globally via custom.js
var user_conf = {tooltip_on_tab:false | true};
$.extend(IPython.config, user_conf)
diverse fixes for project url
- Force leading and trailing slashes in base_project/kernel_url
- Add support for the prefix in template for static files
- Fix some forgotten quotes
- remove old make_static_url which is now a jinja2 macro
* Force leading and trailing slashes in base_project/kernel_url
* Add support for the prefix in template for static files
* Fix some forgotten quotes
* remove old make_static_url which is now a jinja2 macro
fixes-2720
Destructive paste mapped to Ctrl-M V is a surprising choice given that
there was no drag-to-select on the area being replaced (there is a
weaker notion of "selected cell" but this does not map to will-be-replaced-
by-paste in the minds of participants in an unscientific poll at
PyConCA).
Destructive paste is still available as the last paste option in the
Edit menu, qualified as "Paste Cell Replace".
I've accidentally deleted the wrong cell quite a few times and
it has been quite frustrating. This enables a very hacky backup of
the last cell deletion.
I'm sure the core devs will have some opinions on both the feature
and its implementation, I consider this very much a first pass.
Equation References and Numbering are not going to be trivial to add,
so the code has been removed for now. Important fixes include
no-MathJax support (previously, the code was failing), and the
generation of unique ids for the rendering content in each cell,
tremendously speeding up MathJax rendering.
I am still not rendering placeholder text.
MathJax.InputJax.TeX.resetEquationNumbers is supposed to be available,
but isn't consistently loaded before the notebook fires off its first
re-render request. The code edits in mathjaxutils.js fix this issue.
Additionally, there was some init code in mathjaxutils.js that has been
properly excised to the html templates.
Removed some orphan rendering code so that all typesetting now goes
through mathjaxutils.js
Finally, removed an extra cell in the demo notebook.
Autochange highlight with cell magics
Highlight change is made on cell load and Enter keypress.
For now, it recognizes %%javascript, %%python[3], %%ruby, %%bash , %%R, %%perl.
new modes can easily be added by adding regular expression on config.js
Previously `^C` would register as a regular test failure, and the test suite would continue, in which case halting `iptest` meant hitting `^C` nine times.
This change makes iptest take notice of sigint in a test runner, and aborts the run.
Notebook: Store the username in a cookie whose name is unique.
Cookies cannot be saved on a per-port basis, so a cookie "username" is shared
across all running IPython notebooks with the same hostname. Using a unique
cookie name prevents this collision.
This allows a user to start multiple IPython notebooks and be logged into
each.
was using notebook.get('name') instead of notebook.metadata.get('name'),
where the name is actually stored. The result was that all downloaded notebooks were called 'notebook'.
closes#2227
Cookies cannot be saved on a per-port basis, so a cookie "username" is
shared across all running IPython notebooks with the same hostname.
Using a unique cookie name prevents this collision.
This allows a user to start multiple IPython notebooks and be logged into
each.
Introduce Notification Area
This allow several notification widget to be next one to the other in the notification area.
The Api allow also to register a callback if the user click on the notification. and allows sticky and non sticky notification.
I have created a base class for all notebook managers. Our
existing, file-based store, is now in filenbmanager.py. I have
also created a new Azure Blob based backed notebook manager.
The behavior is the following:
* If you press UP while on the first row, you go to the beginning of the line.
* If you press UP again (or were already at the beginning of the line), you
go to the previous cell.
* If you press DOWN while on the last row, you go to the end of the line.
* If you press DOWN again (or were already at the end of the line), you go
to the next cell.
This applies to `CodeCell`s and `RawCell`s.
add FileFindHandler for Notebook static files
* The static file handler now uses a search path, instead of a single dir.
This allows easier customization of available js/css,
and provides a place for extra files to go for extending the notebook.
* An empty custom.js / custom.css are added to the templates for trivial
custom user styling/scripting.
The search only happens once, and the result is cached after the first.
* A few methods are pulled from tornado 2.2-dev verbatim to have tornado 2.1 compatibility.
* mathjax is now installed by default in profile.
win32 iptest: Use subprocess.Popen() instead of os.system().
The call to `os.system` in `iptest` prevents us from easily setting `$IPYTHONDIR` to a temporary directory. In theory we should be able to use `subprocess.Popen` instead of `os.system` in Windows. This would unify the code structure and make it easy to pass in a different environment.
Note that Python < 2.7 does not have `os.kill`. I've attempted to work around this by using `ctypes` to kill any living processes.
python 2 and 3 compatibility without 2to3
apply some fixes :
- apply (deactivated in setup.py now)
- repr (deactivated in setup.py now)
- print (only in modules with print >>)
- raise (partially)
don't touch deathrow and quarantine.
Base of allowing a full toolbar construction in js without altering the
html template, and use it to construct our toolbar as example.
still need some work to be totally decoupled.
There's nothing there we should be running python tests on, and
occasionally python files may appear there that cause problems to nose
(e.g. mathjax ships a non-py3 valid conf.py that breaks py3 testing).
brutally replace all `exeption <type>, <name>:` by
`exception <type> as <name> :`
`exception <type>, <type> :` should not be present anywhere in the code
anymore, or should be present with explicit tuple as
`exception (<type>, <type>)`
this improve the current css of the print page and add css to the
classical notebook with print as target to get a better print view ant
the ability to directly print a notebook without going through the print
view
Fix spurious appearance of the #fontarea when fonts don't have any problem; also remove loud dialog when problematic font is detected and simply adjust baseline. Users will have a slightly offset baseline for bold/italic highlights, but without any functional problems.
Fixes#2005.