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