git.iko.soy/typeable/nixpkgs
on master help sign in
Merge pull request #135302 from mweinelt/octoprint
commit53fdb18b411af1c3370c89b5f03615b9ef89dbbd authorMartin Weinelt <mweinelt@users.noreply.github.com> dateTue 24 Aug 2021, 01:32 (5 years ago) parent6c9134a2def3f8
8 files changed+262−59
pkgs/applications/misc/octoprint/default.nix+84−10 pkgs/applications/misc/octoprint/ffmpeg-path.patch+41 pkgs/applications/misc/octoprint/pip-path.patch+12 pkgs/applications/misc/octoprint/plugins.nix+37−32 pkgs/applications/misc/octoprint/printtimegenius-logging.patch−17 pkgs/development/python-modules/immutabledict/default.nix+45 pkgs/development/python-modules/zipstream-new/default.nix+39 pkgs/top-level/python-packages.nix+4
pkgs/applications/misc/octoprint/default.nix+84−10
@@ -2,7 +2,8 @@
22, stdenv
33, lib
44, fetchFromGitHub
5−, python3
5+, python38
6+, substituteAll
67, nix-update-script
78 # To include additional plugins, pass them here as an overlay.
89, packageOverrides ? self: super: {}
@@ -20,18 +21,51 @@ let
2021 );
2122 };
2223
23− py = python3.override {
24+ py = python38.override {
2425 self = py;
2526 packageOverrides = lib.foldr lib.composeExtensions (self: super: {}) (
2627 [
2728 # the following dependencies are non trivial to update since later versions introduce backwards incompatible
2829 # changes that might affect plugins, or due to other observed problems
30+ (mkOverride "click" "7.1.2" "d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a")
2931 (mkOverride "flask-babel" "1.0.0" "0gmb165vkwv5v7dxsxa2i3zhafns0fh938m2zdcrv4d8z5l099yn")
30− (mkOverride "rsa" "4.0" "1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487")
32+ (mkOverride "itsdangerous" "1.1.0" "321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19")
33+ (mkOverride "jinja2" "2.11.3" "a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6")
3134 (mkOverride "markdown" "3.1.1" "2e50876bcdd74517e7b71f3e7a76102050edec255b3983403f1a63e7c8a41e7a")
35+ (mkOverride "markupsafe" "1.1.1" "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b")
36+ (mkOverride "sarge" "0.1.5.post0" "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s")
3237 (mkOverride "tornado" "5.1.1" "4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409")
3338 (mkOverride "unidecode" "0.04.21" "280a6ab88e1f2eb5af79edff450021a0d3f0448952847cd79677e55e58bad051")
34− (mkOverride "sarge" "0.1.5.post0" "1c1ll7pys9vra5cfi8jxlgrgaql6c27l6inpy15aprgqhc4ck36s")
39+
40+ # Requires flask<2, cannot mkOverride because tests need to be disabled
41+ (
42+ self: super: {
43+ flask = super.flask.overridePythonAttrs (oldAttrs: rec {
44+ version = "1.1.2";
45+ src = oldAttrs.src.override {
46+ inherit version;
47+ sha256 = "4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060";
48+ };
49+ doCheck = false;
50+ });
51+ }
52+ )
53+
54+ # Requires werkezug<2, cannot mkOverride because tests need to be disabled
55+ (
56+ self: super: {
57+ werkzeug = super.werkzeug.overridePythonAttrs (oldAttrs: rec {
58+ version = "1.0.1";
59+ src = oldAttrs.src.override {
60+ inherit version;
61+ sha256 = "6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c";
62+ };
63+ doCheck= false;
64+ });
65+ }
66+ )
67+
68+
3569
3670 # Requires websocket-client <1.0, >=0.57. Cannot do mkOverride b/c differing underscore/hyphen in pypi source name
3771 (
@@ -78,13 +112,13 @@ let
78112 self: super: {
79113 octoprint-filecheck = self.buildPythonPackage rec {
80114 pname = "OctoPrint-FileCheck";
81− version = "2020.08.07";
115+ version = "2021.2.23";
82116
83117 src = fetchFromGitHub {
84118 owner = "OctoPrint";
85119 repo = "OctoPrint-FileCheck";
86120 rev = version;
87− sha256 = "05ys05l5x7d2bkg3yqrga6m65v3g5fcnnzbfab7j9w2pzjdapx5b";
121+ sha256 = "sha256-e/QGEBa9+pjOdrZq3Zc6ifbSMClIyeTOi0Tji0YdVmI=";
88122 };
89123 doCheck = false;
90124 };
@@ -96,14 +130,34 @@ let
96130 self: super: {
97131 octoprint-firmwarecheck = self.buildPythonPackage rec {
98132 pname = "OctoPrint-FirmwareCheck";
99− version = "2020.09.23";
133+ version = "2021.8.11";
100134
101135 src = fetchFromGitHub {
102136 owner = "OctoPrint";
103137 repo = "OctoPrint-FirmwareCheck";
104138 rev = version;
105− sha256 = "1l1ajhnsc39prgk59mp93h90dgl9gh660cci00z5b5gj2h6dv1d1";
139+ sha256 = "sha256-WzVjHgjF12iJ642AFaFd86GSU90XyPzKhi1CSreynW4=";
140+ };
141+ doCheck = false;
142+ };
143+ }
144+ )
145+
146+ (
147+ self: super: {
148+ octoprint-pisupport = self.buildPythonPackage rec {
149+ pname = "OctoPrint-PiSupport";
150+ version = "2021.8.2";
151+ format = "setuptools";
152+
153+ src = fetchFromGitHub {
154+ owner = "OctoPrint";
155+ repo = "OctoPrint-PiSupport";
156+ rev = version;
157+ sha256 = "07akx61wadxhs0545pqa9gzjnaz9742bq710f8f4zs5x6sacjzbc";
106158 };
159+
160+ # requires octoprint itself during tests
107161 doCheck = false;
108162 };
109163 }
@@ -113,13 +167,13 @@ let
113167 self: super: {
114168 octoprint = self.buildPythonPackage rec {
115169 pname = "OctoPrint";
116− version = "1.5.3";
170+ version = "1.6.1";
117171
118172 src = fetchFromGitHub {
119173 owner = "OctoPrint";
120174 repo = "OctoPrint";
121175 rev = version;
122− sha256 = "sha256-ZL/P/YIHynPmP8ssZZUKZDJscBsSsCq3UtOHrTVLpec=";
176+ sha256 = "sha256-3b3k9h8H9Spf/P3/pXpCANnSGOgbUw/EWISJbrSoPBM=";
123177 };
124178
125179 propagatedBuildInputs = with super; [
@@ -136,6 +190,7 @@ let
136190 frozendict
137191 future
138192 itsdangerous
193+ immutabledict
139194 jinja2
140195 markdown
141196 markupsafe
@@ -143,7 +198,9 @@ let
143198 netifaces
144199 octoprint-filecheck
145200 octoprint-firmwarecheck
201+ octoprint-pisupport
146202 pkginfo
203+ pip
147204 psutil
148205 pylru
149206 pyserial
@@ -154,6 +211,7 @@ let
154211 sarge
155212 semantic-version
156213 sentry-sdk
214+ setuptools
157215 tornado
158216 unidecode
159217 watchdog
@@ -161,13 +219,29 @@ let
161219 werkzeug
162220 wrapt
163221 zeroconf
222+ zipstream-new
164223 ] ++ lib.optionals stdenv.isDarwin [ py.pkgs.appdirs ];
165224
166225 checkInputs = with super; [ pytestCheckHook mock ddt ];
167226
227+ patches = [
228+ # substitute pip and let it find out, that it can't write anywhere
229+ (substituteAll {
230+ src = ./pip-path.patch;
231+ pip = "${super.pip}/bin/pip";
232+ })
233+
234+ # hardcore path to ffmpeg and hide related settings
235+ (substituteAll {
236+ src = ./ffmpeg-path.patch;
237+ ffmpeg = "${pkgs.ffmpeg}/bin/ffmpeg";
238+ })
239+ ];
240+
168241 postPatch = let
169242 ignoreVersionConstraints = [
170243 "emoji"
244+ "immutabledict"
171245 "sentry-sdk"
172246 "watchdog"
173247 ];
pkgs/applications/misc/octoprint/ffmpeg-path.patchnew file+41
@@ -0,0 +1,41 @@
1+diff --git a/src/octoprint/plugins/corewizard/templates/corewizard_webcam_wizard.jinja2 b/src/octoprint/plugins/corewizard/templates/corewizard_webcam_wizard.jinja2
2+index 79342dcd7..6165a4119 100644
3+--- a/src/octoprint/plugins/corewizard/templates/corewizard_webcam_wizard.jinja2
4++++ b/src/octoprint/plugins/corewizard/templates/corewizard_webcam_wizard.jinja2
5+@@ -29,14 +29,3 @@
6+ {% include "snippets/settings/webcam/webcamStreamUrl.jinja2" %}
7+ {% include "snippets/settings/webcam/webcamSnapshotUrl.jinja2" %}
8+ </form>
9+-
10+-<h4>{{ _('Timelapse Recordings') }}</h4>
11+-
12+-{% trans %}<p>
13+- To render the snapshots into timelapse recordings, OctoPrint also needs to
14+- know the correct <strong>path to FFMPEG</strong>.
15+-</p>{% endtrans %}
16+-
17+-<form class="form-horizontal" data-bind="with: settingsViewModel" onsubmit="return false;">
18+- {% include "snippets/settings/webcam/ffmpegPath.jinja2" %}
19+-</form>
20+diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py
21+index c3e6cea10..ced2f8fa0 100644
22+--- a/src/octoprint/server/api/settings.py
23++++ b/src/octoprint/server/api/settings.py
24+@@ -130,7 +130,7 @@ def getSettings():
25+ "snapshotUrl": s.get(["webcam", "snapshot"]),
26+ "snapshotTimeout": s.getInt(["webcam", "snapshotTimeout"]),
27+ "snapshotSslValidation": s.getBoolean(["webcam", "snapshotSslValidation"]),
28+- "ffmpegPath": s.get(["webcam", "ffmpeg"]),
29++ "ffmpegPath": "@ffmpeg@",
30+ "ffmpegCommandline": s.get(["webcam", "ffmpegCommandline"]),
31+ "bitrate": s.get(["webcam", "bitrate"]),
32+ "ffmpegThreads": s.get(["webcam", "ffmpegThreads"]),
33+@@ -548,8 +548,6 @@ def _saveSettings(data):
34+ ["webcam", "snapshotSslValidation"],
35+ data["webcam"]["snapshotSslValidation"],
36+ )
37+- if "ffmpegPath" in data["webcam"]:
38+- s.set(["webcam", "ffmpeg"], data["webcam"]["ffmpegPath"])
39+ if "ffmpegCommandline" in data["webcam"]:
40+ commandline = data["webcam"]["ffmpegCommandline"]
41+ if not all(
pkgs/applications/misc/octoprint/pip-path.patchnew file+12
@@ -0,0 +1,12 @@
1+diff --git a/src/octoprint/util/pip.py b/src/octoprint/util/pip.py
2+index 53500e5d5..39f76c1e5 100644
3+--- a/src/octoprint/util/pip.py
4++++ b/src/octoprint/util/pip.py
5+@@ -284,6 +284,7 @@ class PipCaller(CommandlineCaller):
6+ @classmethod
7+ def autodetect_pip(cls):
8+ commands = [
9++ ["@pip@"],
10+ [sys.executable, "-m", "pip"],
11+ [
12+ os.path.join(
pkgs/applications/misc/octoprint/plugins.nix+37−32
@@ -52,13 +52,13 @@ in {
5252
5353 bedlevelvisualizer = buildPlugin rec {
5454 pname = "BedLevelVisualizer";
55− version = "0.1.15";
55+ version = "1.1.0";
5656
5757 src = fetchFromGitHub {
5858 owner = "jneilliii";
5959 repo = "OctoPrint-${pname}";
6060 rev = version;
61− sha256 = "1bq39fnarnpk8phxfbpx6l4n9anf358z1cgid5r89nadmn2a0cny";
61+ sha256 = "sha256-SKrhtTGyDuvbDmUCXSx83Y+C83ZzVHA78TwMYwE6tcc=";
6262 };
6363
6464 propagatedBuildInputs = with super; [ numpy ];
@@ -73,13 +73,13 @@ in {
7373
7474 costestimation = buildPlugin rec {
7575 pname = "CostEstimation";
76− version = "3.2.0";
76+ version = "3.3.0";
7777
7878 src = fetchFromGitHub {
7979 owner = "OllisGit";
8080 repo = "OctoPrint-${pname}";
8181 rev = version;
82− sha256 = "1j476jcw7gh8zqqdc5vddwv5wpjns7cd1hhpn7m9fxq3d5bi077w";
82+ sha256 = "sha256-d7miGMCNJD0siaZb6EnoMZCkKot7vnZjxNZX2TunJcs=";
8383 };
8484
8585 meta = with lib; {
@@ -92,13 +92,13 @@ in {
9292
9393 curaenginelegacy = buildPlugin rec {
9494 pname = "CuraEngineLegacy";
95− version = "1.1.1";
95+ version = "1.1.2";
9696
9797 src = fetchFromGitHub {
9898 owner = "OctoPrint";
9999 repo = "OctoPrint-${pname}";
100100 rev = version;
101− sha256 = "1a7pxlmj1a7blkv97sn1k390pbjcxx2860011pbjcdnli74zpvv5";
101+ sha256 = "sha256-54siSmzgPlnCRpkpZhXU9theNQ3hqL3j+Ip4Ie2w2vA=";
102102 };
103103
104104 meta = with lib; {
@@ -130,13 +130,13 @@ in {
130130
131131 displaylayerprogress = buildPlugin rec {
132132 pname = "OctoPrint-DisplayLayerProgress";
133− version = "1.24.0";
133+ version = "1.26.0";
134134
135135 src = fetchFromGitHub {
136136 owner = "OllisGit";
137137 repo = pname;
138138 rev = version;
139− sha256 = "1lbivg3rcjzv8zqvp8n8gcaczxdm7gvd5ihjb6jq0fgf958lv59n";
139+ sha256 = "sha256-hhHc2SPixZCPJzCP8enMMWNYaYbNZAU0lNSx1B0d++4=";
140140 };
141141
142142 meta = with lib; {
@@ -149,13 +149,13 @@ in {
149149
150150 gcodeeditor = buildPlugin rec {
151151 pname = "GcodeEditor";
152− version = "0.2.9";
152+ version = "0.2.12";
153153
154154 src = fetchFromGitHub {
155155 owner = "ieatacid";
156156 repo = "OctoPrint-${pname}";
157157 rev = version;
158− sha256 = "1yjj9lmxbzmzrn7gahw9lj7554fphalbjjp8ns0rr9py3rshwxkm";
158+ sha256 = "sha256-1Sk2ri3DKW8q8VJ/scFjpRsz65Pwt8OEURP1k70aydE=";
159159 };
160160
161161 meta = with lib; {
@@ -168,13 +168,13 @@ in {
168168
169169 marlingcodedocumentation = buildPlugin rec {
170170 pname = "MarlinGcodeDocumentation";
171− version = "0.11.0";
171+ version = "0.13.0";
172172
173173 src = fetchFromGitHub {
174174 owner = "costas-basdekis";
175175 repo = pname;
176176 rev = "v${version}";
177− sha256 = "0vx06w9hqwy0k4r8g67y8gdckfdx7wl8ghfx6hmxc1s8fgkghfkc";
177+ sha256 = "sha256-3ay6iCxZk8QkFM/2Y14VTpPoxr6NXq14BFSHofn3q7I=";
178178 };
179179
180180 meta = with lib; {
@@ -187,13 +187,13 @@ in {
187187
188188 mqtt = buildPlugin rec {
189189 pname = "MQTT";
190− version = "0.8.7";
190+ version = "0.8.10";
191191
192192 src = fetchFromGitHub {
193193 owner = "OctoPrint";
194194 repo = "OctoPrint-MQTT";
195195 rev = version;
196− sha256 = "0k82h7wafbcqdvk5wjw4dp9lydwszfj1lf8vvymwbqdn7pf5h0dy";
196+ sha256 = "sha256-nvEUvN/SdUE1tQkLbxMkZ8xxeUIZiNNirIfWLeH1Kfg=";
197197 };
198198
199199 propagatedBuildInputs = with super; [ paho-mqtt ];
@@ -208,25 +208,26 @@ in {
208208
209209 printtimegenius = buildPlugin rec {
210210 pname = "PrintTimeGenius";
211− version = "2.2.6";
211+ version = "2.2.8";
212212
213213 src = fetchFromGitHub {
214214 owner = "eyal0";
215215 repo = "OctoPrint-${pname}";
216216 rev = version;
217− sha256 = "04zfgd3x3lbriyzwhpqnwdcfdm19fsqgsb7l2ix5d0ssmqxwg2r6";
217+ sha256 = "sha256-Bbpm7y4flzEbUb6Sgkp6hIIHs455A0IsbmzvZwlkbh0=";
218218 };
219219
220+ propagatedBuildInputs = with super; [
221+ psutil
222+ sarge
223+ ];
224+
220225 preConfigure = ''
221226 # PrintTimeGenius ships with marlin-calc binaries for multiple architectures
222227 rm */analyzers/marlin-calc*
223228 sed 's@"{}.{}".format(binary_base_name, machine)@"${pkgs.marlin-calc}/bin/marlin-calc"@' -i */analyzers/analyze_progress.py
224229 '';
225230
226− patches = [
227− ./printtimegenius-logging.patch
228− ];
229−
230231 meta = with lib; {
231232 description = "Better print time estimation for OctoPrint";
232233 homepage = "https://github.com/eyal0/OctoPrint-PrintTimeGenius";
@@ -237,15 +238,19 @@ in {
237238
238239 psucontrol = buildPlugin rec {
239240 pname = "PSUControl";
240− version = "0.1.9";
241+ version = "1.0.6";
241242
242243 src = fetchFromGitHub {
243244 owner = "kantlivelong";
244245 repo = "OctoPrint-${pname}";
245246 rev = version;
246− sha256 = "1cn009bdgn6c9ba9an5wfj8z02wi0xcsmbhkqggiqlnqy1fq45ca";
247+ sha256 = "sha256-S+lPm85+ZEO/3BXYsrxE4FU29EGWzWrSw3y1DLdByrM=";
247248 };
248249
250+ propagatedBuildInputs = with super; [
251+ python-periphery
252+ ];
253+
249254 preConfigure = ''
250255 # optional; RPi.GPIO is broken on vanilla kernels
251256 sed /RPi.GPIO/d -i requirements.txt
@@ -261,13 +266,13 @@ in {
261266
262267 simpleemergencystop = buildPlugin rec {
263268 pname = "SimpleEmergencyStop";
264− version = "1.0.3";
269+ version = "1.0.5";
265270
266271 src = fetchFromGitHub {
267272 owner = "Sebclem";
268273 repo = "OctoPrint-${pname}";
269274 rev = version;
270− sha256 = "0hhh5grmn32abkix1b9fr1d0pcpdi2r066iypcxdxcza9qzwjiyi";
275+ sha256 = "sha256-MbP3cKa9FPElQ/M8ykYh9kVXl8hNvmGiCHDvjgWvm9k=";
271276 };
272277
273278 meta = with lib; {
@@ -299,13 +304,13 @@ in {
299304
300305 telegram = buildPlugin rec {
301306 pname = "Telegram";
302− version = "1.6.4";
307+ version = "1.6.5";
303308
304309 src = fetchFromGitHub {
305310 owner = "fabianonline";
306311 repo = "OctoPrint-${pname}";
307312 rev = version;
308− sha256 = "14d9f9a5m1prcikd7y26qks6c2ls6qq4b97amn24q5a8k5hbgl94";
313+ sha256 = "sha256-SckJCbPNCflgGYLHFiXy0juCtpvo8YS1BQsFpc1f5rg=";
309314 };
310315
311316 propagatedBuildInputs = with super; [ pillow ];
@@ -358,13 +363,13 @@ in {
358363
359364 touchui = buildPlugin rec {
360365 pname = "TouchUI";
361− version = "0.3.16";
366+ version = "0.3.18";
362367
363368 src = fetchFromGitHub {
364369 owner = "BillyBlaze";
365370 repo = "OctoPrint-${pname}";
366371 rev = version;
367− sha256 = "1jlqjirc4ygl4k7jp93l2h6b18jap3mzz8sf2g61j9w0kgv9l365";
372+ sha256 = "sha256-PNDCjY7FhfnwK7Nd86el9ZQ00G4uMANH2Sk080iMYXw=";
368373 };
369374
370375 meta = with lib; {
@@ -377,13 +382,13 @@ in {
377382
378383 octoklipper = buildPlugin rec {
379384 pname = "OctoKlipper";
380− version = "0.3.2";
385+ version = "0.3.8.3";
381386
382387 src = fetchFromGitHub {
383388 owner = "AliceGrey";
384389 repo = "OctoprintKlipperPlugin";
385390 rev = version;
386− sha256 = "15yg2blbgqp2gdpsqqm8qiiznq5qaq8wss07jimkl0865vrvlz7l";
391+ sha256 = "sha256-6r5jJDSR0DxlDQ/XWmQgYUgeL1otNNBnwurX7bbcThg=";
387392 };
388393
389394 meta = with lib; {
@@ -396,13 +401,13 @@ in {
396401
397402 octoprint-dashboard = buildPlugin rec {
398403 pname = "OctoPrint-Dashboard";
399− version = "1.15.2";
404+ version = "1.18.3";
400405
401406 src = fetchFromGitHub {
402407 owner = "StefanCohen";
403408 repo = pname;
404409 rev = version;
405− sha256 = "0p94jwd7kagh3sixhcrqmsgbay4aaf9l1pgyi2b45jym8pvld5n4";
410+ sha256 = "sha256-hLHT3Uze/6PlOCEICVZ2ieFTyXgcqCvgHOlIIEquujg=";
406411 };
407412
408413 meta = with lib; {
pkgs/applications/misc/octoprint/printtimegenius-logging.patchdeleted−17
@@ -1,17 +0,0 @@
1−diff --git a/setup.py b/setup.py
2−index 6a6610e..cc45902 100644
3−--- a/setup.py
4−+++ b/setup.py
5−@@ -35,9 +35,9 @@ plugin_license = "AGPLv3"
6− # Any additional requirements besides OctoPrint should be listed here
7− # For now, require the working release, which is only 1.3.9rc1.
8− plugin_requires = ["OctoPrint>=1.3.9rc1", "psutil", "sarge"]
9−-from sys import version_info
10−-if version_info[0] < 3:
11−- plugin_requires.append("logging")
12−+#from sys import version_info
13−+#if version_info[0] < 3:
14−+# plugin_requires.append("logging")
15−
16− ### --------------------------------------------------------------------------------------------------------------------
17− ### More advanced options that you usually shouldn't have to touch follow after this point
pkgs/development/python-modules/immutabledict/default.nixnew file+45
@@ -0,0 +1,45 @@
1+{ lib
2+, buildPythonPackage
3+, fetchFromGitHub
4+, poetry-core
5+, pytestCheckHook
6+}:
7+
8+buildPythonPackage rec {
9+ pname = "immutabledict";
10+ version = "2.1.0";
11+ format = "pyproject";
12+
13+ src = fetchFromGitHub {
14+ owner = "corenting";
15+ repo = "immutabledict";
16+ rev = "v${version}";
17+ sha256 = "1n71154nfb6vr41iv00xcwkxmwnn1vwzbr3s23bjvlhvmnjb48a8";
18+ };
19+
20+ # https://github.com/corenting/immutabledict/issues/56
21+ postPatch = ''
22+ substituteInPlace pyproject.toml \
23+ --replace "poetry.masonry.api" "poetry.core.masonry.api"
24+ '';
25+
26+ nativeBuildInputs = [
27+ poetry-core
28+ ];
29+
30+ pythonImportsCheck = [
31+ "immutabledict"
32+ ];
33+
34+ checkInputs = [
35+ pytestCheckHook
36+ ];
37+
38+ meta = with lib; {
39+ description = "A fork of frozendict, an immutable wrapper around dictionaries";
40+ homepage = "https://github.com/corenting/immutabledict";
41+ license = licenses.mit;
42+ maintainers = with maintainers; [ hexa ];
43+ };
44+}
45+
pkgs/development/python-modules/zipstream-new/default.nixnew file+39
@@ -0,0 +1,39 @@
1+{ lib
2+, buildPythonPackage
3+, fetchFromGitHub
4+, nose
5+}:
6+
7+buildPythonPackage rec {
8+ pname = "zipstream-new";
9+ version = "1.1.8";
10+ format = "setuptools";
11+
12+ src = fetchFromGitHub {
13+ owner = "arjan-s";
14+ repo = "python-zipstream";
15+ rev = "v${version}";
16+ sha256 = "14vhgg8mcjqi8cpzrw8qzbij2fr2a63l2a8fhil21k2r8vzv92cv";
17+ };
18+
19+ pythonImportsCheck = [
20+ "zipstream"
21+ ];
22+
23+ checkInputs = [
24+ nose
25+ ];
26+
27+ checkPhase = ''
28+ runHook preCheck
29+ nosetests
30+ runHook postCheck
31+ '';
32+
33+ meta = with lib; {
34+ description = "Like Python's ZipFile module, except it works as a generator that provides the file in many small chunks";
35+ homepage = "https://github.com/arjan-s/python-zipstream";
36+ license = licenses.gpl3;
37+ maintainers = with maintainers; [ hexa ];
38+ };
39+}
pkgs/top-level/python-packages.nix+4
@@ -3551,6 +3551,8 @@ in {
35513551
35523552 iminuit = callPackage ../development/python-modules/iminuit { };
35533553
3554+ immutabledict = callPackage ../development/python-modules/immutabledict { };
3555+
35543556 immutables = callPackage ../development/python-modules/immutables { };
35553557
35563558 impacket = callPackage ../development/python-modules/impacket { };
@@ -9668,6 +9670,8 @@ in {
96689670
96699671 zipstream = callPackage ../development/python-modules/zipstream { };
96709672
9673+ zipstream-new = callPackage ../development/python-modules/zipstream-new { };
9674+
96719675 zm-py = callPackage ../development/python-modules/zm-py { };
96729676
96739677 zodb = callPackage ../development/python-modules/zodb { };