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 _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 = []