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

jupyterlite build fails if --contents dir has any dir with a . in name #624

Closed
yuvipanda opened this issue Apr 28, 2022 · 10 comments · Fixed by #860
Closed

jupyterlite build fails if --contents dir has any dir with a . in name #624

yuvipanda opened this issue Apr 28, 2022 · 10 comments · Fixed by #860
Labels
bug Something isn't working

Comments

@yuvipanda
Copy link

Description

Running jupyter lite build --contents contents fails with the following error if there is any directory whose name starts with a ..

❯ jupyter lite build --contents contents                                                                             130 ↵
static:jupyter-lite.json
.  pre_status:static:jupyter-lite.json
    tarball:         jupyterlite-app-0.1.0-beta.5.tgz 8MB
    output:          /Users/yuvipanda/code/jupyterlite-data8/tmp/_output
    lite dir:        /Users/yuvipanda/code/jupyterlite-data8/tmp
    apps:            
    sourcemaps:      True
    unused packages: True
archive:archive
contents:contents
lite:jupyter-lite.json
mathjax:status
pyodide:pyodide
serve:contents
settings:overrides
translation:translation
.  status:archive:archive
[LiteBuildApp] No archive (yet): tmp-jupyterlite.tgz
.  status:contents:contents
    contents: 1 files
.  status:lite:jupyter-lite.json
[LiteBuildApp]     jupyter-lite.(json|ipynb): 0 files
.  status:mathjax:status
     jupyter-server-mathjax: /Users/yuvipanda/.local/share/virtualenvs/textbook/lib/python3.9/site-packages/jupyter_server_mathjax/static 
     configured MathJax dir: /Users/yuvipanda/code/jupyterlite-data8/tmp/traitlets.Undefined
     effective MathJax dir: /Users/yuvipanda/.local/share/virtualenvs/textbook/lib/python3.9/site-packages/jupyter_server_mathjax/static
.  status:pyodide:pyodide
     URL: None
 archive: []
   cache: 0 files
   local: 0 files
.  status:serve:contents
    url: http://127.0.0.1:8000/
    server: tornado
    headers:
.  status:settings:overrides
    overrides.json: 0
.  status:translation:translation
    translation files: 0 files
static:output_dir
.  pre_init:static:output_dir
static:unpack
.  init:static:unpack
federated_extensions:copy:ext:jupyterlab_pygments
.  pre_build:federated_extensions:copy:ext:jupyterlab_pygments
contents:copy:.binder/wat
mathjax:copy
translation:copy
.  build:contents:copy:.binder/wat
.  build:mathjax:copy
.  build:translation:copy
contents:contents:.binder
contents:contents:.
federated_extensions:patch
mathjax:patch
.  post_build:contents:contents:.binder
TaskError - taskid:post_build:contents:contents:.binder
PythonAction Error
Traceback (most recent call last):
  File "/Users/yuvipanda/.local/share/virtualenvs/textbook/lib/python3.9/site-packages/doit/action.py", line 461, in execute
    returned_value = self.py_callable(*self.args, **kwargs)
  File "/Users/yuvipanda/.local/share/virtualenvs/textbook/lib/python3.9/site-packages/jupyterlite/addons/contents.py", line 170, in one_contents_path
    listing = fm.get(listing_path)
  File "/Users/yuvipanda/.local/share/virtualenvs/textbook/lib/python3.9/site-packages/jupyter_server/services/contents/filemanager.py", line 370, in get
    raise web.HTTPError(404, "No such file or directory: %s" % path)
tornado.web.HTTPError: HTTP 404: Not Found (No such file or directory: binder)

Reproduce

Create a directory named .binder, and just put any random file inside it.

mkdir -p contents/.binder
touch contents/.binder/runtime.txt
jupyter lite build --contents contents

Expected behavior

Context

Output from pip list:

