about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMartin Weinelt <mweinelt@users.noreply.github.com>2023-05-12 18:15:38 +0200
committerGitHub <noreply@github.com>2023-05-12 18:15:38 +0200
commita9d8cb2c16b2f95a876dae825d16cdb9e4e253ad (patch)
tree568e2597715353a8e9b4b025281f64062f269643
parent162d87100bbf46b4049becf19c3dcfce2a1244db (diff)
parent8b54d13aac4362370f231a676fe5bdc62a1fb5e7 (diff)
Merge pull request #230821 from pmiddend/pyca-update
pyCA: 2.1 -> 4.5
-rw-r--r--pkgs/applications/video/pyca/default.nix62
-rw-r--r--pkgs/top-level/all-packages.nix2
2 files changed, 58 insertions, 6 deletions
diff --git a/pkgs/applications/video/pyca/default.nix b/pkgs/applications/video/pyca/default.nix
index decba42dd5f4e..ed167aeb91cbb 100644
--- a/pkgs/applications/video/pyca/default.nix
+++ b/pkgs/applications/video/pyca/default.nix
@@ -1,25 +1,77 @@
-{ stdenv, lib, buildPythonApplication, fetchFromGitHub, pycurl, python-dateutil, configobj, sqlalchemy, sdnotify, flask }:
+{ stdenv, lib, python3, fetchFromGitHub, buildNpmPackage, jq }:
 
-buildPythonApplication rec {
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      # pyCA is incompatible with SQLAlchemy 2.0
+      sqlalchemy = super.sqlalchemy.overridePythonAttrs (old: rec {
+        version = "1.4.46";
+        src = self.fetchPypi {
+          pname = "SQLAlchemy";
+          inherit version;
+          hash = "sha256-aRO4JH2KKS74MVFipRkx4rQM6RaB8bbxj2lwRSAMSjA=";
+        };
+      });
+    };
+  };
+
+  frontend = buildNpmPackage rec {
+    pname = "pyca";
+    version = "4.5";
+
+    src = fetchFromGitHub {
+      owner = "opencast";
+      repo = "pyCA";
+      rev = "v${version}";
+      sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
+    };
+
+    npmDepsHash = "sha256-0U+semrNWTkNu3uQQkiJKZT1hB0/IfkL84G7/oP8XYY=";
+
+    nativeBuildInputs = [ jq python ];
+
+    postPatch = ''
+      ${jq}/bin/jq '. += {"version": "${version}"}' < package.json > package.json.tmp
+      mv package.json.tmp package.json
+    '';
+
+    installPhase = ''
+      mkdir -p $out/static
+      cp -R pyca/ui/static/* $out/static/
+    '';
+  };
+
+in
+python3.pkgs.buildPythonApplication rec {
   pname = "pyca";
-  version = "2.1";
+  version = "4.5";
 
   src = fetchFromGitHub {
     owner = "opencast";
     repo = "pyCA";
     rev = "v${version}";
-    sha256 = "0cvkmdlcax9da9iw4ls73vw0pxvm8wvchab5gwdy9w9ibqdpcmwh";
+    sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk=";
   };
 
-  propagatedBuildInputs = [
+  propagatedBuildInputs = with python.pkgs; [
     pycurl
     python-dateutil
     configobj
     sqlalchemy
     sdnotify
+    psutil
     flask
+    prometheus-client
   ];
 
+  postPatch = ''
+    sed -i -e 's#static_folder=.*#static_folder="${frontend}/static")#' pyca/ui/__init__.py
+  '';
+
+  passthru = {
+    inherit frontend;
+  };
+
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "A fully functional Opencast capture agent written in Python";
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 8594fe67238eb..d5be122b5c007 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5643,7 +5643,7 @@ with pkgs;
 
   waitron = callPackage ../tools/networking/waitron { };
 
-  pyCA = python3Packages.callPackage ../applications/video/pyca { };
+  pyCA = callPackage ../applications/video/pyca { };
 
   pyznap = python3Packages.callPackage ../tools/backup/pyznap { };