Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2022-05-28 06:01:53 +00:00 committed by GitHub
commit 1eecc9b394
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 299 additions and 219 deletions

View file

@ -28,14 +28,14 @@
with python3Packages;
buildPythonApplication rec {
pname = "kitty";
version = "0.24.4";
version = "0.25.0";
format = "other";
src = fetchFromGitHub {
owner = "kovidgoyal";
repo = "kitty";
rev = "v${version}";
sha256 = "sha256-c6XM/xeGZ68srf8xQJA1iYCUR3kXNceTMxsZAnbFmug=";
sha256 = "sha256-RYQVcbyKIv/FlrtROoQywWR+iF+4KYiYrrzErUrOCWM=";
};
buildInputs = [
@ -78,21 +78,26 @@ buildPythonApplication rec {
outputs = [ "out" "terminfo" "shell_integration" ];
patches = [
# Required to get `test_ssh_env_vars` to pass.
(fetchpatch {
name = "fix-zsh-completion-test-1.patch";
url = "https://github.com/kovidgoyal/kitty/commit/297592242c290a81ca4ba08802841f4c33a4de25.patch";
sha256 = "sha256-/V6y/4AaJsZvx1KS5UFZ+0zyAoZuLgbgFORZ1dX/1qE=";
})
(fetchpatch {
name = "fix-zsh-completion-test-2.patch";
url = "https://github.com/kovidgoyal/kitty/commit/d8ed42ae8e014d9abf9550a65ae203468f8bfa43.patch";
sha256 = "sha256-Azgzqf5atW999FVn9rSGKMyZLsI692dYXhJPx07GBO0=";
})
(fetchpatch {
name = "fix-build-with-non-framework-python-on-darwin.patch";
url = "https://github.com/kovidgoyal/kitty/commit/57cffc71b78244e6a9d49f4c9af24d1a88dbf537.patch";
sha256 = "sha256-1IGONSVCVo5SmLKw90eqxaI5Mwc764O1ur+aMsc7h94=";
name = "increase-pty-lines.patch";
url = "https://github.com/kovidgoyal/kitty/commit/eb84990f5a8edc458e04d24cc1cda05316d74ceb.patch";
sha256 = "sha256-eOANfhGPMoN4FqxtIGDBu5X0O3RPLABDnL+LKqSLROI=";
})
# Fix to ensure that files in tar files used by SSH kitten have write permissions.
./tarball-restore-write-permissions.patch
# Needed on darwin
# Gets `test_ssh_shell_integration` to pass for `zsh` when `compinit` complains about
# permissions.
./zsh-compinit.patch
# Skip `test_ssh_login_shell_detection` in some cases, build users have their shell set to
# `/sbin/nologin` which causes issues.
./disable-test_ssh_login_shell_detection.patch
# Skip `test_ssh_bootstrap_with_different_launchers` when launcher is `zsh` since it causes:
# OSError: master_fd is in error condition
./disable-test_ssh_bootstrap_with_different_launchers.patch
];
# Causes build failure due to warning
@ -141,6 +146,9 @@ buildPythonApplication rec {
# Fontconfig error: Cannot load default config file: No such file: (null)
export FONTCONFIG_FILE=${fontconfig.out}/etc/fonts/fonts.conf
# Required for `test_ssh_shell_integration` to pass.
export TERM=kitty
env PATH="${buildBinPath}:$PATH" ${python.interpreter} test.py
'';
@ -180,6 +188,18 @@ buildPythonApplication rec {
runHook postInstall
'';
# Patch shebangs that Nix can't automatically patch
preFixup =
let
pathComponent = if stdenv.isDarwin then "Applications/kitty.app/Contents/Resources" else "lib";
in
''
substituteInPlace $out/${pathComponent}/kitty/shell-integration/ssh/askpass.py \
--replace '/usr/bin/env -S ' $out/bin/
substituteInPlace $shell_integration/ssh/askpass.py \
--replace '/usr/bin/env -S ' $out/bin/
'';
passthru.tests.test = nixosTests.terminal-emulators.kitty;
meta = with lib; {

View file

@ -0,0 +1,13 @@
diff --git a/kitty_tests/ssh.py b/kitty_tests/ssh.py
index 1f424146..d3cc191b 100644
--- a/kitty_tests/ssh.py
+++ b/kitty_tests/ssh.py
@@ -166,7 +166,7 @@ def test_ssh_bootstrap_with_different_launchers(self):
for sh in self.all_possible_sh:
if sh == 'sh' or 'python' in sh:
q = shutil.which(launcher)
- if q:
+ if q and not 'zsh' in q:
with self.subTest(sh=sh, launcher=q), tempfile.TemporaryDirectory() as tdir:
self.check_bootstrap(sh, tdir, test_script='env; exit 0', SHELL_INTEGRATION_VALUE='', launcher=q)

View file

@ -0,0 +1,13 @@
diff --git a/kitty_tests/ssh.py b/kitty_tests/ssh.py
index 1f424146..57620334 100644
--- a/kitty_tests/ssh.py
+++ b/kitty_tests/ssh.py
@@ -197,7 +197,7 @@ def test_ssh_login_shell_detection(self):
expected_login_shell = pwd.getpwuid(os.geteuid()).pw_shell
for m in methods:
for sh in self.all_possible_sh:
- if 'python' in sh:
+ if 'python' in sh or '/sbin/nologin' in expected_login_shell:
continue
with self.subTest(sh=sh, method=m), tempfile.TemporaryDirectory() as tdir:
pty = self.check_bootstrap(sh, tdir, test_script=f'{m}; echo "$login_shell"; exit 0', SHELL_INTEGRATION_VALUE='')

View file

@ -0,0 +1,27 @@
From 59f6876187da2c01b35e696e169ca98239c08a41 Mon Sep 17 00:00:00 2001
From: Jason Felice <jason.m.felice@gmail.com>
Date: Tue, 24 May 2022 07:54:25 -0400
Subject: [PATCH] Restore write permissions in tarball
In Nix, the source files are stored in an immutable store and
therefore have been stripped of write permissions. When the SSH
kitten makes the tarfile, the files contained in it are also missing
the write permissions, causing commands on the remote side to fail.
---
kittens/ssh/main.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/kittens/ssh/main.py b/kittens/ssh/main.py
index 0b50d5ff..f80ac13d 100644
--- a/kittens/ssh/main.py
+++ b/kittens/ssh/main.py
@@ -123,6 +123,7 @@ def make_tarfile(ssh_opts: SSHOptions, base_env: Dict[str, str], compression: st
def normalize_tarinfo(tarinfo: tarfile.TarInfo) -> tarfile.TarInfo:
tarinfo.uname = tarinfo.gname = ''
tarinfo.uid = tarinfo.gid = 0
+ tarinfo.mode |= 0o200
return tarinfo
def add_data_as_file(tf: tarfile.TarFile, arcname: str, data: Union[str, bytes]) -> tarfile.TarInfo:
--
2.36.0

View file

@ -0,0 +1,13 @@
diff --git a/kitty_tests/ssh.py b/kitty_tests/ssh.py
index 1f424146..d9a65d25 100644
--- a/kitty_tests/ssh.py
+++ b/kitty_tests/ssh.py
@@ -268,6 +268,8 @@ def check_untar_or_fail():
return 'UNTAR_DONE' in q
pty.wait_till(check_untar_or_fail)
self.assertTrue(os.path.exists(os.path.join(home_dir, '.terminfo/kitty.terminfo')))
+ if login_shell == 'zsh':
+ pty.send_cmd_to_child('y')
if SHELL_INTEGRATION_VALUE != 'enabled':
pty.wait_till(lambda: len(pty.screen_contents().splitlines()) > 1)
self.assertEqual(pty.screen.cursor.shape, 0)

View file

@ -25,11 +25,11 @@
stdenv.mkDerivation rec {
pname = "gnome-calculator";
version = "42.0";
version = "42.1";
src = fetchurl {
url = "mirror://gnome/sources/gnome-calculator/${lib.versions.major version}/${pname}-${version}.tar.xz";
sha256 = "pTWhTr6ljmkaS1oIUlau0GCiw/BzhKw6PQGDIzKifko=";
sha256 = "700k5Cpl3IYOYgbztHC30jPCripNSWXYhZqp6oo5Ws0=";
};
nativeBuildInputs = [

View file

@ -2,13 +2,9 @@
, stdenv
, nix-update-script
, appstream
, appstream-glib
, dbus
, desktop-file-utils
, fetchFromGitHub
, fetchpatch
, flatpak
, gettext
, glib
, granite
, gtk3
@ -29,31 +25,17 @@
stdenv.mkDerivation rec {
pname = "appcenter";
version = "3.9.1";
version = "3.10.0";
src = fetchFromGitHub {
owner = "elementary";
repo = pname;
rev = version;
sha256 = "sha256-xktIHQHmz5gh72NEz9UQ9fMvBlj1BihWxHgxsHmTIB0=";
sha256 = "sha256-Y3ueicw6Hn6lw24hdPeJohGol6l7UlQFIefYsBVY6Hg=";
};
patches = [
# Fix AppStream.PoolFlags being renamed
# Though the API break has been fixed in latest appstream,
# let's use the non-deprecated version anyway.
# https://github.com/elementary/appcenter/pull/1794
(fetchpatch {
url = "https://github.com/elementary/appcenter/commit/84bc6400713484aa9365f0ba73f59c495da3f08b.patch";
sha256 = "sha256-HNRCJ/5mRbEVjCq9nrXtdQOOk1Jj5jalApkghD8ecpk=";
})
];
nativeBuildInputs = [
appstream-glib
dbus # for pkg-config
desktop-file-utils
gettext
meson
ninja
pkg-config

View file

@ -12,7 +12,6 @@
, libXfixes
, libXi
, pango
, gettext
, pkg-config
, libxml2
, bamf
@ -28,19 +27,18 @@
stdenv.mkDerivation rec {
pname = "elementary-dock";
version = "unstable-2021-12-08";
version = "unstable-2021-05-07";
outputs = [ "out" "dev" ];
src = fetchFromGitHub {
owner = "elementary";
repo = "dock";
rev = "5e4b5ba2eec3b522e107ad834a59c0f1271d4699";
sha256 = "sha256-/Ul21t9VFxhmlQbfx4eY86UKU33hiRfXF9OPHBzPe5o=";
rev = "113c3b0bc7744501d2101dd7afc1ef21ba66b326";
sha256 = "sha256-YlvdB02/hUGaDyHIHy21bgloHyVy3vHcanyNKnp3YbM=";
};
nativeBuildInputs = [
gettext
meson
ninja
libxml2 # xmllint

View file

@ -1,66 +1,50 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, nix-update-script
, substituteAll
, pkg-config
, meson
, ninja
, vala
, pkg-config
, python3
, gtk3
, glib
, granite
, libgee
, elementary-settings-daemon
, gettext
, libhandy
, wrapGAppsHook
, vala
, wrapGAppsHook4
, appcenter
, elementary-settings-daemon
, glib
, granite7
, gtk4
, libadwaita
, libgee
}:
stdenv.mkDerivation rec {
pname = "elementary-onboarding";
version = "6.1.0";
version = "7.0.0";
src = fetchFromGitHub {
owner = "elementary";
repo = "onboarding";
rev = version;
sha256 = "sha256-9voy9eje3VlV4IMM664EyjKWTfSVogX5JoRCqhsUXTE=";
sha256 = "sha256-bxOy9VivpgL4xXJhDF7K/gpq9zcCFIJFfRpG7QC8svE=";
};
patches = [
(substituteAll {
src = ./fix-paths.patch;
appcenter = appcenter;
})
# Provides the directory where the locales are actually installed
# https://github.com/elementary/onboarding/pull/147
(fetchpatch {
url = "https://github.com/elementary/onboarding/commit/af19c3dbefd1c0e0ec18eddacc1f21cb991f5513.patch";
sha256 = "sha256-fSFfjSd33W7rXXEUHY8b3rv9B9c31XfCjxjRxBBrqjs=";
})
];
nativeBuildInputs = [
gettext
meson
ninja
pkg-config
python3
vala
wrapGAppsHook
wrapGAppsHook4
];
buildInputs = [
appcenter # settings schema
elementary-settings-daemon # settings schema
glib
granite
gtk3
granite7
gtk4
libadwaita
libgee
libhandy
];
postPatch = ''

View file

@ -1,13 +0,0 @@
diff --git a/src/Views/AppCenterView.vala b/src/Views/AppCenterView.vala
index 16cd18b..5895897 100644
--- a/src/Views/AppCenterView.vala
+++ b/src/Views/AppCenterView.vala
@@ -55,7 +55,7 @@ public class Onboarding.AppCenterView : AbstractOnboardingView {
appcenter_button.clicked.connect (() => {
try {
var appcenter = AppInfo.create_from_commandline (
- "io.elementary.appcenter",
+ "@appcenter@/bin/io.elementary.appcenter",
"AppCenter",
AppInfoCreateFlags.SUPPORTS_STARTUP_NOTIFICATION
);

View file

@ -1,14 +1,10 @@
{ lib, stdenv, fetchurl, fetchgit, gmp }:
{ lib, stdenv, fetchurl, gmp }:
stdenv.mkDerivation rec {
pname = "cln";
version = "1.3.6";
src = if stdenv.isDarwin then fetchgit {
url = "git://www.ginac.de/cln.git";
rev = "cln_${builtins.replaceStrings [ "." ] [ "-" ] version}";
sha256 = "sha256-P32F4TIDhE2Dwzydq8iFK6ch3kICJcXeeXHs5PBQG88=";
} else fetchurl {
src = fetchurl {
url = "${meta.homepage}${pname}-${version}.tar.bz2";
sha256 = "0jlq9l4hphk7qqlgqj9ihjp4m3rwjbhk6q4v00lsbgbri07574pl";
};

View file

@ -1,24 +1,7 @@
{ lib, stdenv, fetchurl, zlib }:
stdenv.mkDerivation rec {
pname = "libdwarf";
{ callPackage, zlib }:
callPackage ./common.nix rec {
version = "0.4.0";
src = fetchurl {
url = "https://www.prevanders.net/libdwarf-${version}.tar.xz";
sha512 = "30e5c6c1fc95aa28a014007a45199160e1d9ba870b196d6f98e6dd21a349e9bb31bba1bd6817f8ef9a89303bed0562182a7d46fcbb36aedded76c2f1e0052e1e";
};
configureFlags = [ "--enable-shared" "--disable-nonshared" ];
url = "https://www.prevanders.net/libdwarf-${version}.tar.xz";
sha512 = "30e5c6c1fc95aa28a014007a45199160e1d9ba870b196d6f98e6dd21a349e9bb31bba1bd6817f8ef9a89303bed0562182a7d46fcbb36aedded76c2f1e0052e1e";
buildInputs = [ zlib ];
outputs = [ "bin" "lib" "dev" "out" ];
meta = {
homepage = "https://github.com/davea42/libdwarf-code";
platforms = lib.platforms.unix;
license = lib.licenses.lgpl21Plus;
maintainers = [ lib.maintainers.atry ];
};
}

View file

@ -0,0 +1,23 @@
{ lib, stdenv, fetchurl, buildInputs, sha512, version, libelf, url }:
stdenv.mkDerivation rec {
pname = "libdwarf";
inherit version;
src = fetchurl {
inherit url sha512;
};
configureFlags = [ "--enable-shared" "--disable-nonshared" ];
inherit buildInputs;
outputs = [ "bin" "lib" "dev" "out" ];
meta = {
homepage = "https://github.com/davea42/libdwarf-code";
platforms = lib.platforms.unix;
license = lib.licenses.lgpl21Plus;
maintainers = [ lib.maintainers.atry ];
};
}

View file

@ -1,56 +1,7 @@
{ lib, stdenv, fetchurl, libelf, zlib }:
let
version = "20181024";
src = fetchurl {
url = "https://www.prevanders.net/libdwarf-${version}.tar.gz";
# Upstream displays this hash broken into three parts:
sha512 = "02f8024bb9959c91a1fe322459f7587a589d096595"
+ "6d643921a173e6f9e0a184db7aef66f0fd2548d669"
+ "5be7f9ee368f1cc8940cea4ddda01ff99d28bbf1fe58";
};
meta = {
homepage = "https://www.prevanders.net/dwarf.html";
platforms = lib.platforms.linux;
license = lib.licenses.lgpl21Plus;
};
in rec {
libdwarf = stdenv.mkDerivation {
pname = "libdwarf";
inherit version;
configureFlags = [ "--enable-shared" "--disable-nonshared" ];
preConfigure = ''
cd libdwarf
'';
buildInputs = [ libelf zlib ];
installPhase = ''
mkdir -p $out/lib $out/include
cp libdwarf.so.1 $out/lib
ln -s libdwarf.so.1 $out/lib/libdwarf.so
cp libdwarf.h dwarf.h $out/include
'';
inherit meta src;
};
dwarfdump = stdenv.mkDerivation {
pname = "dwarfdump";
inherit version;
preConfigure = ''
cd dwarfdump
'';
buildInputs = [ libelf libdwarf ];
installPhase = ''
install -m755 -D dwarfdump $out/bin/dwarfdump
'';
inherit meta src;
};
{ callPackage, zlib, libelf }:
callPackage ./common.nix rec {
version = "20210528";
url = "https://www.prevanders.net/libdwarf-${version}.tar.gz";
sha512 = "e0f9c88554053ee6c1b1333960891189e7820c4a4ddc302b7e63754a4cdcfc2acb1b4b6083a722d1204a75e994fff3401ecc251b8c3b24090f8cb4046d90f870";
buildInputs = [ zlib libelf ];
}

View file

@ -10,12 +10,12 @@
buildPythonPackage rec {
pname = "ckcc-protocol";
version = "1.3.1";
version = "1.3.2";
disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-5wsVg7GX/9UygzpGI6DwrkAvexgcOmJyuv8GXiPPWvk=";
sha256 = "sha256-4y5pe0CFD3C1+N0kP/2j9Wser2zkn8Uf4203ci45Rq0=";
};
propagatedBuildInputs = [ click ecdsa hidapi pyaes ];

View file

@ -0,0 +1,47 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, django
, freezegun
, pythonOlder
, qrcode
}:
buildPythonPackage rec {
pname = "django-otp";
version = "1.1.3";
disabled = pythonOlder "3";
src = fetchFromGitHub {
owner = "django-otp";
repo = "django-otp";
rev = "v${version}";
sha256 = "sha256-Ac9p7q9yaUr3WTTGxCY16Yo/Z8i1RtnD2g0Aj2pqSXY=";
};
postPatch = ''
patchShebangs manage.py
'';
propagatedBuildInputs = [
django
qrcode
];
checkInputs = [
freezegun
];
checkPhase = ''
./manage.py test django_otp
'';
pythonImportsCheck = [ "django_otp" ];
meta = with lib; {
homepage = "https://github.com/jazzband/django-model-utils";
description = "Pluggable framework for adding two-factor authentication to Django using one-time passwords";
license = licenses.bsd2;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}

View file

@ -0,0 +1,41 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, django-guardian
, djangorestframework
}:
buildPythonPackage rec {
pname = "djangorestframework-guardian";
version = "0.3.0";
src = fetchFromGitHub {
owner = "rpkilby";
repo = "django-rest-framework-guardian";
rev = version;
sha256 = "sha256-jl/VEl1pUHU8J1d5ZQSGJweNJayIGw1iVAmwID85fqw=";
};
postPatch = ''
chmod +x manage.py
patchShebangs manage.py
'';
propagatedBuildInputs = [
django-guardian
djangorestframework
];
checkPhase = ''
./manage.py test
'';
pythonImportsCheck = [ "rest_framework_guardian" ];
meta = with lib; {
description = "Django-guardian support for Django REST Framework";
homepage = "https://github.com/rpkilby/django-rest-framework-guardian";
license = licenses.bsd3;
maintainers = with maintainers; [ SuperSandro2000 ];
};
}

View file

@ -1,51 +1,49 @@
{ lib, stdenv, fetchFromGitHub, callPackage, makeWrapper, clang, llvm, libbfd
, libopcodes, libunwind, libblocksruntime }:
let
honggfuzz = stdenv.mkDerivation rec {
pname = "honggfuzz";
version = "2.5";
stdenv.mkDerivation rec {
pname = "honggfuzz";
version = "2.5";
src = fetchFromGitHub {
owner = "google";
repo = pname;
rev = version;
sha256 = "sha256-TkyUKmiiSAfCnfQhSOUxuce6+dRyMmHy7vFK59jPIxM=";
};
postPatch = ''
substituteInPlace hfuzz_cc/hfuzz-cc.c \
--replace '"clang' '"${clang}/bin/clang'
'';
enableParallelBuilding = true;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ llvm ];
propagatedBuildInputs = [ libbfd libopcodes libunwind libblocksruntime ];
makeFlags = [ "PREFIX=$(out)" ];
meta = {
description =
"A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer";
longDescription = ''
Honggfuzz is a security oriented, feedback-driven, evolutionary,
easy-to-use fuzzer with interesting analysis options. It is
multi-process and multi-threaded, blazingly fast when the persistent
fuzzing mode is used and has a solid track record of uncovered security
bugs.
Honggfuzz uses low-level interfaces to monitor processes and it will
discover and report hijacked/ignored signals from crashes. Feed it
a simple corpus directory (can even be empty for the feedback-driven
fuzzing), and it will work its way up, expanding it by utilizing
feedback-based coverage metrics.
'';
homepage = "https://honggfuzz.dev/";
license = lib.licenses.asl20;
platforms = [ "x86_64-linux" ];
maintainers = with lib.maintainers; [ cpu chivay ];
};
src = fetchFromGitHub {
owner = "google";
repo = pname;
rev = version;
sha256 = "sha256-TkyUKmiiSAfCnfQhSOUxuce6+dRyMmHy7vFK59jPIxM=";
};
in honggfuzz
postPatch = ''
substituteInPlace hfuzz_cc/hfuzz-cc.c \
--replace '"clang' '"${clang}/bin/clang'
'';
enableParallelBuilding = true;
nativeBuildInputs = [ makeWrapper ];
buildInputs = [ llvm ];
propagatedBuildInputs = [ libbfd libopcodes libunwind libblocksruntime ];
makeFlags = [ "PREFIX=$(out)" ];
meta = {
description =
"A security oriented, feedback-driven, evolutionary, easy-to-use fuzzer";
longDescription = ''
Honggfuzz is a security oriented, feedback-driven, evolutionary,
easy-to-use fuzzer with interesting analysis options. It is
multi-process and multi-threaded, blazingly fast when the persistent
fuzzing mode is used and has a solid track record of uncovered security
bugs.
Honggfuzz uses low-level interfaces to monitor processes and it will
discover and report hijacked/ignored signals from crashes. Feed it
a simple corpus directory (can even be empty for the feedback-driven
fuzzing), and it will work its way up, expanding it by utilizing
feedback-based coverage metrics.
'';
homepage = "https://honggfuzz.dev/";
license = lib.licenses.asl20;
platforms = [ "x86_64-linux" ];
maintainers = with lib.maintainers; [ cpu chivay ];
};
}

View file

@ -18447,8 +18447,8 @@ with pkgs;
libdvdread = callPackage ../development/libraries/libdvdread { };
libdvdread_4_9_9 = callPackage ../development/libraries/libdvdread/4.9.9.nix { };
inherit (callPackage ../development/libraries/libdwarf { })
libdwarf dwarfdump;
libdwarf = callPackage ../development/libraries/libdwarf { };
dwarfdump = libdwarf.bin;
libdwarf_0_4 = callPackage ../development/libraries/libdwarf/0.4.nix { };
libe57format = callPackage ../development/libraries/libe57format { };

View file

@ -2360,6 +2360,8 @@ in {
django-oauth-toolkit = callPackage ../development/python-modules/django-oauth-toolkit { };
django-otp = callPackage ../development/python-modules/django-otp { };
django-paintstore = callPackage ../development/python-modules/django-paintstore { };
django-pglocks = callPackage ../development/python-modules/django-pglocks { };
@ -2394,6 +2396,8 @@ in {
djangorestframework-camel-case = callPackage ../development/python-modules/djangorestframework-camel-case { };
djangorestframework-guardian = callPackage ../development/python-modules/djangorestframework-guardian { };
djangorestframework-recursive = callPackage ../development/python-modules/djangorestframework-recursive { };
djangorestframework-simplejwt = callPackage ../development/python-modules/djangorestframework-simplejwt { };