Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions pkgs/development/python-modules/kaleido/default.nix
Original file line number Diff line number Diff line change
@@ -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
};
}
15 changes: 15 additions & 0 deletions pkgs/development/python-modules/kaleido/tests.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
runCommand,
python,
plotly,
pandas,
kaleido,
}:

runCommand "${kaleido.pname}-tests" {
nativeBuildInputs = [
python
plotly
pandas
];
} "python3 ${./tests.py}"
11 changes: 11 additions & 0 deletions pkgs/development/python-modules/kaleido/tests.py
Original file line number Diff line number Diff line change
@@ -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")
4 changes: 3 additions & 1 deletion pkgs/development/python-modules/plotly/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
requests,
six,
tenacity,
kaleido,
}:

buildPythonPackage rec {
Expand All @@ -23,6 +24,7 @@ buildPythonPackage rec {
requests
six
tenacity
kaleido
];

# No tests in archive
Expand All @@ -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 ];
};
}
2 changes: 2 additions & 0 deletions pkgs/top-level/python-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 { };
Expand Down