A Jupyter server based on FastAPI (Experimental)

Related tags

jupyverse
Overview

Build Status Code style: black Binder

jupyverse

jupyverse is experimental and should not be used in place of jupyter-server, which is the official Jupyter server.

A set of FPS plugins implementing a Jupyter server.

Motivation for Experimental Server

For the motivations behind this project, please refer to this issue in the Jupyter server team compass.

Install

pip install jupyverse[jupyterlab]

Note: at this stage of development, it is preferable to install from sources (see below).

Development install

Clone this repository and install the needed plugins:

pip install -e .[jupyterlab] --no-deps
pip install -e plugins/jupyterlab
pip install -e plugins/contents
pip install -e plugins/kernels
pip install -e plugins/terminals
pip install -e plugins/nbconvert
pip install -e plugins/yjs
pip install -e plugins/auth

# you should also install the latest FPS:
pip install git+https://github.com/jupyter-server/fps

# if you want RetroLab instead of JupyterLab:
# pip install -e .[retrolab] --no-deps
# pip install -e plugins/retrolab
# ...

Usage

Without authentication

jupyverse --open-browser --authenticator.mode=noauth

This will open a browser at http://127.0.0.1:8000 by default, and load the JupyterLab front-end. You have full access to the API, without restriction.

With token authentication

jupyverse --open-browser --authenticator.mode=token

This is the default mode, and it corresponds to Jupyter Server's token-based authentication.

With user authentication

jupyverse --open-browser --authenticator.mode=user

We provide a JupyterLab extension for authentication, that you can install with:

pip install git+https://github.com/davidbrochart/jupyverse-auth

You can currently authenticate as an anonymous user, or using a GitHub account.

With collaborative editing

jupyverse --open-browser --JupyterLab.collaborative=true

This is especially interesting if you are "user-authenticated", since your will appear as the identity you chose for authentication.

