nixpkgs/pkgs/applications/misc/octoprint/default.nix

294 lines
9.4 KiB
Nix
Raw Normal View History

2020-08-25 22:29:31 +01:00
{ pkgs
, stdenv
, lib
, fetchFromGitHub
, python38
, substituteAll
2021-02-01 02:43:52 +00:00
, nix-update-script
2020-08-25 22:29:31 +01:00
# To include additional plugins, pass them here as an overlay.
, packageOverrides ? self: super: {}
}:
let
mkOverride = attrname: version: sha256:
2020-08-25 22:29:31 +01:00
self: super: {
${attrname} = super.${attrname}.overridePythonAttrs (
oldAttrs: {
inherit version;
2018-08-30 21:14:06 +01:00
src = oldAttrs.src.override {
inherit version sha256;
2018-08-30 21:14:06 +01:00
};
2020-08-25 22:29:31 +01:00
}
);
};
py = python38.override {
self = py;
2020-08-25 22:29:31 +01:00
packageOverrides = lib.foldr lib.composeExtensions (self: super: {}) (
[
# the following dependencies are non trivial to update since later versions introduce backwards incompatible
# changes that might affect plugins, or due to other observed problems
(mkOverride "click" "7.1.2" "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a")
2020-12-07 13:14:38 +00:00
(mkOverride "flask-babel" "1.0.0" "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn")
(mkOverride "itsdangerous" "1.1.0" "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19")
(mkOverride "jinja2" "2.11.3" "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6")
2020-08-25 22:29:31 +01:00
(mkOverride "markdown" "3.1.1" "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a")
(mkOverride "markupsafe" "1.1.1" "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b")
(mkOverride "sarge" "0.1.5.post0" "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s")
2020-08-25 22:29:31 +01:00
(mkOverride "tornado" "5.1.1" "4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409")
(mkOverride "unidecode" "0.04.21" "280a6ab88e1f2eb5af79edff450021a0d3f0448952847cd79677e55e58bad051")
# Requires flask<2, cannot mkOverride because tests need to be disabled
(
self: super: {
flask = super.flask.overridePythonAttrs (oldAttrs: rec {
version = "1.1.2";
src = oldAttrs.src.override {
inherit version;
sha256 = "4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060";
};
doCheck = false;
});
}
)
# Requires werkezug<2, cannot mkOverride because tests need to be disabled
(
self: super: {
werkzeug = super.werkzeug.overridePythonAttrs (oldAttrs: rec {
version = "1.0.1";
src = oldAttrs.src.override {
inherit version;
sha256 = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c";
};
doCheck= false;
});
}
)
# Requires websocket-client <1.0, >=0.57. Cannot do mkOverride b/c differing underscore/hyphen in pypi source name
(
self: super: {
websocket-client = super.websocket-client.overridePythonAttrs (
oldAttrs: rec {
version = "0.58.0";
src = oldAttrs.src.override {
pname = "websocket_client";
inherit version;
sha256 = "63509b41d158ae5b7f67eb4ad20fecbb4eee99434e73e140354dc3ff8e09716f";
};
propagatedBuildInputs = [ self.six ];
}
);
}
)
# Octoprint needs zeroconf >=0.24 <0.25. This can't be done via mkOverride, because in zeroconf 0.32
# the super package was migrated to fetchFromGitHub.
2020-12-04 20:08:40 +00:00
(
self: super: {
zeroconf = super.zeroconf.overrideAttrs (oldAttrs: rec {
version = "0.24.5";
src = super.fetchPypi {
inherit (oldAttrs) pname;
2020-12-04 20:08:40 +00:00
inherit version;
sha256 = "0jpgd0rk91si93857mjrizan5gc42kj1q4fi4160qgk68la88fl9";
};
pythonImportsCheck = [
"zeroconf"
];
buildInputs = with self; [
pytestCheckHook
nose
];
pytestFlagsArray = [ "zeroconf/test.py" ];
2020-12-04 20:08:40 +00:00
});
}
)
2020-08-25 22:29:31 +01:00
# Built-in dependency
(
self: super: {
octoprint-filecheck = self.buildPythonPackage rec {
pname = "OctoPrint-FileCheck";
version = "2021.2.23";
2020-08-25 22:29:31 +01:00
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint-FileCheck";
rev = version;
sha256 = "sha256-e/QGEBa9+pjOdrZq3Zc6ifbSMClIyeTOi0Tji0YdVmI=";
2020-08-25 22:29:31 +01:00
};
doCheck = false;
};
}
)
2020-08-25 22:29:31 +01:00
# Built-in dependency
(
self: super: {
octoprint-firmwarecheck = self.buildPythonPackage rec {
pname = "OctoPrint-FirmwareCheck";
version = "2021.8.11";
2020-08-25 22:29:31 +01:00
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint-FirmwareCheck";
rev = version;
sha256 = "sha256-WzVjHgjF12iJ642AFaFd86GSU90XyPzKhi1CSreynW4=";
};
doCheck = false;
};
}
)
(
self: super: {
octoprint-pisupport = self.buildPythonPackage rec {
pname = "OctoPrint-PiSupport";
version = "2021.8.2";
format = "setuptools";
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint-PiSupport";
rev = version;
sha256 = "07akx61wadxhs0545pqa9gzjnaz9742bq710f8f4zs5x6sacjzbc";
2020-08-25 22:29:31 +01:00
};
# requires octoprint itself during tests
2020-08-25 22:29:31 +01:00
doCheck = false;
};
}
)
2016-02-14 11:56:07 +00:00
2020-08-25 22:29:31 +01:00
(
self: super: {
octoprint = self.buildPythonPackage rec {
pname = "OctoPrint";
version = "1.6.1";
2016-02-14 11:56:07 +00:00
2020-08-25 22:29:31 +01:00
src = fetchFromGitHub {
owner = "OctoPrint";
repo = "OctoPrint";
rev = version;
sha256 = "sha256-3b3k9h8H9Spf/P3/pXpCANnSGOgbUw/EWISJbrSoPBM=";
2020-08-25 22:29:31 +01:00
};
2020-08-25 22:29:31 +01:00
propagatedBuildInputs = with super; [
2020-12-04 20:09:22 +00:00
blinker
cachelib
click
emoji
feedparser
filetype
2020-08-25 22:29:31 +01:00
flask
flask-babel
flask_assets
2020-12-04 20:09:22 +00:00
flask_login
frozendict
future
2020-08-25 22:29:31 +01:00
itsdangerous
immutabledict
2020-12-04 20:09:22 +00:00
jinja2
markdown
markupsafe
2020-08-25 22:29:31 +01:00
netaddr
netifaces
2020-12-04 20:09:22 +00:00
octoprint-filecheck
octoprint-firmwarecheck
octoprint-pisupport
2020-08-25 22:29:31 +01:00
pkginfo
pip
2020-12-04 20:09:22 +00:00
psutil
pylru
pyserial
pyyaml
regex
2020-08-25 22:29:31 +01:00
requests
2020-12-04 20:09:22 +00:00
rsa
sarge
2020-08-25 22:29:31 +01:00
semantic-version
sentry-sdk
setuptools
2020-12-04 20:09:22 +00:00
tornado
2020-08-25 22:29:31 +01:00
unidecode
2020-12-04 20:09:22 +00:00
watchdog
websocket-client
2020-12-04 20:09:22 +00:00
werkzeug
wrapt
2020-12-04 20:08:40 +00:00
zeroconf
zipstream-new
2020-08-25 22:29:31 +01:00
] ++ lib.optionals stdenv.isDarwin [ py.pkgs.appdirs ];
2016-02-14 11:56:07 +00:00
2020-08-25 22:29:31 +01:00
checkInputs = with super; [ pytestCheckHook mock ddt ];
patches = [
# substitute pip and let it find out, that it can't write anywhere
(substituteAll {
src = ./pip-path.patch;
pip = "${super.pip}/bin/pip";
})
# hardcore path to ffmpeg and hide related settings
(substituteAll {
src = ./ffmpeg-path.patch;
ffmpeg = "${pkgs.ffmpeg}/bin/ffmpeg";
})
];
2020-08-25 22:29:31 +01:00
postPatch = let
ignoreVersionConstraints = [
"emoji"
"immutabledict"
2020-08-25 22:29:31 +01:00
"sentry-sdk"
"watchdog"
2020-08-25 22:29:31 +01:00
];
in
''
sed -r -i \
${lib.concatStringsSep "\n" (
map (
e:
''-e 's@${e}[<>=]+.*@${e}",@g' \''
) ignoreVersionConstraints
)}
setup.py
'';
2020-08-25 22:29:31 +01:00
dontUseSetuptoolsCheck = true;
2020-08-25 22:29:31 +01:00
preCheck = ''
export HOME=$(mktemp -d)
rm pytest.ini
'';
2020-05-03 10:59:18 +01:00
2020-08-25 22:29:31 +01:00
disabledTests = [
"test_check_setup" # Why should it be able to call pip?
] ++ lib.optionals stdenv.isDarwin [
"test_set_external_modification"
];
2021-02-01 02:43:52 +00:00
passthru = {
python = self.python;
updateScript = nix-update-script { attrPath = "octoprint"; };
};
2020-08-25 22:29:31 +01:00
meta = with lib; {
2020-08-25 22:29:31 +01:00
homepage = "https://octoprint.org/";
description = "The snappy web interface for your 3D printer";
license = licenses.agpl3;
maintainers = with maintainers; [ abbradar gebner WhittlesJr ];
};
};
}
)
(import ./plugins.nix { inherit pkgs; })
packageOverrides
]
);
2016-02-14 11:56:07 +00:00
};
2020-08-25 22:29:31 +01:00
in
with py.pkgs; toPythonApplication octoprint