From 8b54d13aac4362370f231a676fe5bdc62a1fb5e7 Mon Sep 17 00:00:00 2001 From: Philipp Middendorf Date: Tue, 9 May 2023 08:31:48 +0200 Subject: [PATCH] pyCA: 2.1 -> 4.5 --- pkgs/applications/video/pyca/default.nix | 62 ++++++++++++++++++++++-- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/video/pyca/default.nix b/pkgs/applications/video/pyca/default.nix index decba42dd5f4..ed167aeb91cb 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 ce676ce4849a..c822d51f0121 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5640,7 +5640,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 { };