| # -*- coding: utf-8 -*- | |
| """Payload system for IPython. | |
| Authors: | |
| * Fernando Perez | |
| * Brian Granger | |
| """ | |
| #----------------------------------------------------------------------------- | |
| # Copyright (C) 2008-2011 The IPython Development Team | |
| # | |
| # Distributed under the terms of the BSD License. The full license is in | |
| # the file COPYING, distributed as part of this software. | |
| #----------------------------------------------------------------------------- | |
| #----------------------------------------------------------------------------- | |
| # Imports | |
| #----------------------------------------------------------------------------- | |
| from traitlets.config.configurable import Configurable | |
| from traitlets import List | |
| #----------------------------------------------------------------------------- | |
| # Main payload class | |
| #----------------------------------------------------------------------------- | |
| class PayloadManager(Configurable): | |
| _payload = List([]) | |
| def write_payload(self, data, single=True): | |
| """Include or update the specified `data` payload in the PayloadManager. | |
| If a previous payload with the same source exists and `single` is True, | |
| it will be overwritten with the new one. | |
| """ | |
| if not isinstance(data, dict): | |
| raise TypeError('Each payload write must be a dict, got: %r' % data) | |
| if single 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): | |
| return self._payload | |
| def clear_payload(self): | |
| self._payload = [] | |