❯ pip list                                                                                                           130 ↵
Package            Version
------------------ -------
cloudpickle        2.0.0
doit               0.36.0
entrypoints        0.4
importlib-metadata 4.11.3
jupyter-core       4.10.0
jupyterlite        0.1.0b5
pip                22.0.4
setuptools         60.10.0
traitlets          5.1.1
zipp               3.8.0
@yuvipanda yuvipanda added the bug Something isn't working label Apr 28, 2022
@bollwyvl
Copy link
Collaborator

nice: all's fair in love and reuse when pretending to be a server, i guess.

we have a bunch of preset ignored paths, and could add .binder, but i bet it would work if we did the equivalent of in jupyter_lite_config.json:

{
  "ContentsManager": {
    "allow_hidden": true
  }
}

of note though, some static hosts, no doubt much like us, ignore . files, so they might not end up getting served properly...

@yuvipanda
Copy link
Author

Just getting back to this, @bollwyvl do you think allow_hidden will actually work if the server serves these?

@bollwyvl
Copy link
Collaborator

bollwyvl commented Nov 1, 2022

will actually work

To clarify, what is is your use case? Do you want these files, or not want these files indexed (which is what's failing) and just don't want the build to fail.

allow_hidden

Not sure, as there are more things at play, and the actual jupyter_server traitlets aren't in play... the above was just an example, and we have to fool the equivlant of jupyter_server and jupyterlab_server, an maybe @jupyterlab/services itself. Last I checked, there's also an overrides.json entry needed:

{
  "@jupyterlab/filebrowser-extension:browser": {
    "showHidden': true
  }
}

@yuvipanda
Copy link
Author

@bollwyvl currently the build process just completely crashes if the content directory has any hidden files. I mostly just want it to not crash :)

@yuvipanda
Copy link
Author

@bollwyvl I can't seem to implement your suggestion in #624 (comment) - how would I specify the 'equivalent' of that in config? In jupyter_lite_config.json? elsewhere? sorry if I'm being dense

@bollwyvl
Copy link
Collaborator

bollwyvl commented Nov 1, 2022 via email

@bollwyvl
Copy link
Collaborator

bollwyvl commented Nov 1, 2022

#860

Haven't tried it out with all the overrides, etc. but at least it doesn't asplode.

@yuvipanda
Copy link
Author

@bollwyvl yay! I tried to set that PR up locally to test, but got thwarted by not really being able to understand what is going on and why pip install -e . doesn't work (and the doit commands also seem to give me strange nested failures) :( I'm grateful y'all are keeping on top of this build system, the fact that it's doing all these complex things and works as well when released is amazing to me <3

Thank you very much for working on it, and I'll just test it out when it's out! \o/

@bollwyvl
Copy link
Collaborator

bollwyvl commented Nov 2, 2022

pip install -e . doesn't work

Welp, when pip install -e . doesn't decide to break that for pure python packages (has happened to flit, hatchling, etc. in the last few months) that is a nice property to have. Once we've gotten #854 out of the way, we'll only have one python package here, unless we still need a monorepo setup, because [extras] are hot trash... only thing worse is undeclared deps the user gets to find at run fail time.

doit commands also seem to give me strange nested failures

Such as?

doing all these complex things

Yerp, at present, there's like 10min of nested python and node stuff happening to get to a working build due to all the layers (e.g. .whl files hoisted to typescript imports 😱). For this reason, I don't like pip install doing node stuff at this scale, because when it breaks, the extra layers of flavor-of-the-week-python-build-backend errors hide what might be far, far worse (node-gyp errors for some esoteric image optimizer, etc).

@yuvipanda
Copy link
Author

@bollwyvl nvm, I got it to work! doit produced a lot of output and I was overwhelmed :D turns out I just needed to have yarn and node installed. I tested the PR and works :)

jtpio added a commit that referenced this issue Nov 15, 2022
Loosen `.` file detection, add `--extra-ignore-contents`
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

Successfully merging a pull request may close this issue.

2 participants