Format: text/x-python
⬇ Download File (1.7 KB)
   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