1{
2 lib,
3 buildPythonPackage,
4 pythonOlder,
5 fetchFromGitHub,
6 nodejs,
7 notebook,
8 ipywidgets,
9 ipykernel,
10 numpy,
11 runCommand,
12 jupyter-packaging,
13 jupyter-core,
14 notebook-shim,
15 setuptools-scm,
16 writableTmpDirAsHomeHook,
17 pytestCheckHook,
18 mock,
19 pillow,
20 ase,
21}:
22let
23 nodeModules = runCommand "nglview-node-modules" { } ''
24 mkdir -p $out/node_modules/@jupyter-widgets/base
25 cat > $out/node_modules/@jupyter-widgets/base/package.json <<EOF
26 {
27 "name": "@jupyter-widgets/base",
28 "version": "4.1.1",
29 "main": "lib/index.js"
30 }
31 EOF
32 '';
33in
34buildPythonPackage rec {
35 pname = "nglview";
36 version = "3.1.4";
37 pyproject = true;
38
39 disabled = pythonOlder "3.7";
40
41 src = fetchFromGitHub {
42 owner = "nglviewer";
43 repo = "nglview";
44 tag = "v${version}";
45 hash = "sha256-QY7rn6q67noWeoLn0RU2Sn5SeJON+Br/j+aNMlK1PDo=";
46 };
47
48 build-system = [
49 nodejs
50 jupyter-packaging
51 jupyter-core
52 notebook-shim
53 setuptools-scm
54 writableTmpDirAsHomeHook
55 ];
56
57 dependencies = [
58 notebook
59 ipywidgets
60 ipykernel
61 numpy
62 ];
63
64 preBuild = ''
65 cd js
66 cp -r ${nodeModules}/node_modules .
67 cd ..
68 '';
69
70 pythonImportsCheck = [ "nglview" ];
71
72 nativeCheckInputs = [
73 pytestCheckHook
74 mock
75 pillow
76 ase
77 ];
78
79 disabledTests = [
80 # requires parmed
81 "test_show_schrodinger"
82 # requires older moviepy
83 "test_movie_maker"
84 ];
85
86 postInstall = ''
87 mkdir -p $out/share/jupyter/nbextensions
88 cp -r nglview/static $out/share/jupyter/nbextensions/nglview-js-widgets
89 '';
90
91 meta = {
92 description = "IPython/Jupyter widget to interactively view molecular structures and trajectories";
93 homepage = "https://github.com/nglviewer/nglview";
94 changelog = "https://github.com/nglviewer/nglview/releases/tag/v${version}";
95 license = lib.licenses.mit;
96 maintainers = with lib.maintainers; [ guelakais ];
97 };
98}