diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py index 3a9e4b1..9d0d172 100644 --- a/IPython/html/widgets/widget.py +++ b/IPython/html/widgets/widget.py @@ -34,10 +34,10 @@ from IPython.utils.py3compat import string_types class BaseWidget(LoggingConfigurable): # Shared declarations (Class level) - _keys = List(Unicode, default_value = [], - help="List of keys comprising the state of the model.", allow_none=False) widget_construction_callback = None + keys = ['default_view_name'] + def on_widget_constructed(callback): """Class method, registers a callback to be called when a widget is constructed. The callback must have the following signature: @@ -84,22 +84,6 @@ class BaseWidget(LoggingConfigurable): removed from the frontend.""" self._close_communication() - _keys = ['default_view_name'] - - # Properties - @property - def keys(self): - """Lazily accumulate _keys from all superclasses and cache them in this class""" - keys=[] - for c in self.__class__.mro(): - if hasattr(c, '_keys'): - keys.extend(getattr(c,'_keys')) - else: - break - # cache so future lookups are fast - self.__class__.x = keys - return keys - @property def comm(self): if self._comm is None: @@ -151,8 +135,7 @@ class BaseWidget(LoggingConfigurable): def _handle_recieve_state(self, sync_data): """Called when a state is recieved from the frontend.""" - # Use _keys instead of keys - Don't get retrieve the css from the client side. - for name in self._keys: + for name in self.keys: if name in sync_data: try: self._property_lock = (name, sync_data[name]) @@ -354,7 +337,7 @@ class Widget(BaseWidget): # Private/protected declarations _css = Dict() # Internal CSS property dict - _keys = ['visible', '_css'] + keys = ['visible', '_css'] + BaseWidget.keys def get_css(self, key, selector=""): """Get a CSS property of the widget. Note, this function does not