Commit 16532afe authored by Alexey Khudyakov's avatar Alexey Khudyakov

Implement update_display_data message

This commit adds new message update_dispaly_data and updates
display_data message to add optional transient field which
is in turn used by update_display_data
parent fd5cbf34
...@@ -195,8 +195,9 @@ replyTo config execCount interface req@ExecuteRequest{} replyHeader = do ...@@ -195,8 +195,9 @@ replyTo config execCount interface req@ExecuteRequest{} replyHeader = do
send $ PublishDisplayData send $ PublishDisplayData
outputHeader outputHeader
(displayOutput config x) (displayOutput config x)
Nothing
in run config (getCode req) clearOutput sendOutput in run config (getCode req) clearOutput sendOutput
liftIO . send $ PublishDisplayData outputHeader (displayResult config res) liftIO . send $ PublishDisplayData outputHeader (displayResult config res) Nothing
idleHeader <- dupHeader replyHeader StatusMessage idleHeader <- dupHeader replyHeader StatusMessage
......
...@@ -168,7 +168,7 @@ displayDataParser :: LByteString -> Message ...@@ -168,7 +168,7 @@ displayDataParser :: LByteString -> Message
displayDataParser = requestParser $ \obj -> do displayDataParser = requestParser $ \obj -> do
dataDict :: Object <- obj .: "data" dataDict :: Object <- obj .: "data"
let displayDatas = makeDisplayDatas dataDict let displayDatas = makeDisplayDatas dataDict
return $ PublishDisplayData noHeader displayDatas return $ PublishDisplayData noHeader displayDatas Nothing
requestParser :: FromJSON a => (a -> Parser Message) -> LByteString -> Message requestParser :: FromJSON a => (a -> Parser Message) -> LByteString -> Message
requestParser parser content = requestParser parser content =
......
...@@ -16,6 +16,7 @@ module IHaskell.IPython.Types ( ...@@ -16,6 +16,7 @@ module IHaskell.IPython.Types (
Message(..), Message(..),
MessageHeader(..), MessageHeader(..),
Username, Username,
Transient(..),
MessageType(..), MessageType(..),
CodeReview(..), CodeReview(..),
Width, Width,
...@@ -184,6 +185,7 @@ data MessageType = KernelInfoReplyMessage ...@@ -184,6 +185,7 @@ data MessageType = KernelInfoReplyMessage
| StatusMessage | StatusMessage
| StreamMessage | StreamMessage
| DisplayDataMessage | DisplayDataMessage
| UpdateDisplayDataMessage
| OutputMessage | OutputMessage
| InputMessage | InputMessage
| IsCompleteRequestMessage | IsCompleteRequestMessage
...@@ -217,6 +219,7 @@ showMessageType ExecuteResultMessage = "execute_result" ...@@ -217,6 +219,7 @@ showMessageType ExecuteResultMessage = "execute_result"
showMessageType StatusMessage = "status" showMessageType StatusMessage = "status"
showMessageType StreamMessage = "stream" showMessageType StreamMessage = "stream"
showMessageType DisplayDataMessage = "display_data" showMessageType DisplayDataMessage = "display_data"
showMessageType UpdateDisplayDataMessage = "update_display_data"
showMessageType OutputMessage = "pyout" showMessageType OutputMessage = "pyout"
showMessageType InputMessage = "pyin" showMessageType InputMessage = "pyin"
showMessageType IsCompleteRequestMessage = "is_complete_request" showMessageType IsCompleteRequestMessage = "is_complete_request"
...@@ -251,6 +254,7 @@ instance FromJSON MessageType where ...@@ -251,6 +254,7 @@ instance FromJSON MessageType where
"status" -> return StatusMessage "status" -> return StatusMessage
"stream" -> return StreamMessage "stream" -> return StreamMessage
"display_data" -> return DisplayDataMessage "display_data" -> return DisplayDataMessage
"update_display_data" -> return UpdateDisplayDataMessage
"pyout" -> return OutputMessage "pyout" -> return OutputMessage
"pyin" -> return InputMessage "pyin" -> return InputMessage
"is_complete_request" -> return IsCompleteRequestMessage "is_complete_request" -> return IsCompleteRequestMessage
...@@ -301,6 +305,16 @@ data CodeReview = CodeComplete ...@@ -301,6 +305,16 @@ data CodeReview = CodeComplete
| CodeUnknown | CodeUnknown
deriving Show deriving Show
newtype Transient = Transient
{ transientDisplayId :: UUID
}
deriving (Show, Eq)
instance ToJSON Transient where
toJSON t = object [ "display_id" .= transientDisplayId t
]
-- | A message used to communicate with the IPython frontend. -- | A message used to communicate with the IPython frontend.
data Message = data Message =
-- | A request from a frontend for information about the kernel. -- | A request from a frontend for information about the kernel.
...@@ -384,6 +398,13 @@ data Message = ...@@ -384,6 +398,13 @@ data Message =
PublishDisplayData PublishDisplayData
{ header :: MessageHeader { header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations. , displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
}
|
PublishUpdateDisplayData
{ header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
} }
| |
PublishOutput PublishOutput
...@@ -544,10 +565,22 @@ instance ToJSON Message where ...@@ -544,10 +565,22 @@ instance ToJSON Message where
object ["execution_state" .= executionState] object ["execution_state" .= executionState]
toJSON PublishStream { streamType = streamType, streamContent = content } = toJSON PublishStream { streamType = streamType, streamContent = content } =
object ["data" .= content, "name" .= streamType] object ["data" .= content, "name" .= streamType]
toJSON PublishDisplayData { displayData = datas } = toJSON r@PublishDisplayData { displayData = datas }
object = object
["metadata" .= object [], "data" .= object (map displayDataToJson datas)] $ case transient r of
Just t -> (("transient" .= toJSON (transient r)) :)
Nothing -> id
$ ["metadata" .= object []
, "data" .= object (map displayDataToJson datas)
]
toJSON r@PublishUpdateDisplayData { displayData = datas }
= object
$ case transient r of
Just t -> (("transient" .= toJSON (transient r)) :)
Nothing -> id
$ ["metadata" .= object []
, "data" .= object (map displayDataToJson datas)
]
toJSON PublishOutput { executionCount = execCount, reprText = reprText } = toJSON PublishOutput { executionCount = execCount, reprText = reprText } =
object object
[ "data" .= object ["text/plain" .= reprText] [ "data" .= object ["text/plain" .= reprText]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment