1{
2 lib,
3 buildPythonPackage,
4 pythonOlder,
5 fetchPypi,
6 hatch-jupyter-builder,
7 hatch-nodejs-version,
8 hatchling,
9 jsonschema,
10 jupyter-events,
11 jupyter-server,
12 jupyter-server-fileid,
13 jupyter-ydoc,
14 jupyterlab,
15 pycrdt-websocket,
16 pytest-jupyter,
17 pytestCheckHook,
18 websockets,
19}:
20
21buildPythonPackage rec {
22 pname = "jupyter-collaboration";
23 version = "2.1.1";
24 pyproject = true;
25
26 disabled = pythonOlder "3.8";
27
28 src = fetchPypi {
29 pname = "jupyter_collaboration";
30 inherit version;
31 hash = "sha256-T1DCXG2BEmwW3q+S0r14o5svy4ZpDc5pa0AGt0DXHB8=";
32 };
33
34 postPatch = ''
35 sed -i "/^timeout/d" pyproject.toml
36 '';
37
38 build-system = [
39 hatch-jupyter-builder
40 hatch-nodejs-version
41 hatchling
42 jupyterlab
43 ];
44
45 dependencies = [
46 jsonschema
47 jupyter-events
48 jupyter-server
49 jupyter-server-fileid
50 jupyter-ydoc
51 pycrdt-websocket
52 ];
53
54 nativeCheckInputs = [
55 pytest-jupyter
56 pytestCheckHook
57 websockets
58 ];
59
60 pythonImportsCheck = [ "jupyter_collaboration" ];
61
62 preCheck = ''
63 export HOME=$TEMP
64 '';
65
66 pytestFlagsArray = [ "-Wignore::DeprecationWarning" ];
67
68 disabledTests = [
69 # ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
70 "test_dirty"
71 # causes a hang
72 "test_rooms"
73 ];
74
75 __darwinAllowLocalNetworking = true;
76
77 meta = with lib; {
78 description = "JupyterLab Extension enabling Real-Time Collaboration";
79 homepage = "https://github.com/jupyterlab/jupyter_collaboration";
80 changelog = "https://github.com/jupyterlab/jupyter_collaboration/blob/v${version}/CHANGELOG.md";
81 license = licenses.bsd3;
82 maintainers = teams.jupyter.members;
83 };
84}