{"action":"created","issue":{"url":"https://api.github.com/repos/jupyter/jupyter_client/issues/209","repository_url":"https://api.github.com/repos/jupyter/jupyter_client","labels_url":"https://api.github.com/repos/jupyter/jupyter_client/issues/209/labels{/name}","comments_url":"https://api.github.com/repos/jupyter/jupyter_client/issues/209/comments","events_url":"https://api.github.com/repos/jupyter/jupyter_client/issues/209/events","html_url":"https://github.com/jupyter/jupyter_client/issues/209","id":180709567,"number":209,"title":"Provide an update_display message","user":{"login":"rgbkrk","id":836375,"avatar_url":"https://avatars.githubusercontent.com/u/836375?v=3","gravatar_id":"","url":"https://api.github.com/users/rgbkrk","html_url":"https://github.com/rgbkrk","followers_url":"https://api.github.com/users/rgbkrk/followers","following_url":"https://api.github.com/users/rgbkrk/following{/other_user}","gists_url":"https://api.github.com/users/rgbkrk/gists{/gist_id}","starred_url":"https://api.github.com/users/rgbkrk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rgbkrk/subscriptions","organizations_url":"https://api.github.com/users/rgbkrk/orgs","repos_url":"https://api.github.com/users/rgbkrk/repos","events_url":"https://api.github.com/users/rgbkrk/events{/privacy}","received_events_url":"https://api.github.com/users/rgbkrk/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":20,"created_at":"2016-10-03T18:20:43Z","updated_at":"2016-10-24T17:42:09Z","closed_at":null,"body":"The purpose of this message would be to provide an update to a display_data field, without need of full duplex communications.\r\n\r\n@ellisonbg suggested that this would make it so that progress bars can be implemented without needing full widgets/comms support. That's exactly the kind of feedback I want to be able to provide to users as well.\r\n\r\nFor me, I want this for informing about any background threads or processes including spark jobs, database queries, and external processes (see https://github.com/ipython/ipython/issues/9969).\r\n\r\n## Potential approach\r\n\r\nOn `display_data`, provide metadata to identify a display_id:\r\n\r\n```json\r\n{\r\n    \"content\": {\r\n      \"data\": {\r\n        \"text/plain\": \"[==                ]\"\r\n      },\r\n      \"metadata\": {\r\n        \"text/plain\": {\r\n          \"display_id\": \"0000\"\r\n        }\r\n      }\r\n    }\r\n}\r\n```\r\n\r\nFollowed by an `update_display_data`:\r\n\r\n\r\n```json\r\n{\r\n    \"content\": {\r\n      \"data\": {\r\n        \"text/plain\": \"[==============    ]\"\r\n      },\r\n      \"metadata\": {\r\n        \"text/plain\": {\r\n          \"display_id\": \"0000\"\r\n        }\r\n      }\r\n    }\r\n}\r\n```\r\n\r\nAt least in the notebook, this could also result in storing the last result of the update."},"comment":{"url":"https://api.github.com/repos/jupyter/jupyter_client/issues/comments/255811843","html_url":"https://github.com/jupyter/jupyter_client/issues/209#issuecomment-255811843","issue_url":"https://api.github.com/repos/jupyter/jupyter_client/issues/209","id":255811843,"user":{"login":"jasongrout","id":192614,"avatar_url":"https://avatars.githubusercontent.com/u/192614?v=3","gravatar_id":"","url":"https://api.github.com/users/jasongrout","html_url":"https://github.com/jasongrout","followers_url":"https://api.github.com/users/jasongrout/followers","following_url":"https://api.github.com/users/jasongrout/following{/other_user}","gists_url":"https://api.github.com/users/jasongrout/gists{/gist_id}","starred_url":"https://api.github.com/users/jasongrout/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jasongrout/subscriptions","organizations_url":"https://api.github.com/users/jasongrout/orgs","repos_url":"https://api.github.com/users/jasongrout/repos","events_url":"https://api.github.com/users/jasongrout/events{/privacy}","received_events_url":"https://api.github.com/users/jasongrout/received_events","type":"User","site_admin":false},"created_at":"2016-10-24T17:42:09Z","updated_at":"2016-10-24T17:42:09Z","body":"What usecases are we envisioning for updating output? So far, I see in the discussion above:\r\n\r\n* Progress bars\r\n* Updating status of computations (for example, distributed computations)\r\n\r\nI could also imagine simple live charting for something like matplotlib.\r\n\r\nAlso, it seems that the discussion is about updating any display area on a page. Another thought that satisfies the progress bar case is to scope updates to messages with the same parent header, so that the display id namespace is scoped to a single execution request. We do run into issues with how parent headers are treated in threaded computations, but if we solve that, it feels a bit cleaner. You could use an output widget for the more advanced usecase of updating outputs on other areas of the page.\r\n"}}
{"actor":{"display_login":"jasongrout"}}