Issues
  • Login page

    Login page

    Added a new plugin that registers a new endpoint for the login page.

    The login page has three ways of login, GitHub, token or anonymous.

    The GitHub login throws a server error when redirecting, looks like the error comes from FastAPI Users when it tries to retrieve the user information from GitHub. I'll debug tomorrow.

    Regarding the login with the token, I'm not sure how it works.

    Screenshot from 2021-09-23 19-22-51

    opened by hbcarlos 36
  • Improve Binder and launch jupyverse directly

    Improve Binder and launch jupyverse directly

    Closes #73

    opened by davidbrochart 10
  • Use `fps_uvicorn` plugin

    Use `fps_uvicorn` plugin

    Description

    https://github.com/jupyter-server/fps/pull/32 moved uvicorn and corresponding CLI to a dedicated plugin.

    Use fps_uvicorn plugin:

    • use config moved from fps to fps_uvicorn
    • update dependencies
    • use logger to print link in console
    opened by adriendelsalle 9
  • Per-user settings/workspace

    Per-user settings/workspace

    Problem

    In Jupyverse, settings and workspace are stored alongside the user information, in a database. When jupyverse is launched with --authenticator.mode=noauth, there is no authentication and the whole API is unprotected. Naturally, we want settings and workspace to be stored with this unique, "global user", so that users get their settings back the next time they launch jupyverse. When jupyverse is launched with --authenticator.mode=token, a token is created and a user is registered in the DB with this token as its ID. When jupyverse is stopped, the user is removed from the DB. What this means is that this is a new user each time, and settings won't persist between jupyverse launches.

    Proposed Solution

    Maybe each token-user should inherit the unauthenticated, "global user" settings and workspace, by copying them when the token-user is registered? That would at least guarantee some persistence for settings and workspace. Similarly, settings and workspace could be copied back to the "global user" when the token-user jupyverse is stopped? If several unauthenticated-user or token-user jupyverse are launched at the same time, this is obviously a source of conflicts, but the main use-case of these two modes are really a single user launching a single server at a time.

    enhancement 
    opened by davidbrochart 6
  • Add `consoles` and `terminals` handlers for RetroLab

    Add `consoles` and `terminals` handlers for RetroLab

    Consoles and terminals are also supported in RetroLab.

    opened by jtpio 5
  • Improve retrolab

    Improve retrolab

    Fixes #55 Fixes #33

    opened by davidbrochart 4
  • Support RetroLab settings

    Support RetroLab settings

    null

    opened by davidbrochart 3
  • Prepare for use with Jupyter Releaser

    Prepare for use with Jupyter Releaser

    Closes #70

    maintenance 
    opened by davidbrochart 3
  • Use FPS as a server of plugins

    Use FPS as a server of plugins

    Description

    Rely on fps for fastapi plugins and typer cli Refactor contentapi and retrolab endpoints to use fps

    opened by adriendelsalle 3
  • Interactive docs broken

    Interactive docs broken

    Description

    Interactive documentation is broken because AttributeError: 'NoAuth' object has no attribute 'model'.

    Reproduce

    1. Start jupyverse --no-open-browser
    2. Go to http://127.0.0.1:8000/docs
    3. See the error in the termial.

    NoAuth should have a "dummy" model, or we should "remove" it from the security schemes. Any idea @frankie567?

    bug 
    opened by davidbrochart 3
  • Terminals plugin on Windows

    Terminals plugin on Windows

    Problem

    fps-terminals currently doesn't work on Windows. I'm not sure if it's because it uses termios, or more generally because we use pty.

    Proposed Solution

    Maybe use https://github.com/rprichard/winpty on Windows?

    enhancement 
    opened by davidbrochart 0
  • Remove

    Remove "experimental" from README

    Problem

    I don't think we can consider jupyverse to be experimental anymore, since it already supports most of jupyter-server's functionality. Also, people might think it's too early to contribute, while we should direct efforts to this new architecture.

    Proposed Solution

    I suggest we remove the "experimental" warning in the README, unless people think differently.

    enhancement 
    opened by davidbrochart 0
  • Documentation

    Documentation

    We currently have no other documentation than the README. Interactive documentation of the API comes for free with FastAPI, but we should start documenting the plugins and their configuration.

    enhancement 
    opened by davidbrochart 0
  • Conda packages

    Conda packages

    Problem

    Now that we can release to PyPI easily with Jupyter Releaser, we should have conda packages for jupyverse and all of its plugins.

    Proposed Solution

    The only issue is that we currently pip install jupyverse[jupyterlab] or pip install jupyverse[retrolab], because fps-jupyterlab and fps-retrolab conflict. For conda, I see two options:

    • we could have a jupyverse conda package that includes both fps-jupyterlab and fps-retrolab, but one of them would have to be disabled at runtime, otherwise FPS will report a conflict.
    • we could have a jupyverse conda package that doesn't have fps-jupyterlab nor fps-retrolab, and let the user conda-install one of them. We could also have jupyverse_jupyterlab and jupyverse_retrolab conda packages, that would consist of jupyverse + fps-jupyterlab and jupyverse + fps-retrolab, respectivelly.
    enhancement 
    opened by davidbrochart 0
  • Swap auth plugin

    Swap auth plugin

    Problem

    Currently, plugins in jupyverse are quite independent, meaning that you can decide to use e.g. only the kernels plugin, and this won't pull in the other ones. Except for the auth plugin, because this is the one which is used to protect almost all the endpoints, using the current_user dependency.

    While this seems necessary, the current auth plugin is just one implementation of authentication, and it should be possible to develop and use other implementations. The problem is that a plugin needs to explicitly declare its dependencies at install-time, as they are Python packages.

    Proposed Solution

    Maybe we could have all plugins depend on an fps-auth Python package as we currently do, with the difference that fps-auth would only provide a "specification for an authentication plugin", but would not actually implement it. Then, an implementation of this specification would need to be installed (e.g. fps-auth-github that would implement GitHub authentication).

    I know that @adriendelsalle was thinking about something along these lines, maybe that should be handled at the FPS level? cc @hbcarlos

    enhancement 
    opened by davidbrochart 1
  • Add the french language pack on Binder

    Add the french language pack on Binder

    So we can test the support for translation on Binder with JupyterLab and RetroLab.

    enhancement 
    opened by jtpio 9
  • Authorization

    Authorization

    Reference for implementing roles and permissions: https://github.com/fastapi-users/fastapi-users/discussions/454#discussioncomment-825823

    enhancement 
    opened by davidbrochart 0
Releases(v0.0.16)
Owner
Jupyter Server
Jupyter's main server application, server extensions, and related projects
Jupyter Server
Ready-to-use and customizable users management for FastAPI

FastAPI Users Ready-to-use and customizable users management for FastAPI Documentation: https://frankie567.github.io/fastapi-users/ Source Code: https

François Voron 1.3k Oct 23, 2021
FastAPI framework plugins

