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
send $ PublishDisplayData
outputHeader
(displayOutput config x)
Nothing
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
......
......@@ -168,7 +168,7 @@ displayDataParser :: LByteString -> Message
displayDataParser = requestParser $ \obj -> do
dataDict :: Object <- obj .: "data"
let displayDatas = makeDisplayDatas dataDict
return $ PublishDisplayData noHeader displayDatas
return $ PublishDisplayData noHeader displayDatas Nothing
requestParser :: FromJSON a => (a -> Parser Message) -> LByteString -> Message
requestParser parser content =
......
......@@ -16,6 +16,7 @@ module IHaskell.IPython.Types (
Message(..),
MessageHeader(..),
Username,
Transient(..),
MessageType(..),
CodeReview(..),
Width,
......@@ -184,6 +185,7 @@ data MessageType = KernelInfoReplyMessage
| StatusMessage
| StreamMessage
| DisplayDataMessage
| UpdateDisplayDataMessage
| OutputMessage
| InputMessage
| IsCompleteRequestMessage
......@@ -217,6 +219,7 @@ showMessageType ExecuteResultMessage = "execute_result"
showMessageType StatusMessage = "status"
showMessageType StreamMessage = "stream"
showMessageType DisplayDataMessage = "display_data"
showMessageType UpdateDisplayDataMessage = "update_display_data"
showMessageType OutputMessage = "pyout"
showMessageType InputMessage = "pyin"
showMessageType IsCompleteRequestMessage = "is_complete_request"
......@@ -251,6 +254,7 @@ instance FromJSON MessageType where
"status" -> return StatusMessage
"stream" -> return StreamMessage
"display_data" -> return DisplayDataMessage
"update_display_data" -> return UpdateDisplayDataMessage
"pyout" -> return OutputMessage
"pyin" -> return InputMessage
"is_complete_request" -> return IsCompleteRequestMessage
......@@ -301,6 +305,16 @@ data CodeReview = CodeComplete
| CodeUnknown
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.
data Message =
-- | A request from a frontend for information about the kernel.
......@@ -384,6 +398,13 @@ data Message =
PublishDisplayData
{ header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
}
|
PublishUpdateDisplayData
{ header :: MessageHeader
, displayData :: [DisplayData] -- ^ A list of data representations.
, transient :: Maybe Transient
}
|
PublishOutput
......@@ -544,10 +565,22 @@ instance ToJSON Message where
object ["execution_state" .= executionState]
toJSON PublishStream { streamType = streamType, streamContent = content } =
object ["data" .= content, "name" .= streamType]
toJSON PublishDisplayData { displayData = datas } =
object
["metadata" .= object [], "data" .= object (map displayDataToJson datas)]
toJSON r@PublishDisplayData { displayData = datas }
= object
$ 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 } =
object
[ "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