matplotlib / matplotlib/ipympl
message schema
Nobody has claimed this yet.
- Dominant language
- Jupyter Notebook
- Stars
- 1.7k
- Forks
- 234
- PR merge metrics
- No merged PRs in 30d
Description
At the request of @rgbkrk
## Messages sent from python to js
- the data field in sent messages is either a string with format
"data:image/png;base64,{0}" or a dictionary
- if a string, the `{0}` entry is a base64 encoded string of the image data
- maybe a full image or a diff.
- image is png encoded
- if a dictionary then it will follow the schema
``` js
{'type': 'object',
'properties': {
'type': {'type': 'str'}
}
}
```
Depending on the value of 'type', the schema for the rest of the dict/object
``` js
{'cursor': {'properties': {'cursor': {'type': int}, 'type': {'type': str}},
'type': 'object'},
'draw': {'properties': {'type': {'type': str}}, 'type': 'object'},
'figure_label': {'properties': {'label': {'type': str},
'type': {'type': str}},
'type': 'object'},
'image_mode': {'properties': {'mode': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'message': {'properties': {'message': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'refresh': {'properties': {'type': {'type': str}}, 'type': 'object'},
'resize': {'properties': {'size': {'type': list}, 'type': {'type': str}},
'type': 'object'},
'rubberband': {'properties': {'type': {'type': str},
'x0': {'type': float},
'x1': {'type': float},
'y0': {'type': float},
'y1': {'type': float}},
'type': 'object'},
'save': {'properties': {'type': {'type': str}}, 'type': 'object'}}
```
## Messages received by python from js
All of the messages seem to have
``` js
{('msg_id',
'parent_header',
'buffers',
'header',
'content',
'msg_type',
'metadata')}
```
everything but 'content' looks like it is comm-related overhead
In 'content' there is 'data' and 'comm_id' (which is clearly comm overhead)
Inside of 'data'
``` js
{'type': 'object',
'properties': {
'data': {'type': 'object',
'properties': {
'type': {'type': 'str'}
}
}
'comm_id': {'type': 'str'}
}
}
```
Depending on the value of 'type' (the entry in the message) it will
conform to one of the following specs
``` js
{'ack': {'properties': {'figure_id': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'button_press': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'button_release': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'closing': {'properties': {'figure_id': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'draw': {'properties': {'figure_id': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'figure_enter': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'figure_leave': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'key_press': {'properties': {'figure_id': {'type': str},
'guiEvent': {'type': dict},
'key': {'type': str},
'type': {'type': str}},
'type': 'object'},
'key_release': {'properties': {'figure_id': {'type': str},
'guiEvent': {'type': dict},
'key': {'type': str},
'type': {'type': str}},
'type': 'object'},
'motion_notify': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'refresh': {'properties': {'figure_id': {'type': str}, 'type': {'type': str}},
'type': 'object'},
'scroll': {'properties': {'button': {'type': int},
'figure_id': {'type': str},
'guiEvent': {'type': dict},
'step': {'type': int},
'type': {'type': str},
'x': {'type': float},
'y': {'type': float}},
'type': 'object'},
'send_image_mode': {'properties': {'figure_id': {'type': str},
'type': {'type': str}},
'type': 'object'},
'set_dpi_ratio': {'properties': {'dpi_ratio': {'type': float},
'figure_id': {'type': str},
'type': {'type': str}},
'type': 'object'},
'supports_binary': {'properties': {'figure_id': {'type': str},
'type': {'type': str},
'value': {'type': bool}},
'type': 'object'},
'toolbar_button': {'properties': {'figure_id': {'type': str},
'name': {'type': str},
'type': {'type': str}},
'type': 'object'}}
```
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No files, tests, or entry points are named. Start by locating the Python-to-JavaScript and JavaScript-to-Python message handling, then compare the implemented payloads with the schemas listed here; done means the message schema is documented and aligned with the actual protocol.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, jupyter-notebook, python
- Domain
- api, backend-api-design
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100