1 # -*- coding: utf-8 -*- 2 """Payload system for IPython. 3 4 Authors: 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 21 from traitlets.config.configurable import Configurable 22 from traitlets import List 23 24 #----------------------------------------------------------------------------- 25 # Main payload class 26 #----------------------------------------------------------------------------- 27 28 class PayloadManager(Configurable): 29 _payload: List = List([]) 30 31 def write_payload(self, data, single=True): 32 """Include or update the specified `data` payload in the PayloadManager. 33 34 If a previous payload with the same source exists and `single` is True, 35 it will be overwritten with the new one. 36 """ 37 38 if not isinstance(data, dict): 39 raise TypeError('Each payload write must be a dict, got: %r' % data) 40 41 if single and 'source' in data: 42 source = data['source'] 43 for i, pl in enumerate(self._payload): 44 if 'source' in pl and pl['source'] == source: 45 self._payload[i] = data 46 return 47 48 self._payload.append(data) 49 50 def read_payload(self): 51 return self._payload 52 53 def clear_payload(self): 54 self._payload = [] 55