diff --git a/pkgs/development/python-modules/kaleido/default.nix b/pkgs/development/python-modules/kaleido/default.nix new file mode 100644 index 0000000000000..0a8e3814fa00b --- /dev/null +++ b/pkgs/development/python-modules/kaleido/default.nix @@ -0,0 +1,117 @@ +{ + lib, + stdenv, + python, + buildPythonPackage, + callPackage, + fetchurl, + autoPatchelfHook, + bash, + dejavu_fonts, + expat, + fontconfig, + lato, + libGL, + makeWrapper, + nspr, + nss, + sbclPackages, + sqlite, +}: + +buildPythonPackage rec { + pname = "kaleido"; + version = "0.2.1"; + format = "wheel"; + + src = + { + # This library is so cursed that I have to use fetchurl instead of fetchPypi. I am not happy. + x86_64-linux = fetchurl { + url = "https://files.pythonhosted.org/packages/py2.py3/k/kaleido/kaleido-${version}-py2.py3-none-manylinux1_x86_64.whl"; + hash = "sha256-qiHPG/HHj4+lCp99ReEAPDh709b+CnZ8+780S5W9w6g="; + }; + aarch64-linux = fetchurl { + url = "https://files.pythonhosted.org/packages/py2.py3/k/kaleido/kaleido-${version}-py2.py3-none-manylinux2014_aarch64.whl"; + hash = "sha256-hFgZhEyAgslGnZwX5CYh+/hcKyN++KhuyKhSf5i2USo="; + }; + x86_64-darwin = fetchurl { + url = "https://files.pythonhosted.org/packages/py2.py3/k/kaleido/kaleido-${version}-py2.py3-none-macosx_10_11_x86_64.whl"; + hash = "sha256-ym9z5/8AquvyhD9z8dO6zeGTDvUEEJP+drg6FXhQSac="; + }; + aarch64-darwin = fetchurl { + url = "https://files.pythonhosted.org/packages/py2.py3/k/kaleido/kaleido-${version}-py2.py3-none-macosx_11_0_arm64.whl"; + hash = "sha256-u5pdH3EDV9XUMu4kDvZlim0STD5hCTWBe0tC2px4fAU="; + }; + } + ."${stdenv.hostPlatform.system}" + or (throw "Unsupported system for ${pname}: ${stdenv.hostPlatform.system}"); + + nativeBuildInputs = (lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]) ++ [ + makeWrapper + ]; + buildInputs = [ + bash + dejavu_fonts + expat + fontconfig + lato + libGL + nspr + nss + sbclPackages.cl-dejavu + sqlite + ]; + + pythonImportsCheck = [ "kaleido" ]; + + postInstall = '' + # Expose kaleido binary + mkdir -p $out/bin + ln -s $out/${python.sitePackages}/kaleido/executable/bin/kaleido $out/bin/kaleido + + # Replace bundled swiftshader with libGL + rm -rf $out/${python.sitePackages}/kaleido/executable/bin/swiftshader + ln -s ${libGL}/lib $out/${python.sitePackages}/kaleido/executable/bin/swiftshader + + # Relace bundled libraries with nixpkgs-packaged libraries + rm -rf $out/${python.sitePackages}/kaleido/executable/lib + mkdir -p $out/${python.sitePackages}/kaleido/executable/lib + ln -s ${expat}/lib/* $out/${python.sitePackages}/kaleido/executable/lib/ + ln -s ${nspr}/lib/* $out/${python.sitePackages}/kaleido/executable/lib/ + ln -s ${nss}/lib/* $out/${python.sitePackages}/kaleido/executable/lib/ + ln -s ${sqlite}/lib/* $out/${python.sitePackages}/kaleido/executable/lib/ + + # Replace bundled font configuration with nixpkgs-packaged font configuration + rm -rf $out/${python.sitePackages}/kaleido/executable/etc/fonts + mkdir -p $out/${python.sitePackages}/kaleido/executable/etc/fonts/conf.d + ln -s ${fontconfig}/etc/fonts/fonts.conf $out/${python.sitePackages}/kaleido/executable/etc/fonts/ + ls -s ${fontconfig}/etc/fonts/conf.d/* $out/${python.sitePackages}/kaleido/executable/etc/fonts/conf.d/ + ln -s ${sbclPackages.cl-dejavu}/dejavu-fonts-ttf-2.37/fontconfig/* $out/${python.sitePackages}/kaleido/executable/etc/fonts/conf.d/ + + # Replace bundled fonts with nixpkgs-packaged fonts + # Currently this causes an issue where the fonts aren't found. I'm not sure why, so I'm leaving this commented out for now. + #rm -rf $out/${python.sitePackages}/kaleido/executable/xdg/fonts + #mkdir -p $out/${python.sitePackages}/kaleido/executable/xdg/fonts/truetype/dejavu $out/${python.sitePackages}/kaleido/executable/xdg/fonts/truetype/lato + #ln -s ${dejavu_fonts}/share/fonts/truetype/* $out/${python.sitePackages}/kaleido/executable/xdg/fonts/truetype/dejavu/ + #ln -s ${lato}/share/fonts/lato/* $out/${python.sitePackages}/kaleido/executable/xdg/fonts/truetype/lato/ + ''; + + passthru.tests.kaleido = callPackage ./tests.nix { }; + + meta = { + description = "Fast static image export for web-based visualization libraries with zero dependencies"; + homepage = "https://github.com/plotly/Kaleido"; + changelog = "https://github.com/plotly/Kaleido/releases"; + platforms = [ + "x86_64-linux" + "x86_64-darwin" + "aarch64-linux" + "aarch64-darwin" + ]; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; # Trust me, I'm not happy. But after literal hours of trying to reverse-engineer their build system and getting nowhere, I'll use the stupid binaries >:( + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ pandapip1 ]; + broken = stdenv.isDarwin; # Tests fail on darwin for some reason + }; +} diff --git a/pkgs/development/python-modules/kaleido/tests.nix b/pkgs/development/python-modules/kaleido/tests.nix new file mode 100644 index 0000000000000..e09f4947a563e --- /dev/null +++ b/pkgs/development/python-modules/kaleido/tests.nix @@ -0,0 +1,15 @@ +{ + runCommand, + python, + plotly, + pandas, + kaleido, +}: + +runCommand "${kaleido.pname}-tests" { + nativeBuildInputs = [ + python + plotly + pandas + ]; +} "python3 ${./tests.py}" diff --git a/pkgs/development/python-modules/kaleido/tests.py b/pkgs/development/python-modules/kaleido/tests.py new file mode 100644 index 0000000000000..0cbcaaae60bed --- /dev/null +++ b/pkgs/development/python-modules/kaleido/tests.py @@ -0,0 +1,11 @@ +import plotly.express as px +import os +import os.path + +out = os.environ["out"] +if not os.path.exists(out): + os.makedirs(out) + +outfile = os.path.join(out, "figure.png") +fig = px.scatter(px.data.iris(), x="sepal_length", y="sepal_width", color="species") +fig.write_image(outfile, engine="kaleido") diff --git a/pkgs/development/python-modules/plotly/default.nix b/pkgs/development/python-modules/plotly/default.nix index 541155fcf4ffc..a3a8692ce6c5a 100644 --- a/pkgs/development/python-modules/plotly/default.nix +++ b/pkgs/development/python-modules/plotly/default.nix @@ -6,6 +6,7 @@ requests, six, tenacity, + kaleido, }: buildPythonPackage rec { @@ -23,6 +24,7 @@ buildPythonPackage rec { requests six tenacity + kaleido ]; # No tests in archive @@ -33,6 +35,6 @@ buildPythonPackage rec { downloadPage = "https://github.com/plotly/plotly.py"; homepage = "https://plot.ly/python/"; license = with licenses; [ mit ]; - maintainers = with maintainers; [ ]; + maintainers = with maintainers; [ pandapip1 ]; }; } diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 08b43f44af7a1..dc70f8c0aa4da 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6332,6 +6332,8 @@ self: super: with self; { kaldi-active-grammar = callPackage ../development/python-modules/kaldi-active-grammar { }; + kaleido = callPackage ../development/python-modules/kaleido { }; + kanidm = callPackage ../development/python-modules/kanidm { }; kaptan = callPackage ../development/python-modules/kaptan { };