Looks like a bug in traitlets, I think this should fix it:
https://github.com/ipython/traitlets/pull/440
In the meantime, you can probably work around it by doing:
from traitlets import validate
class MySpawner(LocalProcessSpawner):
@validate('notebook_dir')
def _notebook_dir_validate(self, value, trait):
...
On 12 August 2017 at 17:20, Craig Ching <[email protected]> wrote:
> I want to create the notebook directory when my user logs in for the first
> time. Looking through the issues, I found a couple of suggestions and am
> trying this:
>
> from jupyterhub.spawner import LocalProcessSpawner
> import os
>
> class MySpawner(LocalProcessSpawner):
> def _notebook_dir_validate(self, value, trait):
> # Strip any trailing slashes
> # *except* if it's root
> _, path = os.path.splitdrive(value)
> if path == os.sep:
> return value
>
> value = value.rstrip(os.sep)
>
> if not os.path.isabs(value):
> # If we receive a non-absolute path, make it absolute.
> value = os.path.abspath(value)
> if not os.path.isdir(value):
> os.mkdir(value, mode=0o755)
> return value
>
> c.JupyterHub.spawner_class = MySpawner
>
> But I'm getting this when I start jupyterhub:
>
> Traceback (most recent call last):
> File "/usr/local/lib/python3.5/dist-packages/jupyterhub/app.py", line
> yield self.initialize(argv)
> File "/usr/lib/python3.5/types.py", line 179, in throw
> return self.__wrapped.throw(tp, *rest)
> File "/usr/local/lib/python3.5/dist-packages/jupyterhub/app.py", line
> yield self.init_spawners()
> File "/usr/local/lib/python3.5/dist-packages/jupyterhub/app.py", line
> self.users[orm_user.id] = user = User(orm_user, self.tornado_settin
> File "/usr/local/lib/python3.5/dist-packages/jupyterhub/user.py", lin
> config=self.settings.get('config'),
> File "/usr/local/lib/python3.5/dist-packages/traitlets/traitlets.py",
> inst.setup_instance(*args, **kwargs)
> File "/usr/local/lib/python3.5/dist-packages/traitlets/traitlets.py",
> super(HasTraits, self).setup_instance(*args, **kwargs)
> File "/usr/local/lib/python3.5/dist-packages/traitlets/traitlets.py",
> value.instance_init(self)
> File "/usr/local/lib/python3.5/dist-packages/traitlets/traitlets.py",
> inst._register_validator(self, self.trait_names)
> File "/usr/local/lib/python3.5/dist-packages/traitlets/traitlets.py",
> _deprecated_method(class_value, self.__class, magic_name,
> AttributeError: 'MySpawner' object has no attribute '_HasTraits__class'
>
> What am I doing wrong? Thanks for any help!
>
> --
> You received this message because you are subscribed to the Google Groups
> "Project Jupyter" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/jupyter/3755a0c5-0dbd-46ee-a715-8f093f5dec98%40googlegroups.com
> <https://groups.google.com/d/msgid/jupyter/3755a0c5-0dbd-46ee-a715-8f093f5dec98%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"Project Jupyter" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jupyter/CAOvn4qh%2BoNtUy3EGW064ha5D%3DZcm1C%2Bn7ZHBJX0XiJDc4sBK9Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.