Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Canvas creation fails with old traitlets #295

Open
tongda opened this issue Sep 18, 2022 · 3 comments
Open

Canvas creation fails with old traitlets #295

tongda opened this issue Sep 18, 2022 · 3 comments
Labels
bug Something isn't working

Comments

@tongda
Copy link

tongda commented Sep 18, 2022

run code in jupyter lab:

from ipycanvas import Canvas
Canvas(width=400, height=300)

got exception:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in get(self, obj, cls)
    527         try:
--> 528             value = obj._trait_values[self.name]
    529         except KeyError:

KeyError: '_canvas_manager'

During handling of the above exception, another exception occurred:

TraitError                                Traceback (most recent call last)
<ipython-input-2-190e315b22cc> in <module>
      1 from ipycanvas import Canvas
----> 2 Canvas(width=400, height=300)

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/ipycanvas/canvas.py in __init__(self, *args, **kwargs)
    618     def __init__(self, *args, **kwargs):
    619         """Create a Canvas widget."""
--> 620         super(Canvas, self).__init__(*args, **kwargs)
    621 
    622         if "caching" in kwargs:

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/ipywidgets/widgets/widget.py in __init__(self, **kwargs)
    478 
    479         Widget._call_widget_constructed(self)
--> 480         self.open()
    481 
    482     def __del__(self):

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/ipywidgets/widgets/widget.py in open(self)
    491         """Open a comm to the frontend if one isn't already open."""
    492         if self.comm is None:
--> 493             state, buffer_paths, buffers = _remove_buffers(self.get_state())
    494 
    495             args = dict(target_name='jupyter.widget',

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/ipywidgets/widgets/widget.py in get_state(self, key, drop_defaults)
    581         for k in keys:
    582             to_json = self.trait_metadata(k, 'to_json', self._trait_to_json)
--> 583             value = to_json(getattr(self, k), self)
    584             if not PY3 and isinstance(traits[k], Bytes) and isinstance(value, bytes):
    585                 value = memoryview(value)

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in __get__(self, obj, cls)
    554             return self
    555         else:
--> 556             return self.get(obj, cls)
    557 
    558     def set(self, obj, value):

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in get(self, obj, cls)
    533                 raise TraitError("No default value found for %s trait of %r"
    534                                  % (self.name, obj))
--> 535             value = self._validate(obj, dynamic_default())
    536             obj._trait_values[self.name] = value
    537             return value

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in _validate(self, obj, value)
    589             return value
    590         if hasattr(self, 'validate'):
--> 591             value = self.validate(obj, value)
    592         if obj._cross_validation_lock is False:
    593             value = self._cross_validate(obj, value)

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in validate(self, obj, value)
   1675             return value
   1676         else:
-> 1677             self.error(obj, value)
   1678 
   1679     def info(self):

~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/traitlets/traitlets.py in error(self, obj, value)
   1522                 % (self.name, self.info(), msg)
   1523 
-> 1524         raise TraitError(e)
   1525 
   1526 

TraitError: The '_canvas_manager' trait of a Canvas instance must be a _CanvasManager, but a value of class 'NoneType' (i.e. None) was specified.

jupyter --version:

Selected Jupyter core packages...
IPython          : 7.16.3
ipykernel        : 5.5.6
ipywidgets       : 7.7.2
jupyter_client   : 7.1.2
jupyter_core     : 4.9.2
jupyter_server   : 1.13.1
jupyterlab       : 3.2.9
nbclient         : 0.5.9
nbconvert        : 6.0.7
nbformat         : 5.1.3
notebook         : 6.4.10
qtconsole        : not installed
traitlets        : 4.3.3

jupyter labextension list:

JupyterLab v3.2.9
/home/nvidia/archiconda3/envs/mmdeploy/share/jupyter/labextensions
        ipycanvas v0.13.1 enabled OK
        @jupyter-widgets/jupyterlab-manager v3.1.1 enabled OK (python, jupyterlab_widgets)

I did a little dig into the code, it seems that the older version of traitlets (v4.3.3) has different behavior with default initialization. Since my python version is fixed to 3.6.x, I cannot install the latest jupyter and ipywidgets. Any workaround this error?

@martinRenou martinRenou added the bug Something isn't working label Sep 19, 2022
@martinRenou
Copy link
Collaborator

Thanks for opening an issue!

@martinRenou martinRenou changed the title Canvas init failed in jupyter lab Canvas creation fails with old traitlets Sep 19, 2022
@mattkjames7
Copy link

I had the same issue as this. My temporary work around was to downgrade to ipycanvas==12.1

@athewsey
Copy link

athewsey commented Mar 27, 2023

I'm also seeing this issue & downgrading to 0.12.1 seemed to un-break things.

Running on Amazon SageMaker Studio, which is showing:

IPython          : 8.1.1
ipykernel        : 6.9.2
ipywidgets       : 7.7.0
jupyter_client   : 7.1.2
jupyter_core     : 4.9.2
jupyter_server   : 1.23.2
jupyterlab       : 3.6.1
nbclient         : 0.5.13
nbconvert        : 6.5.3
nbformat         : 5.3.0
notebook         : 6.4.10
qtconsole        : not installed
traitlets        : 5.2.2

Suprising that traitlets v5 also seemed to be affected... Maybe there's something else at play? 🫤

athewsey referenced this issue in aws-samples/sagemaker-101-workshop Mar 27, 2023
Canvas widget creation failing on SageMaker Studio environments with
error seemingly similar to the below GitHub issue. Downgraded
ipycanvas (which will also need to be reflected in notebooks).

https://github.com/martinRenou/ipycanvas/issues/295
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants