1{
2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5 nodejs,
6 yarn-berry_3,
7 hatch-jupyter-builder,
8 hatchling,
9 async-lru,
10 httpx,
11 importlib-metadata,
12 ipykernel,
13 jinja2,
14 jupyter-core,
15 jupyter-lsp,
16 jupyter-server,
17 jupyterlab-server,
18 notebook-shim,
19 packaging,
20 setuptools,
21 tomli,
22 tornado,
23 traitlets,
24 pythonOlder,
25}:
26
27buildPythonPackage rec {
28 pname = "jupyterlab";
29 version = "4.4.1";
30 pyproject = true;
31
32 src = fetchFromGitHub {
33 owner = "jupyterlab";
34 repo = "jupyterlab";
35 tag = "v${version}";
36 hash = "sha256-j1K5aBLLGSWER3S0Vojrwdd+9T9vYbp1+XgxYD2NORY=";
37 };
38
39 nativeBuildInputs = [
40 nodejs
41 yarn-berry_3.yarnBerryConfigHook
42 ];
43
44 preConfigure = ''
45 pushd jupyterlab/staging
46 '';
47
48 offlineCache = yarn-berry_3.fetchYarnBerryDeps {
49 inherit src;
50 sourceRoot = "${src.name}/jupyterlab/staging";
51 hash = "sha256-rko09rqT7UQUq/Ddi8lo3V02eJQEEnpjH5RaLSgqj/o=";
52 };
53
54 preBuild = ''
55 popd
56 '';
57
58 build-system = [
59 hatch-jupyter-builder
60 hatchling
61 ];
62
63 dependencies =
64 [
65 async-lru
66 httpx
67 ipykernel
68 jinja2
69 jupyter-core
70 jupyter-lsp
71 jupyter-server
72 jupyterlab-server
73 notebook-shim
74 packaging
75 setuptools
76 tornado
77 traitlets
78 ]
79 ++ lib.optionals (pythonOlder "3.11") [ tomli ]
80 ++ lib.optionals (pythonOlder "3.10") [ importlib-metadata ];
81
82 makeWrapperArgs = [
83 "--set"
84 "JUPYTERLAB_DIR"
85 "$out/share/jupyter/lab"
86 ];
87
88 # Depends on npm
89 doCheck = false;
90
91 pythonImportsCheck = [ "jupyterlab" ];
92
93 meta = with lib; {
94 changelog = "https://github.com/jupyterlab/jupyterlab/blob/v${version}/CHANGELOG.md";
95 description = "Jupyter lab environment notebook server extension";
96 license = licenses.bsd3;
97 homepage = "https://jupyter.org/";
98 teams = [ lib.teams.jupyter ];
99 mainProgram = "jupyter-lab";
100 };
101}