Show More
@@ -0,0 +1,71 b'' | |||||
|
1 | """Publishing | |||
|
2 | """ | |||
|
3 | ||||
|
4 | #----------------------------------------------------------------------------- | |||
|
5 | # Copyright (C) 2012 The IPython Development Team | |||
|
6 | # | |||
|
7 | # Distributed under the terms of the BSD License. The full license is in | |||
|
8 | # the file COPYING, distributed as part of this software. | |||
|
9 | #----------------------------------------------------------------------------- | |||
|
10 | ||||
|
11 | #----------------------------------------------------------------------------- | |||
|
12 | # Imports | |||
|
13 | #----------------------------------------------------------------------------- | |||
|
14 | ||||
|
15 | from IPython.config import Configurable | |||
|
16 | ||||
|
17 | from IPython.utils.jsonutil import json_clean | |||
|
18 | from IPython.utils.traitlets import Instance, Dict, CBytes | |||
|
19 | ||||
|
20 | from IPython.zmq.serialize import serialize_object | |||
|
21 | from IPython.zmq.session import Session, extract_header | |||
|
22 | ||||
|
23 | #----------------------------------------------------------------------------- | |||
|
24 | # Code | |||
|
25 | #----------------------------------------------------------------------------- | |||
|
26 | ||||
|
27 | ||||
|
28 | class ZMQDataPublisher(Configurable): | |||
|
29 | ||||
|
30 | topic = topic = CBytes(b'datapub') | |||
|
31 | session = Instance(Session) | |||
|
32 | pub_socket = Instance('zmq.Socket') | |||
|
33 | parent_header = Dict({}) | |||
|
34 | ||||
|
35 | def set_parent(self, parent): | |||
|
36 | """Set the parent for outbound messages.""" | |||
|
37 | self.parent_header = extract_header(parent) | |||
|
38 | ||||
|
39 | def publish_data(self, data): | |||
|
40 | """publish a data_message on the IOPub channel | |||
|
41 | ||||
|
42 | Parameters | |||
|
43 | ---------- | |||
|
44 | ||||
|
45 | data : dict | |||
|
46 | The data to be published. Think of it as a namespace. | |||
|
47 | """ | |||
|
48 | session = self.session | |||
|
49 | buffers = serialize_object(data, | |||
|
50 | buffer_threshold=session.buffer_threshold, | |||
|
51 | item_threshold=session.item_threshold, | |||
|
52 | ) | |||
|
53 | content = json_clean(dict(keys=data.keys())) | |||
|
54 | session.send(self.pub_socket, 'data_message', content=content, | |||
|
55 | parent=self.parent_header, | |||
|
56 | buffers=buffers, | |||
|
57 | ident=self.topic, | |||
|
58 | ) | |||
|
59 | ||||
|
60 | ||||
|
61 | def publish_data(data): | |||
|
62 | """publish a data_message on the IOPub channel | |||
|
63 | ||||
|
64 | Parameters | |||
|
65 | ---------- | |||
|
66 | ||||
|
67 | data : dict | |||
|
68 | The data to be published. Think of it as a namespace. | |||
|
69 | """ | |||
|
70 | from IPython.zmq.zmqshell import ZMQInteractiveShell | |||
|
71 | ZMQInteractiveShell.instance().data_pub.publish_data(data) |
General Comments 0
You need to be logged in to leave comments.
Login now