##// END OF EJS Templates
Merge pull request #8273 from SylvainCorlay/fixes_widget_serialization...
Min RK -
r21184:d8f34f38 merge
parent child Browse files
Show More
@@ -215,7 +215,7 b' class BaseIPythonApplication(Application):'
215 215 return crashhandler.crash_handler_lite(etype, evalue, tb)
216 216
217 217 def _ipython_dir_changed(self, name, old, new):
218 if old is not None and old is not Undefined:
218 if old is not Undefined:
219 219 str_old = py3compat.cast_bytes_py2(os.path.abspath(old),
220 220 sys.getfilesystemencoding()
221 221 )
@@ -355,7 +355,7 b' define(["widgets/js/manager",'
355 355 this.pending_msgs++;
356 356 }
357 357 }
358 // Since the comm is a one-way communication, assume the message
358 // Since the comm is a one-way communication, assume the message
359 359 // arrived. Don't call success since we don't have a model back from the server
360 360 // this means we miss out on the 'sync' event.
361 361 this._buffered_state_diff = {};
@@ -369,7 +369,7 b' define(["widgets/js/manager",'
369 369 // being the value or the promise of the serialized value
370 370 var serializers = this.constructor.serializers;
371 371 if (serializers) {
372 for (k in attrs) {
372 for (var k in attrs) {
373 373 if (serializers[k] && serializers[k].serialize) {
374 374 attrs[k] = (serializers[k].serialize)(attrs[k], this);
375 375 }
@@ -383,11 +383,13 b' define(["widgets/js/manager",'
383 383 for (var i=0; i<keys.length; i++) {
384 384 var key = keys[i];
385 385 var value = state[key];
386 if (value.buffer instanceof ArrayBuffer
387 || value instanceof ArrayBuffer) {
388 buffers.push(value);
389 buffer_keys.push(key);
390 delete state[key];
386 if (value) {
387 if (value.buffer instanceof ArrayBuffer
388 || value instanceof ArrayBuffer) {
389 buffers.push(value);
390 buffer_keys.push(key);
391 delete state[key];
392 }
391 393 }
392 394 }
393 395 that.comm.send({method: 'backbone', sync_data: state, buffer_keys: buffer_keys}, callbacks, {}, buffers);
@@ -396,7 +398,7 b' define(["widgets/js/manager",'
396 398 return (utils.reject("Couldn't send widget sync message", true))(error);
397 399 });
398 400 },
399
401
400 402 save_changes: function(callbacks) {
401 403 /**
402 404 * Push this model's state to the back-end
@@ -410,7 +412,7 b' define(["widgets/js/manager",'
410 412 /**
411 413 * on_some_change(["key1", "key2"], foo, context) differs from
412 414 * on("change:key1 change:key2", foo, context).
413 * If the widget attributes key1 and key2 are both modified,
415 * If the widget attributes key1 and key2 are both modified,
414 416 * the second form will result in foo being called twice
415 417 * while the first will call foo only once.
416 418 */
@@ -1374,7 +1374,25 b' def test_hold_trait_notifications():'
1374 1374 except:
1375 1375 pass
1376 1376 nt.assert_equal(t.b, 0)
1377
1377
1378
1379 class RollBack(HasTraits):
1380 bar = Int()
1381 def _bar_validate(self, value, trait):
1382 if value:
1383 raise TraitError('foobar')
1384 return value
1385
1386
1387 class TestRollback(TestCase):
1388
1389 def test_roll_back(self):
1390
1391 def assign_rollback():
1392 RollBack(bar=1)
1393
1394 self.assertRaises(TraitError, assign_rollback)
1395
1378 1396
1379 1397 class OrderTraits(HasTraits):
1380 1398 notified = Dict()
@@ -623,7 +623,7 b' class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)):'
623 623 if cache[name][1] is not Undefined:
624 624 setattr(self, name, cache[name][1])
625 625 else:
626 delattr(self, name)
626 self._trait_values.pop(name)
627 627 cache = {}
628 628 raise e
629 629 finally:
General Comments 0
You need to be logged in to leave comments. Login now