You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
# Copyright (c) IPython Development Team.
 | 
						|
# Distributed under the terms of the Modified BSD License.
 | 
						|
 | 
						|
"""Publishing native (typically pickled) objects.
 | 
						|
"""
 | 
						|
 | 
						|
import warnings
 | 
						|
 | 
						|
from traitlets import Any, CBytes, Dict, Instance
 | 
						|
from traitlets.config import Configurable
 | 
						|
 | 
						|
from ipykernel.jsonutil import json_clean
 | 
						|
 | 
						|
try:
 | 
						|
    # available since ipyparallel 5.0.0
 | 
						|
    from ipyparallel.serialize import serialize_object
 | 
						|
except ImportError:
 | 
						|
    # Deprecated since ipykernel 4.3.0
 | 
						|
    from ipykernel.serialize import serialize_object
 | 
						|
 | 
						|
from jupyter_client.session import Session, extract_header
 | 
						|
 | 
						|
warnings.warn(
 | 
						|
    "ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub",
 | 
						|
    DeprecationWarning,
 | 
						|
    stacklevel=2,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
class ZMQDataPublisher(Configurable):
 | 
						|
    """A zmq data publisher."""
 | 
						|
 | 
						|
    topic = topic = CBytes(b"datapub")
 | 
						|
    session = Instance(Session, allow_none=True)
 | 
						|
    pub_socket = Any(allow_none=True)
 | 
						|
    parent_header = Dict({})
 | 
						|
 | 
						|
    def set_parent(self, parent):
 | 
						|
        """Set the parent for outbound messages."""
 | 
						|
        self.parent_header = extract_header(parent)
 | 
						|
 | 
						|
    def publish_data(self, data):
 | 
						|
        """publish a data_message on the IOPub channel
 | 
						|
 | 
						|
        Parameters
 | 
						|
        ----------
 | 
						|
        data : dict
 | 
						|
            The data to be published. Think of it as a namespace.
 | 
						|
        """
 | 
						|
        session = self.session
 | 
						|
        assert session is not None
 | 
						|
        buffers = serialize_object(
 | 
						|
            data,
 | 
						|
            buffer_threshold=session.buffer_threshold,
 | 
						|
            item_threshold=session.item_threshold,
 | 
						|
        )
 | 
						|
        content = json_clean(dict(keys=list(data.keys())))
 | 
						|
        session.send(
 | 
						|
            self.pub_socket,
 | 
						|
            "data_message",
 | 
						|
            content=content,
 | 
						|
            parent=self.parent_header,
 | 
						|
            buffers=buffers,
 | 
						|
            ident=self.topic,
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
def publish_data(data):
 | 
						|
    """publish a data_message on the IOPub channel
 | 
						|
 | 
						|
    Parameters
 | 
						|
    ----------
 | 
						|
    data : dict
 | 
						|
        The data to be published. Think of it as a namespace.
 | 
						|
    """
 | 
						|
    warnings.warn(
 | 
						|
        "ipykernel.datapub is deprecated. It has moved to ipyparallel.datapub",
 | 
						|
        DeprecationWarning,
 | 
						|
        stacklevel=2,
 | 
						|
    )
 | 
						|
 | 
						|
    from ipykernel.zmqshell import ZMQInteractiveShell
 | 
						|
 | 
						|
    ZMQInteractiveShell.instance().data_pub.publish_data(data)
 |