From 654c9fe583fe417eff9512ffa56e9e309f3fd760 2013-10-08 21:07:11 From: Pablo de Oliveira Date: 2013-10-08 21:07:11 Subject: [PATCH] set_next_input: squash multiple calls from the same cell execution * When calling multiple times set_next_input in a single cell execution, we only keep the last input. * Added generic support to PayloadManager for updating (instead of appending) payloads from a given 'source'. Closes #1349 --- diff --git a/IPython/core/payload.py b/IPython/core/payload.py index 75b681c..7a6c9c6 100644 --- a/IPython/core/payload.py +++ b/IPython/core/payload.py @@ -29,9 +29,17 @@ class PayloadManager(Configurable): _payload = List([]) - def write_payload(self, data): + def write_payload(self, data, update=False): if not isinstance(data, dict): raise TypeError('Each payload write must be a dict, got: %r' % data) + + if update and 'source' in data: + source = data['source'] + for i,pl in enumerate(self._payload): + if 'source' in pl and pl['source'] == source: + self._payload[i] = data + return + self._payload.append(data) def read_payload(self): diff --git a/IPython/kernel/zmq/zmqshell.py b/IPython/kernel/zmq/zmqshell.py index df7f5a5..62d2cb8 100644 --- a/IPython/kernel/zmq/zmqshell.py +++ b/IPython/kernel/zmq/zmqshell.py @@ -583,7 +583,7 @@ class ZMQInteractiveShell(InteractiveShell): source='set_next_input', text=text ) - self.payload_manager.write_payload(payload) + self.payload_manager.write_payload(payload, update=True) #------------------------------------------------------------------------- # Things related to magics