From af854893564322b0e9dfce1a8f0b90650e1a63ca 2013-05-19 17:28:19 From: MinRK Date: 2013-05-19 17:28:19 Subject: [PATCH] update qtconsole with user_expressions changes lsmagic now uses JSON, rather than ast eval --- diff --git a/IPython/core/magic.py b/IPython/core/magic.py index 786e842..40a3d92 100644 --- a/IPython/core/magic.py +++ b/IPython/core/magic.py @@ -15,6 +15,7 @@ # Imports #----------------------------------------------------------------------------- # Stdlib +import json import os import re import sys @@ -327,14 +328,20 @@ class MagicsManager(Configurable): return self._auto_status[self.auto_magic] def lsmagic_info(self): + """Return the magics as a list of dicts""" magic_list = [] - for m_type in self.magics : + for m_type in self.magics: for m_name,mgc in self.magics[m_type].items(): - try : + try: magic_list.append({'name':m_name,'type':m_type,'class':mgc.im_class.__name__}) - except AttributeError : + except AttributeError: magic_list.append({'name':m_name,'type':m_type,'class':'Other'}) return magic_list + + def lsmagic_json(self): + """Wrap lsmagic_info() in a JSON object""" + from IPython.display import JSON + return JSON(json.dumps(self.lsmagic_info())) def lsmagic(self): """Return a dict of currently available magic functions. diff --git a/IPython/frontend/qt/console/history_console_widget.py b/IPython/frontend/qt/console/history_console_widget.py index 672df05..df7675c 100644 --- a/IPython/frontend/qt/console/history_console_widget.py +++ b/IPython/frontend/qt/console/history_console_widget.py @@ -241,7 +241,9 @@ class HistoryConsoleWidget(ConsoleWidget): content = msg['content'] status = content['status'] if status == 'ok': - self._max_session_history=(int(content['user_expressions']['hlen'])) + self._max_session_history = int( + content['user_expressions']['hlen']['data']['text/plain'] + ) def save_magic(self): # update the session history length diff --git a/IPython/frontend/qt/console/mainwindow.py b/IPython/frontend/qt/console/mainwindow.py index 2d73355..63070a5 100644 --- a/IPython/frontend/qt/console/mainwindow.py +++ b/IPython/frontend/qt/console/mainwindow.py @@ -20,10 +20,10 @@ Authors: #----------------------------------------------------------------------------- # stdlib imports -import sys +import json import re +import sys import webbrowser -import ast from threading import Thread # System library imports @@ -615,25 +615,25 @@ class MainWindow(QtGui.QMainWindow): inner_dynamic_magic.__name__ = "dynamics_magic_s" return inner_dynamic_magic - def populate_all_magic_menu(self, listofmagic=None): - """Clean "All Magics..." menu and repopulate it with `listofmagic` + def populate_all_magic_menu(self, display_data=None): + """Clean "All Magics..." menu and repopulate it with `display_data` Parameters ---------- - listofmagic : string, - repr() of a list of strings, send back by the kernel + display_data : dict, + dict of display_data for the magics list. + Expects json data, as the result of MagicsManager.lsmagic_json() - Notes - ----- - `listofmagic`is a repr() of list because it is fed with the result of - a 'user_expression' """ for k,v in self._magic_menu_dict.items(): v.clear() self.all_magic_menu.clear() + + if not display_data: + return + mlist = json.loads(display_data['data'].get('application/json', [])) - mlist=ast.literal_eval(listofmagic) for magic in mlist: cell = (magic['type'] == 'cell') name = magic['name'] @@ -660,7 +660,7 @@ class MainWindow(QtGui.QMainWindow): menu with the list received back """ - self.active_frontend._silent_exec_callback('get_ipython().magics_manager.lsmagic_info()', + self.active_frontend._silent_exec_callback('get_ipython().magics_manager.lsmagic_json()', self.populate_all_magic_menu) def _get_magic_menu(self,menuidentifier, menulabel=None):