Plugins for FastAPI framework, high performance, easy to learn, fast to code, ready for production fastapi-plugins FastAPI framework plugins Cache Mem

RES 163 Oct 14, 2021
Reusable utilities for FastAPI

Reusable utilities for FastAPI Documentation: https://fastapi-utils.davidmontague.xyz Source Code: https://github.com/dmontagu/fastapi-utils FastAPI i

David Montague 868 Oct 22, 2021
row level security for FastAPI framework

Row Level Permissions for FastAPI While trying out the excellent FastApi framework there was one peace missing for me: an easy, declarative way to def

Holger Frey 187 Oct 17, 2021
The base to start an openapi project featuring: SQLModel, Typer, FastAPI, JWT Token Auth, Interactive Shell, Management Commands.

The base to start an openapi project featuring: SQLModel, Typer, FastAPI, JWT Token Auth, Interactive Shell, Management Commands.

Bruno Rocha 56 Oct 17, 2021
FastAPI构建的API服务

使用FastAPI 构建的商城项目API 学习FastAPI 构建项目目录 构建项目接口: 对应博客:https://www.charmcode.cn/article/2020-06-08_vue_mall_api 声明 此项目已经不再维护, 可以参考我另外一个项目https://github.co

王小右 47 Sep 7, 2021
api versioning for fastapi web applications

fastapi-versioning api versioning for fastapi web applications Installation pip install fastapi-versioning Examples from fastapi import FastAPI from f

Dean Way 303 Oct 21, 2021
JSON-RPC server based on fastapi

Description JSON-RPC server based on fastapi: https://fastapi.tiangolo.com Motivation Autogenerated OpenAPI and Swagger (thanks to fastapi) for JSON-R

null 125 Oct 14, 2021
A Jupyter server based on FastAPI (Experimental)

jupyverse is experimental and should not be used in place of jupyter-server, which is the official Jupyter server.

Jupyter Server 78 Oct 18, 2021
a lightweight web framework based on fastapi

start-fastapi Version 2021, based on FastAPI, an easy-to-use web app developed upon Starlette Framework Version 2020 中文文档 Requirements python 3.6+ (fo

HiKari 61 Sep 29, 2021
Backend logic implementation for realworld with awesome FastAPI

Backend logic implementation for realworld with awesome FastAPI

Nik 1.4k Oct 23, 2021
Monitor Python applications using Spring Boot Admin

Pyctuator Monitor Python web apps using Spring Boot Admin. Pyctuator supports Flask, FastAPI, aiohttp and Tornado. Django support is planned as well.

SolarEdge Technologies 97 Oct 22, 2021
基于Pytorch的脚手架项目,Celery+FastAPI+Gunicorn+Nginx+Supervisor实现服务部署,支持Docker发布

cookiecutter-pytorch-fastapi 基于Pytorch的 脚手架项目 按规范添加推理函数即可实现Celery+FastAPI+Gunicorn+Nginx+Supervisor+Docker的快速部署 Requirements Python >= 3.6 with pip in

null 12 Oct 15, 2021
python fastapi example connection to mysql

Quickstart Then run the following commands to bootstrap your environment with poetry: git clone https://github.com/xiaozl/fastapi-realworld-example-ap

null 31 Oct 12, 2021
FastAPI Skeleton App to serve machine learning models production-ready.

FastAPI Model Server Skeleton Serving machine learning models production-ready, fast, easy and secure powered by the great FastAPI by Sebastián Ramíre

null 208 Oct 20, 2021
FastAPI Boilerplate

FastAPI Boilerplate Features SQlAlchemy session Custom user class Top-level dependency Dependencies for specific permissions Celery SQLAlchemy for asy

Hide 62 Oct 15, 2021
TODO aplication made with Python's FastAPI framework and Hexagonal Architecture

FastAPI Todolist Description Todolist aplication made with Python's FastAPI framework and Hexagonal Architecture. This is a test repository for the pu

Giovanni Armane 40 Oct 14, 2021
FastAPI on Google Cloud Run

cloudrun-fastapi Boilerplate for running FastAPI on Google Cloud Run with Google Cloud Build for deployment. For all documentation visit the docs fold

Anthony Corletti 65 Oct 5, 2021
Auth for use with FastAPI

FastAPI Auth Pluggable auth for use with FastAPI Supports OAuth2 Password Flow Uses JWT access and refresh tokens 100% mypy and test coverage Supports

David Montague 59 Oct 6, 2021