1# -*- coding: utf-8 -*- 2"""Payload system for IPython. 3 4Authors: 5 6* Fernando Perez 7* Brian Granger 8""" 9 10#----------------------------------------------------------------------------- 11# Copyright (C) 2008-2011 The IPython Development Team 12# 13# Distributed under the terms of the BSD License. The full license is in 14# the file COPYING, distributed as part of this software. 15#----------------------------------------------------------------------------- 16 17#----------------------------------------------------------------------------- 18# Imports 19#----------------------------------------------------------------------------- 20 21from traitlets.config.configurable import Configurable 22from traitlets import List 23 24#----------------------------------------------------------------------------- 25# Main payload class 26#----------------------------------------------------------------------------- 27 28class PayloadManager(Configurable): 29 30 _payload = List([]) 31 32 def write_payload(self, data, single=True): 33 """Include or update the specified `data` payload in the PayloadManager. 34 35 If a previous payload with the same source exists and `single` is True, 36 it will be overwritten with the new one. 37 """ 38 39 if not isinstance(data, dict): 40 raise TypeError('Each payload write must be a dict, got: %r' % data) 41 42 if single and 'source' in data: 43 source = data['source'] 44 for i, pl in enumerate(self._payload): 45 if 'source' in pl and pl['source'] == source: 46 self._payload[i] = data 47 return 48 49 self._payload.append(data) 50 51 def read_payload(self): 52 return self._payload 53 54 def clear_payload(self): 55 self._payload = [] 56