1{
2 lib,
3 python3,
4 buildNpmPackage,
5 fetchFromGitHub,
6 jq,
7 stdenv,
8}:
9
10let
11 python = python3.override {
12 self = python;
13 packageOverrides = self: super: {
14 # pyCA is incompatible with SQLAlchemy 2.0
15 sqlalchemy = super.sqlalchemy_1_4;
16 };
17 };
18
19 frontend = buildNpmPackage rec {
20 pname = "pyca";
21 version = "4.5";
22
23 src = fetchFromGitHub {
24 owner = "opencast";
25 repo = "pyCA";
26 rev = "v${version}";
27 sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
28 };
29
30 npmDepsHash = "sha256-0U+semrNWTkNu3uQQkiJKZT1hB0/IfkL84G7/oP8XYY=";
31
32 nativeBuildInputs = [
33 jq
34 python
35 ];
36
37 postPatch = ''
38 ${jq}/bin/jq '. += {"version": "${version}"}' < package.json > package.json.tmp
39 mv package.json.tmp package.json
40 '';
41
42 installPhase = ''
43 mkdir -p $out/static
44 cp -R pyca/ui/static/* $out/static/
45 '';
46 };
47
48in
49python3.pkgs.buildPythonApplication rec {
50 pname = "pyca";
51 version = "4.5";
52 pyproject = true;
53
54 src = fetchFromGitHub {
55 owner = "opencast";
56 repo = "pyCA";
57 rev = "v${version}";
58 sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
59 };
60
61 build-system = with python3.pkgs; [ setuptools ];
62
63 dependencies = with python.pkgs; [
64 pycurl
65 python-dateutil
66 configobj
67 sqlalchemy
68 sdnotify
69 psutil
70 flask
71 prometheus-client
72 ];
73
74 postPatch = ''
75 sed -i -e 's#static_folder=.*#static_folder="${frontend}/static")#' pyca/ui/__init__.py
76 '';
77
78 pythonImportsCheck = [ "pyca" ];
79
80 passthru = {
81 inherit frontend;
82 };
83
84 meta = with lib; {
85 broken = stdenv.hostPlatform.isDarwin;
86 description = "Fully functional Opencast capture agent written in Python";
87 mainProgram = "pyca";
88 homepage = "https://github.com/opencast/pyCA";
89 license = licenses.lgpl3;
90 maintainers = with maintainers; [ pmiddend ];
91 };
92}