matplotlib / matplotlib/ipympl
message schema
Nessuno ha ancora preso questa issue.
- Lingua principale
- Jupyter Notebook
- Stelle
- 1.7k
- Fork
- 234
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
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
{'type': 'object',
'properties': {
'type': {'type': 'str'}
}
}
Depending on the value of 'type', the schema for the rest of the dict/object
{'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
{('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'
{'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
{'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'}}
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Non sono indicati file, test o punti di ingresso. Inizia individuando la gestione dei messaggi da Python a JavaScript e da JavaScript a Python, quindi confronta i payload implementati con gli schemi elencati qui; il lavoro è completato quando lo schema dei messaggi è documentato e allineato al protocollo effettivo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, jupyter-notebook, python
- Ambito
- api, backend-api-design
- Tipo di issue
- Documentazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100