Skip to content

Commit 5bd77f3

Browse files
author
Jon M. Mease
committed
Cleanup / review of basewidget.py
1 parent ccbd940 commit 5bd77f3

File tree

3 files changed

+648
-267
lines changed

3 files changed

+648
-267
lines changed

js/src/Figure.js

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ var FigureModel = widgets.DOMWidgetModel.extend({
7070
* @typedef {null|Object} Py2JsDeleteTracesMsg
7171
* @property {Array.<Number>} delete_inds
7272
* Array of indexes of traces to be deleted, in ascending order
73+
* @property {Number} trace_edit_id
74+
* Edit ID to use when returning trace deltas using
75+
* the _js2py_traceDeltas message.
7376
* @property {Number} layout_edit_id
7477
* Edit ID to use when returning layout deltas using
7578
* the _js2py_layoutDelta message.
@@ -738,16 +741,10 @@ var FigureView = widgets.DOMWidgetView.extend({
738741
this.model.on("change:_py2js_svgRequest",
739742
this.do_svgRequest, this);
740743

741-
// Increment message ids
744+
// Get message ids
742745
// ---------------------
743-
// Creating a view is, itself, a layout and trace edit operation
744-
// because the creation of the view will result in trace and layout
745-
// delta messages being sent back to the Python side.
746-
var layout_edit_id = this.model.get("_last_layout_edit_id") + 1;
747-
this.model.set("_last_layout_edit_id", layout_edit_id);
748-
var trace_edit_id = this.model.get("_last_trace_edit_id") + 1;
749-
this.model.set("_last_trace_edit_id", trace_edit_id);
750-
this.touch();
746+
var layout_edit_id = this.model.get("_last_layout_edit_id");
747+
var trace_edit_id = this.model.get("_last_trace_edit_id");
751748

752749
// Set view UID
753750
// ------------
@@ -768,10 +765,9 @@ var FigureView = widgets.DOMWidgetView.extend({
768765
Plotly.newPlot(this.el, initialTraces, initialLayout).then(
769766
function () {
770767
// ### Send trace deltas ###
771-
// We create an array of deltas corresponding to the animated
768+
// We create an array of deltas corresponding to the new
772769
// traces.
773-
var traceIndexes = _.range(initialTraces.length);
774-
that._sendTraceDeltas(traceIndexes, trace_edit_id);
770+
that._sendTraceDeltas(trace_edit_id);
775771

776772
// ### Send layout delta ###
777773
that._sendLayoutDelta(layout_edit_id);
@@ -1135,14 +1131,7 @@ var FigureView = widgets.DOMWidgetView.extend({
11351131
Plotly.addTraces(this.el, msgData.trace_data).then(function () {
11361132

11371133
// ### Send trace deltas ###
1138-
// We create an array of deltas corresponding to the new
1139-
// traces.
1140-
var newTraceIndexes = msgData.trace_data.map(function(v, i) {
1141-
return i + prevNumTraces
1142-
});
1143-
1144-
that._sendTraceDeltas(newTraceIndexes, msgData.trace_edit_id);
1145-
1134+
that._sendTraceDeltas(msgData.trace_edit_id);
11461135

11471136
// ### Send layout delta ###
11481137
var layout_edit_id = msgData.layout_edit_id;
@@ -1159,12 +1148,16 @@ var FigureView = widgets.DOMWidgetView.extend({
11591148
/** @type {Py2JsDeleteTracesMsg} */
11601149
var msgData = this.model.get("_py2js_deleteTraces");
11611150

1162-
console.log("do_deleteTraces");
1151+
console.log(["do_deleteTraces", msgData]);
11631152
if (msgData !== null){
11641153
var delete_inds = msgData.delete_inds;
11651154
var that = this;
11661155
Plotly.deleteTraces(this.el, delete_inds).then(function () {
11671156

1157+
// ### Send trace deltas ###
1158+
var trace_edit_id = msgData.trace_edit_id;
1159+
that._sendTraceDeltas(trace_edit_id);
1160+
11681161
// ### Send layout delta ###
11691162
var layout_edit_id = msgData.layout_edit_id;
11701163
that._sendLayoutDelta(layout_edit_id);
@@ -1224,7 +1217,7 @@ var FigureView = widgets.DOMWidgetView.extend({
12241217
// ### Send trace deltas ###
12251218
// We create an array of deltas corresponding to the restyled
12261219
// traces.
1227-
this._sendTraceDeltas(traceIndexes, msgData.trace_edit_id);
1220+
this._sendTraceDeltas(msgData.trace_edit_id);
12281221

12291222
// ### Send layout delta ###
12301223
var layout_edit_id = msgData.layout_edit_id;
@@ -1287,7 +1280,7 @@ var FigureView = widgets.DOMWidgetView.extend({
12871280
// ### Send trace deltas ###
12881281
// We create an array of deltas corresponding to the updated
12891282
// traces.
1290-
this._sendTraceDeltas(traceIndexes, msgData.trace_edit_id);
1283+
this._sendTraceDeltas(msgData.trace_edit_id);
12911284

12921285
// ### Send layout delta ###
12931286
var layout_edit_id = msgData.layout_edit_id;
@@ -1328,7 +1321,7 @@ var FigureView = widgets.DOMWidgetView.extend({
13281321
// ### Send trace deltas ###
13291322
// We create an array of deltas corresponding to the
13301323
// animated traces.
1331-
this._sendTraceDeltas(traceIndexes, msgData.trace_edit_id);
1324+
this._sendTraceDeltas(msgData.trace_edit_id);
13321325

13331326
// ### Send layout delta ###
13341327
var layout_edit_id = msgData.layout_edit_id;
@@ -1346,7 +1339,7 @@ var FigureView = widgets.DOMWidgetView.extend({
13461339
// ### Send trace deltas ###
13471340
// We create an array of deltas corresponding to the
13481341
// animated traces.
1349-
that._sendTraceDeltas(traceIndexes, msgData.trace_edit_id);
1342+
that._sendTraceDeltas(msgData.trace_edit_id);
13501343

13511344
// ### Send layout delta ###
13521345
var layout_edit_id = msgData.layout_edit_id;
@@ -1406,16 +1399,17 @@ var FigureView = widgets.DOMWidgetView.extend({
14061399
/**
14071400
* Construct trace deltas array for the requested trace indexes and
14081401
* send traceDeltas message to the Python side
1409-
* @param {Array.<Number>} traceIndexes
14101402
* Array of indexes of traces for which to compute deltas
14111403
* @param trace_edit_id
14121404
* Edit ID of message that triggered the creation of trace deltas
14131405
* @private
14141406
*/
1415-
_sendTraceDeltas: function(traceIndexes, trace_edit_id) {
1407+
_sendTraceDeltas: function (trace_edit_id) {
14161408

1417-
var trace_deltas = new Array(traceIndexes.length);
14181409
var trace_data = this.model.get("_data");
1410+
var traceIndexes = _.range(trace_data.length);
1411+
var trace_deltas = new Array(traceIndexes.length);
1412+
14191413
var fullData = this.getFullData();
14201414
for (var i = 0; i < traceIndexes.length; i++) {
14211415
var traceInd = traceIndexes[i];

plotly/basedatatypes.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,9 @@ def data(self, new_data):
368368
del traces_prop_defaults_post_removal[i]
369369
del uids_post_removal[i]
370370

371+
# Modify in-place so we don't trigger serialization
372+
del self._data[i]
373+
371374
if delete_inds:
372375
# Update widget, if any
373376
self._send_deleteTraces_msg(delete_inds)
@@ -480,7 +483,7 @@ def plotly_restyle(self, restyle_data, trace_indexes=None, **kwargs):
480483
# The restyle operation resulted in a change to some trace
481484
# properties, so we dispatch change callbacks and send the
482485
# restyle message to the frontend (if any)
483-
self._dispatch_change_callbacks_restyle(
486+
self._dispatch_trace_change_callbacks(
484487
restyle_changes, trace_indexes)
485488
self._send_restyle_msg(
486489
restyle_changes,
@@ -576,7 +579,7 @@ def _restyle_child(self, child, key_path_str, val):
576579
if not self._in_batch_mode:
577580
send_val = [val]
578581
restyle = {key_path_str: send_val}
579-
self._dispatch_change_callbacks_restyle(restyle, [trace_index])
582+
self._dispatch_trace_change_callbacks(restyle, [trace_index])
580583
self._send_restyle_msg(restyle, trace_indexes=trace_index)
581584

582585
# In batch mode
@@ -1094,7 +1097,7 @@ def plotly_relayout(self, relayout_data, **kwargs):
10941097
# The relayout operation resulted in a change to some layout
10951098
# properties, so we dispatch change callbacks and send the
10961099
# relayout message to the frontend (if any)
1097-
self._dispatch_change_callbacks_relayout(relayout_changes)
1100+
self._dispatch_layout_change_callbacks(relayout_changes)
10981101
self._send_relayout_msg(
10991102
relayout_changes,
11001103
source_view_id=source_view_id)
@@ -1162,7 +1165,7 @@ def _relayout_child(self, child, key_path_str, val):
11621165
# Dispatch change callbacks and send relayout message
11631166
if not self._in_batch_mode:
11641167
relayout_msg = {key_path_str: val}
1165-
self._dispatch_change_callbacks_relayout(relayout_msg)
1168+
self._dispatch_layout_change_callbacks(relayout_msg)
11661169
self._send_relayout_msg(relayout_msg)
11671170

11681171
# In batch mode
@@ -1236,7 +1239,7 @@ def _build_dispatch_plan(key_path_strs):
12361239

12371240
return dispatch_plan
12381241

1239-
def _dispatch_change_callbacks_relayout(self, relayout_data):
1242+
def _dispatch_layout_change_callbacks(self, relayout_data):
12401243
"""
12411244
Dispatch property change callbacks given relayout_data
12421245
@@ -1261,7 +1264,7 @@ def _dispatch_change_callbacks_relayout(self, relayout_data):
12611264
if isinstance(dispatch_obj, BasePlotlyType):
12621265
dispatch_obj._dispatch_change_callbacks(changed_paths)
12631266

1264-
def _dispatch_change_callbacks_restyle(self, restyle_data, trace_indexes):
1267+
def _dispatch_trace_change_callbacks(self, restyle_data, trace_indexes):
12651268
"""
12661269
Dispatch property change callbacks given restyle_data
12671270
@@ -1369,12 +1372,12 @@ def plotly_update(self,
13691372
# ----------------
13701373
# ### Dispatch restyle changes ###
13711374
if restyle_changes:
1372-
self._dispatch_change_callbacks_restyle(
1375+
self._dispatch_trace_change_callbacks(
13731376
restyle_changes, trace_indexes)
13741377

13751378
# ### Dispatch relayout changes ###
13761379
if relayout_changes:
1377-
self._dispatch_change_callbacks_relayout(relayout_changes)
1380+
self._dispatch_layout_change_callbacks(relayout_changes)
13781381

13791382
# Send update message
13801383
# -------------------
@@ -1689,12 +1692,12 @@ def _perform_batch_animate(self, animation_opts):
16891692
# ------------------
16901693
# ### Dispatch restyle changes ###
16911694
if restyle_changes:
1692-
self._dispatch_change_callbacks_restyle(restyle_changes,
1693-
trace_indexes)
1695+
self._dispatch_trace_change_callbacks(restyle_changes,
1696+
trace_indexes)
16941697

16951698
# ### Dispatch relayout changes ###
16961699
if relayout_changes:
1697-
self._dispatch_change_callbacks_relayout(relayout_changes)
1700+
self._dispatch_layout_change_callbacks(relayout_changes)
16981701

16991702
# Convert style / trace_indexes into animate form
17001703
# -----------------------------------------------

0 commit comments

Comments
 (0)