From 8279c1629111c045e1b9a8394d449e2f684dd618 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 21:14:52 +0200
Subject: [PATCH 01/15] python3Packages.django-js-asset: init at 1.2.2

---
 .../django-js-asset/default.nix               | 40 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 42 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-js-asset/default.nix

diff --git a/pkgs/development/python-modules/django-js-asset/default.nix b/pkgs/development/python-modules/django-js-asset/default.nix
new file mode 100644
index 000000000000..8e189bf8a0b1
--- /dev/null
+++ b/pkgs/development/python-modules/django-js-asset/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, django
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "django-js-asset";
+  version = "1.2.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "matthiask";
+    repo = pname;
+    rev = version;
+    sha256 = "0viygwdz9i0ra6bz3z4w7h94qc7q134aq7bd4x2qwwhm84qmrip4";
+  };
+
+  propagatedBuildInputs = [
+    django
+  ];
+
+  pythonImportsCheck = [
+    "js_asset"
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    ${python.interpreter} tests/manage.py test testapp
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Script tag with additional attributes for django.forms.Media";
+    homepage = "https://github.com/matthiask/django-js-asset";
+    maintainers = with maintainers; [ hexa ];
+    license = with licenses; [ bsd3 ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index f61a92249c0c..f703da77b5cf 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2139,6 +2139,8 @@ in {
 
   django-jinja = callPackage ../development/python-modules/django-jinja2 { };
 
+  django-js-asset = callPackage ../development/python-modules/django-js-asset { };
+
   django-logentry-admin = callPackage ../development/python-modules/django-logentry-admin { };
 
   django-mailman3 = callPackage ../development/python-modules/django-mailman3 { };

From 47b520fc0a3064fa715a7ee950435b2dd969d739 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 21:18:51 +0200
Subject: [PATCH 02/15] python3Packages.django-mptt: init at 0.13.4

---
 .../python-modules/django-mptt/default.nix    | 42 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 44 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-mptt/default.nix

diff --git a/pkgs/development/python-modules/django-mptt/default.nix b/pkgs/development/python-modules/django-mptt/default.nix
new file mode 100644
index 000000000000..53dac2a781f4
--- /dev/null
+++ b/pkgs/development/python-modules/django-mptt/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, django
+, django-js-asset
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "django-mptt";
+  version = "0.13.4";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "12y3chxhqxk2yxin055f0f45nabj0s8hil12hw0lwzlbax6k9ss6";
+  };
+
+  propagatedBuildInputs = [
+    django
+    django-js-asset
+  ];
+
+  pythonImportsCheck = [
+    "mptt"
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    ${python.interpreter} tests/manage.py test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Utilities for implementing a modified pre-order traversal tree in Django";
+    homepage = "https://github.com/django-mptt/django-mptt";
+    maintainers = with maintainers; [ hexa ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index f703da77b5cf..5173758719d3 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2151,6 +2151,8 @@ in {
 
   django-maintenance-mode = callPackage ../development/python-modules/django-maintenance-mode { };
 
+  django-mptt = callPackage ../development/python-modules/django-mptt { };
+
   django_nose = callPackage ../development/python-modules/django_nose { };
 
   django-oauth-toolkit = callPackage ../development/python-modules/django-oauth-toolkit { };

From 8c7c19fdf3b455285457c0043366f9d0e16926f0 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 21:23:44 +0200
Subject: [PATCH 03/15] python3Packages.django-filter: 2.4.0 -> 21.1

---
 .../python-modules/django-filter/default.nix     | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/pkgs/development/python-modules/django-filter/default.nix b/pkgs/development/python-modules/django-filter/default.nix
index 00c260946cce..04867adab450 100644
--- a/pkgs/development/python-modules/django-filter/default.nix
+++ b/pkgs/development/python-modules/django-filter/default.nix
@@ -7,18 +7,28 @@
 
 buildPythonPackage rec {
   pname = "django-filter";
-  version = "2.4.0";
+  version = "21.1";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06";
+    sha256 = "sha256-YyolH6jxqttLjM7/kyu1L+L4Jt19/n8+rEDlxGPWg24=";
   };
 
   propagatedBuildInputs = [ django ];
 
+  pythonImportsCheck = [
+    "django_filters"
+  ];
+
   # Tests fail (needs the 'crispy_forms' module not packaged on nixos)
   doCheck = false;
-  checkInputs = [ djangorestframework django mock ];
+
+  checkInputs = [
+    djangorestframework
+    django
+    mock
+  ];
+
   checkPhase = ''
     runHook preCheck
     ${python.interpreter} runtests.py tests

From 2a258f0692183b69c45302213f3dbb761f4fa0e4 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 21:50:07 +0200
Subject: [PATCH 04/15] python3Packages.graphene-django: init at 3.0.0b7

---
 .../graphene-django/default.nix               | 65 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 67 insertions(+)
 create mode 100644 pkgs/development/python-modules/graphene-django/default.nix

diff --git a/pkgs/development/python-modules/graphene-django/default.nix b/pkgs/development/python-modules/graphene-django/default.nix
new file mode 100644
index 000000000000..8c0e31f809da
--- /dev/null
+++ b/pkgs/development/python-modules/graphene-django/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+
+, graphene
+, graphql-core
+, django
+, djangorestframework
+, promise
+, text-unidecode
+
+, django-filter
+, mock
+, pytest-django
+, pytest-random-order
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "graphene-django";
+  version = "3.0.0b7";
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "graphql-python";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uPc9HNcciQpCcHLYespK8ICny5jOQaliFMyd2Yt6/as=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"pytest-runner"' ""
+  '';
+
+  propagatedBuildInputs = [
+    djangorestframework
+    graphene
+    graphql-core
+    django
+    promise
+    text-unidecode
+  ];
+
+  preCheck = ''
+    export DJANGO_SETTINGS_MODULE=examples.django_test_settings
+  '';
+
+  checkInputs = [
+    django-filter
+    mock
+    pytest-django
+    pytest-random-order
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "Integrate GraphQL into your Django project";
+    homepage = "https://github.com/graphql-python/graphene-django";
+    licenses = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 5173758719d3..2c2a4586055d 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -3283,6 +3283,8 @@ in {
 
   graphene = callPackage ../development/python-modules/graphene { };
 
+  graphene-django = callPackage ../development/python-modules/graphene-django { };
+
   graphqlclient= callPackage ../development/python-modules/graphqlclient { };
 
   graphql-core = callPackage ../development/python-modules/graphql-core { };

From b551e68ad45b1de41ddc49e7704b73bd34cfd427 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 22:18:36 +0200
Subject: [PATCH 05/15] python3Packages.django-graphiql-debug-toolbar: init at
 0.2.0

---
 .../django-graphiql-debug-toolbar/default.nix | 55 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 57 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-graphiql-debug-toolbar/default.nix

diff --git a/pkgs/development/python-modules/django-graphiql-debug-toolbar/default.nix b/pkgs/development/python-modules/django-graphiql-debug-toolbar/default.nix
new file mode 100644
index 000000000000..26a82254a7a6
--- /dev/null
+++ b/pkgs/development/python-modules/django-graphiql-debug-toolbar/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, poetry-core
+, django
+, django-debug-toolbar
+, graphene-django
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "django-graphiql-debug-toolbar";
+  version = "0.2.0";
+  format = "pyproject";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "flavors";
+    repo = pname;
+    rev = version;
+    sha256 = "0fikr7xl786jqfkjdifymqpqnxy4qj8g3nlkgfm24wwq0za719dw";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    django
+    django-debug-toolbar
+    graphene-django
+  ];
+
+  pythonImportsCheck = [
+    "graphiql_debug_toolbar"
+  ];
+
+  DB_BACKEND = "sqlite";
+  DB_NAME = ":memory:";
+  DJANGO_SETTINGS_MODULE = "tests.settings";
+
+  checkPhase = ''
+    runHook preCheck
+    ${python.interpreter} -m django test tests
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Django Debug Toolbar for GraphiQL IDE";
+    homepage = "https://github.com/flavors/django-graphiql-debug-toolbar";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 2c2a4586055d..6bbef5681fcf 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2124,6 +2124,8 @@ in {
 
   django-formtools = callPackage ../development/python-modules/django-formtools { };
 
+  django-graphiql-debug-toolbar = callPackage ../development/python-modules/django-graphiql-debug-toolbar { };
+
   django-gravatar2 = callPackage ../development/python-modules/django-gravatar2 { };
 
   django_guardian = callPackage ../development/python-modules/django_guardian { };

From 109100544943d0c98def376bf5b7cdaa58b7150e Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 22:41:59 +0200
Subject: [PATCH 06/15] python3Packages.django-prometheus: init at 2.1.0

---
 .../django-prometheus/default.nix             | 52 +++++++++++++++++++
 .../drop-untestable-database-backends.patch   | 38 ++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 3 files changed, 92 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-prometheus/default.nix
 create mode 100644 pkgs/development/python-modules/django-prometheus/drop-untestable-database-backends.patch

diff --git a/pkgs/development/python-modules/django-prometheus/default.nix b/pkgs/development/python-modules/django-prometheus/default.nix
new file mode 100644
index 000000000000..bd97f2a73614
--- /dev/null
+++ b/pkgs/development/python-modules/django-prometheus/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, prometheus-client
+, psycopg2
+, pytest-django
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "django-prometheus";
+  version = "2.1.0";
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "korfuri";
+    repo = pname;
+    rev = version;
+    sha256 = "1y1cmycc545xrys41jk8kia36hwnkwhkw26mlpfdjgb63vq30x1d";
+  };
+
+  patches = [
+    ./drop-untestable-database-backends.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace '"pytest-runner"' ""
+  '';
+
+  propagatedBuildInputs = [
+    prometheus-client
+  ];
+
+  pythonImportsCheck = [
+    "django_prometheus"
+  ];
+
+  checkInputs = [
+    pytest-django
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "Django middlewares to monitor your application with Prometheus.io";
+    homepage = "https://github.com/korfuri/django-prometheus";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/development/python-modules/django-prometheus/drop-untestable-database-backends.patch b/pkgs/development/python-modules/django-prometheus/drop-untestable-database-backends.patch
new file mode 100644
index 000000000000..1e9e65060849
--- /dev/null
+++ b/pkgs/development/python-modules/django-prometheus/drop-untestable-database-backends.patch
@@ -0,0 +1,38 @@
+diff --git a/django_prometheus/tests/end2end/testapp/settings.py b/django_prometheus/tests/end2end/testapp/settings.py
+index 0630721..bd2190a 100644
+--- a/django_prometheus/tests/end2end/testapp/settings.py
++++ b/django_prometheus/tests/end2end/testapp/settings.py
+@@ -53,33 +53,6 @@ DATABASES = {
+         "ENGINE": "django_prometheus.db.backends.sqlite3",
+         "NAME": "db.sqlite3",
+     },
+-    # Comment this to not test django_prometheus.db.backends.postgres.
+-    "postgresql": {
+-        "ENGINE": "django_prometheus.db.backends.postgresql",
+-        "NAME": "postgres",
+-        "USER": "postgres",
+-        "PASSWORD": "",
+-        "HOST": "localhost",
+-        "PORT": "5432",
+-    },
+-    # Comment this to not test django_prometheus.db.backends.postgis.
+-    "postgis": {
+-        "ENGINE": "django_prometheus.db.backends.postgis",
+-        "NAME": "postgis",
+-        "USER": "postgres",
+-        "PASSWORD": "",
+-        "HOST": "localhost",
+-        "PORT": "5432",
+-    },
+-    # Comment this to not test django_prometheus.db.backends.mysql.
+-    "mysql": {
+-        "ENGINE": "django_prometheus.db.backends.mysql",
+-        "NAME": "django_prometheus_1",
+-        "USER": "travis",
+-        "PASSWORD": "",
+-        "HOST": "localhost",
+-        "PORT": "3306",
+-    },
+     # The following databases are used by test_db.py only
+     "test_db_1": {
+         "ENGINE": "django_prometheus.db.backends.sqlite3",
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 6bbef5681fcf..805417f1321b 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2169,6 +2169,8 @@ in {
 
   django-postgresql-netfields = callPackage ../development/python-modules/django-postgresql-netfields { };
 
+  django-prometheus = callPackage ../development/python-modules/django-prometheus { };
+
   django-q = callPackage ../development/python-modules/django-q { };
 
   djangoql = callPackage ../development/python-modules/djangoql { };

From e75571d8887fdfc8c5d4551700da0f47148f3887 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 23:07:22 +0200
Subject: [PATCH 07/15] python3Packages.django-redis: rename from django_redis

Also partially enable tests.
---
 .../python-modules/django-redis/default.nix   | 50 +++++++++++++++++++
 .../python-modules/django_redis/default.nix   | 35 -------------
 pkgs/top-level/python-aliases.nix             |  1 +
 pkgs/top-level/python-packages.nix            |  2 +-
 4 files changed, 52 insertions(+), 36 deletions(-)
 create mode 100644 pkgs/development/python-modules/django-redis/default.nix
 delete mode 100644 pkgs/development/python-modules/django_redis/default.nix

diff --git a/pkgs/development/python-modules/django-redis/default.nix b/pkgs/development/python-modules/django-redis/default.nix
new file mode 100644
index 000000000000..b578a016722b
--- /dev/null
+++ b/pkgs/development/python-modules/django-redis/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, pythonOlder
+, buildPythonPackage
+, django
+, redis
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "django-redis";
+  version = "5.0.0";
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "jazzband";
+    repo = "django-redis";
+    rev = version;
+    sha256 = "1np10hfyg4aamlz7vav9fy80gynb1lhl2drqkbckr3gg1gbz6crj";
+  };
+
+  postPatch = ''
+    sed -i '/-cov/d' setup.cfg
+  '';
+
+  propagatedBuildInputs = [
+    django
+    redis
+  ];
+
+  pythonImportsCheck = [
+    "django_redis"
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    "tests/test_backend.py"  # django.core.exceptions.ImproperlyConfigured: Requested setting DJANGO_REDIS_SCAN_ITERSIZE, but settings are not configured.
+  ];
+
+  meta = with lib; {
+    description = "Full featured redis cache backend for Django";
+    homepage = "https://github.com/jazzband/django-redis";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/development/python-modules/django_redis/default.nix b/pkgs/development/python-modules/django_redis/default.nix
deleted file mode 100644
index 61101cc8a929..000000000000
--- a/pkgs/development/python-modules/django_redis/default.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ lib
-, fetchPypi
-, buildPythonPackage
-, mock
-, django
-, redis
-, msgpack
-}:
-buildPythonPackage rec {
-  pname = "django-redis";
-  version = "5.0.0";
-
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "048f665bbe27f8ff2edebae6aa9c534ab137f1e8fa7234147ef470df3f3aa9b8";
-  };
-
-  propagatedBuildInputs = [
-    django
-    redis
-    msgpack
-  ];
-
-  # django.core.exceptions.ImproperlyConfigured: Requested setting DJANGO_REDIS_SCAN_ITERSIZE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
-  doCheck = false;
-
-  pythonImportsCheck = [ "django_redis" ];
-
-  meta = with lib; {
-    description = "Full featured redis cache backend for Django";
-    homepage = "https://github.com/niwibe/django-redis";
-    license = licenses.bsd3;
-    maintainers = with maintainers; [ ];
-  };
-}
diff --git a/pkgs/top-level/python-aliases.nix b/pkgs/top-level/python-aliases.nix
index 9197d3f0d54c..5bfce49a82be 100644
--- a/pkgs/top-level/python-aliases.nix
+++ b/pkgs/top-level/python-aliases.nix
@@ -44,6 +44,7 @@ mapAliases ({
   diff_cover = diff-cover; # added 2021-07-02
   discogs_client = discogs-client; # added 2021-07-02
   djangorestframework-jwt = drf-jwt; # added 2021-07-20
+  django_redis = django-redis; # added 2021-10-11
   dns = dnspython; # added 2017-12-10
   dogpile_cache = dogpile-cache; # added 2021-10-28
   faulthandler = throw "faulthandler is built into ${python.executable}"; # added 2021-07-12
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 805417f1321b..21fc58d00a95 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2179,7 +2179,7 @@ in {
 
   django-raster = callPackage ../development/python-modules/django-raster { };
 
-  django_redis = callPackage ../development/python-modules/django_redis { };
+  django-redis = callPackage ../development/python-modules/django-redis { };
 
   django-rest-auth = callPackage ../development/python-modules/django-rest-auth { };
 

From c9881f424e45758871ec44bb77df046bd3096840 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 23:35:57 +0200
Subject: [PATCH 08/15] python3Packages.django-rq: init at 2.4.1

---
 .../python-modules/django-rq/default.nix      | 43 +++++++++++++++++++
 .../python-modules/svgwrite/default.nix       |  4 +-
 pkgs/top-level/python-packages.nix            |  2 +
 3 files changed, 47 insertions(+), 2 deletions(-)
 create mode 100644 pkgs/development/python-modules/django-rq/default.nix

diff --git a/pkgs/development/python-modules/django-rq/default.nix b/pkgs/development/python-modules/django-rq/default.nix
new file mode 100644
index 000000000000..18a6808a21ef
--- /dev/null
+++ b/pkgs/development/python-modules/django-rq/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonPackage
+, isPy27
+, fetchFromGitHub
+, django
+, redis
+, rq
+, sentry-sdk
+}:
+
+buildPythonPackage rec {
+  pname = "django-rq";
+  version = "2.4.1";
+  format = "setuptools";
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "rq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1dy3mhj60xlqy7f65zh80sqn6qywsp697r6yy3jcl5wmwizzhybr";
+  };
+
+  propagatedBuildInputs = [
+    django
+    redis
+    rq
+    sentry-sdk
+  ];
+
+  pythonImportsCheck = [
+    "django_rq"
+  ];
+
+  doCheck = false; # require redis-server
+
+  meta = with lib; {
+    description = "Simple app that provides django integration for RQ (Redis Queue)";
+    homepage = "https://github.com/rq/django-rq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/development/python-modules/svgwrite/default.nix b/pkgs/development/python-modules/svgwrite/default.nix
index 7799583f8dcf..4d30db35cce0 100644
--- a/pkgs/development/python-modules/svgwrite/default.nix
+++ b/pkgs/development/python-modules/svgwrite/default.nix
@@ -8,13 +8,13 @@
 
 buildPythonPackage rec {
   pname = "svgwrite";
-  version = "1.4";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "mozman";
     repo = "svgwrite";
     rev = "v${version}";
-    sha256 = "15xjz5b4dw1sg3a5k4wmzky4h5v1n937id8vl6hha1a2xj42z2s5";
+    sha256 = "sha256-d//ZUFb5yj51uD1fb6yJJROaQ2MLyfA3Pa84TblqLNk=";
   };
 
   # svgwrite requires Python 3.6 or newer
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 21fc58d00a95..2d167d74c63d 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2183,6 +2183,8 @@ in {
 
   django-rest-auth = callPackage ../development/python-modules/django-rest-auth { };
 
+  django-rq = callPackage ../development/python-modules/django-rq { };
+
   djangorestframework = callPackage ../development/python-modules/djangorestframework { };
 
   djangorestframework-simplejwt = callPackage ../development/python-modules/djangorestframework-simplejwt { };

From bf2c4da25033512fd321c83101a406edbd09ce31 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 23:53:40 +0200
Subject: [PATCH 09/15] python3Packages.django-tables2: init at 2.4.1

---
 .../python-modules/django-tables2/default.nix | 46 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 48 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-tables2/default.nix

diff --git a/pkgs/development/python-modules/django-tables2/default.nix b/pkgs/development/python-modules/django-tables2/default.nix
new file mode 100644
index 000000000000..5cd1db3e7194
--- /dev/null
+++ b/pkgs/development/python-modules/django-tables2/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, django
+, tablib
+, django-filter
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "django-tables2";
+  version = "2.4.1";
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "jieter";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04vvgf18diwp0mgp14b71a0dxhgrcslv1ljybi300gvzvzjnp3qv";
+  };
+
+  propagatedBuildInputs = [
+    django
+    tablib
+  ];
+
+  pythonImportsCheck = [
+    # Requested setting DJANGO_TABLES2_TEMPLATE, but settings are not configured.
+  ];
+
+  doCheck = false; # needs django-boostrap{3,4} packages
+
+  # Leave this in! Discovering how to run tests is annoying in Django apps
+  checkPhase = ''
+    ${python.interpreter} example/manage.py test
+  '';
+
+  meta = with lib; {
+    description = "Django app for creating HTML tables";
+    homepage = "https://github.com/jieter/django-tables2";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 2d167d74c63d..c0fcfd7447d8 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2207,6 +2207,8 @@ in {
 
   django-storages = callPackage ../development/python-modules/django-storages { };
 
+  django-tables2 = callPackage ../development/python-modules/django-tables2 { };
+
   django_tagging = callPackage ../development/python-modules/django_tagging { };
 
   django_taggit = callPackage ../development/python-modules/django_taggit { };

From 0a41e93ce4e5458c900701e3e8fdbbfca526cc17 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Mon, 11 Oct 2021 23:59:52 +0200
Subject: [PATCH 10/15] python3Packages.django-taggit: rename from
 django_taggit and refactor

---
 .../default.nix                               | 27 ++++++++++++-------
 pkgs/top-level/python-aliases.nix             |  1 +
 pkgs/top-level/python-packages.nix            |  2 +-
 3 files changed, 20 insertions(+), 10 deletions(-)
 rename pkgs/development/python-modules/{django_taggit => django-taggit}/default.nix (70%)

diff --git a/pkgs/development/python-modules/django_taggit/default.nix b/pkgs/development/python-modules/django-taggit/default.nix
similarity index 70%
rename from pkgs/development/python-modules/django_taggit/default.nix
rename to pkgs/development/python-modules/django-taggit/default.nix
index 5dcdb67ebae1..e410b72437c0 100644
--- a/pkgs/development/python-modules/django_taggit/default.nix
+++ b/pkgs/development/python-modules/django-taggit/default.nix
@@ -1,28 +1,37 @@
 { lib
 , buildPythonPackage
-, python
-, fetchPypi
 , pythonOlder
+, fetchPypi
 , django
 , djangorestframework
 , mock
 , isort
-, isPy3k
+, python
 }:
 
 buildPythonPackage rec {
   pname = "django-taggit";
   version = "1.5.1";
-  disabled = !isPy3k;
+  format = "setuptools";
+  disabled = pythonOlder "3.6";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "e5bb62891f458d55332e36a32e19c08d20142c43f74bc5656c803f8af25c084a";
   };
 
-  propagatedBuildInputs = [ isort django djangorestframework ];
+  propagatedBuildInputs = [
+    django
+  ];
+
+  pythonImportsCheck = [
+    "taggit"
+  ];
+
+  checkInputs = [
+    djangorestframework
+  ];
 
-  checkInputs = [ mock ];
   checkPhase = ''
     # prove we're running tests against installed package, not build dir
     rm -r taggit
@@ -33,9 +42,9 @@ buildPythonPackage rec {
   '';
 
   meta = with lib; {
-    description = "django-taggit is a reusable Django application for simple tagging";
-    homepage = "https://github.com/alex/django-taggit/tree/master/";
-    license = licenses.bsd2;
+    description = "Simple tagging for django";
+    homepage = "https://github.com/jazzband/django-taggit";
+    license = licenses.bsd3;
     maintainers = with maintainers; [ desiderius ];
   };
 
diff --git a/pkgs/top-level/python-aliases.nix b/pkgs/top-level/python-aliases.nix
index 5bfce49a82be..a6b9ac968431 100644
--- a/pkgs/top-level/python-aliases.nix
+++ b/pkgs/top-level/python-aliases.nix
@@ -45,6 +45,7 @@ mapAliases ({
   discogs_client = discogs-client; # added 2021-07-02
   djangorestframework-jwt = drf-jwt; # added 2021-07-20
   django_redis = django-redis; # added 2021-10-11
+  django_taggit = django-taggit; # added 2021-10-11
   dns = dnspython; # added 2017-12-10
   dogpile_cache = dogpile-cache; # added 2021-10-28
   faulthandler = throw "faulthandler is built into ${python.executable}"; # added 2021-07-12
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index c0fcfd7447d8..83ac6eee3169 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2211,7 +2211,7 @@ in {
 
   django_tagging = callPackage ../development/python-modules/django_tagging { };
 
-  django_taggit = callPackage ../development/python-modules/django_taggit { };
+  django-taggit = callPackage ../development/python-modules/django-taggit { };
 
   django_treebeard = callPackage ../development/python-modules/django_treebeard { };
 

From e2c8c6ceebb5ec6b27b5b9167a76ca9196a9ddb0 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Tue, 12 Oct 2021 00:36:02 +0200
Subject: [PATCH 11/15] python3Packages.django-timezone-field: init at 4.2.1

---
 .../django-timezone-field/default.nix         | 62 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 +
 2 files changed, 64 insertions(+)
 create mode 100644 pkgs/development/python-modules/django-timezone-field/default.nix

diff --git a/pkgs/development/python-modules/django-timezone-field/default.nix b/pkgs/development/python-modules/django-timezone-field/default.nix
new file mode 100644
index 000000000000..0bbdac356cd0
--- /dev/null
+++ b/pkgs/development/python-modules/django-timezone-field/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, poetry-core
+, django
+, djangorestframework
+, pytz
+, pytest
+, pytest-lazy-fixture
+, python
+}:
+
+buildPythonPackage rec {
+  pname = "django-timezone-field";
+  version = "4.2.1";
+  format = "setuptools";
+  disabled = pythonOlder "3.5";
+
+  src = fetchFromGitHub {
+    owner = "mfogel";
+    repo = pname;
+    rev = version;
+    sha256 = "0swld4168pfhppr9q3i9r062l832cmmx792kkvlcvxfbdhk6qz9h";
+  };
+
+  nativeBuildInputs = [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = [
+    django
+    djangorestframework
+    pytz
+  ];
+
+  pythonImportsCheck = [
+    "timezone_field"
+  ];
+
+  # Uses pytest.lazy_fixture directly which is broken in pytest-lazy-fixture
+  # https://github.com/TvoroG/pytest-lazy-fixture/issues/22
+  doCheck = false;
+
+  DJANGO_SETTINGS_MODULE = "tests.settings";
+
+  checkInputs = [
+    pytest
+    pytest-lazy-fixture
+  ];
+
+  checkPhase = ''
+    ${python.interpreter} -m django test
+  '';
+
+  meta = with lib; {
+    description = "Django app providing database, form and serializer fields for pytz timezone objects";
+    homepage = "https://github.com/mfogel/django-timezone-field";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 83ac6eee3169..a0280c72f078 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -2213,6 +2213,8 @@ in {
 
   django-taggit = callPackage ../development/python-modules/django-taggit { };
 
+  django-timezone-field = callPackage ../development/python-modules/django-timezone-field { };
+
   django_treebeard = callPackage ../development/python-modules/django_treebeard { };
 
   django-versatileimagefield = callPackage ../development/python-modules/django-versatileimagefield { };

From 59b8e7eb81bdf0b3dc0e8e730553cbde9ea3092b Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Tue, 12 Oct 2021 01:00:22 +0200
Subject: [PATCH 12/15] python3Packages.markdown-include: init at 0.6.0

---
 .../markdown-include/default.nix              | 33 +++++++++++++++++++
 pkgs/top-level/python-packages.nix            |  2 ++
 2 files changed, 35 insertions(+)
 create mode 100644 pkgs/development/python-modules/markdown-include/default.nix

diff --git a/pkgs/development/python-modules/markdown-include/default.nix b/pkgs/development/python-modules/markdown-include/default.nix
new file mode 100644
index 000000000000..389c94fb2381
--- /dev/null
+++ b/pkgs/development/python-modules/markdown-include/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, markdown
+}:
+
+buildPythonPackage rec {
+  pname = "markdown-include";
+  version = "0.6.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "18p4qfhazvskcg6xsdv1np8m1gc1llyabp311xzhqy7p6q76hpbg";
+  };
+
+  propagatedBuildInputs = [
+    markdown
+  ];
+
+  pythonImportsCheck = [
+    "markdown_include"
+  ];
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    description = "Extension to Python-Markdown which provides an include function";
+    homepage = "https://github.com/cmacmackin/markdown-include";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index a0280c72f078..f447d82ffdb1 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -4587,6 +4587,8 @@ in {
 
   markdown = callPackage ../development/python-modules/markdown { };
 
+  markdown-include = callPackage ../development/python-modules/markdown-include { };
+
   markdown-it-py = callPackage ../development/python-modules/markdown-it-py { };
 
   markdown-macros = callPackage ../development/python-modules/markdown-macros { };

From 3ef1fefd0a951af8e960a207cf57501df0f2df9a Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Tue, 12 Oct 2021 01:11:08 +0200
Subject: [PATCH 13/15] python3Packages.django-js-asset: 1.2.2 ->
 unstable-2021-06-07

The latest release is not compatible with Django 3.2 and tests are failing.
---
 pkgs/development/python-modules/django-js-asset/default.nix | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/pkgs/development/python-modules/django-js-asset/default.nix b/pkgs/development/python-modules/django-js-asset/default.nix
index 8e189bf8a0b1..e7001d15a9a4 100644
--- a/pkgs/development/python-modules/django-js-asset/default.nix
+++ b/pkgs/development/python-modules/django-js-asset/default.nix
@@ -7,14 +7,14 @@
 
 buildPythonPackage rec {
   pname = "django-js-asset";
-  version = "1.2.2";
+  version = "unstable-2021-06-07";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = "matthiask";
     repo = pname;
-    rev = version;
-    sha256 = "0viygwdz9i0ra6bz3z4w7h94qc7q134aq7bd4x2qwwhm84qmrip4";
+    rev = "a186aa0b5721ca95da6cc032a2fb780a152f581b";
+    sha256 = "141zxng0wwxalsi905cs8pdppy3ad717y3g4fkdxw4n3pd0fjp8r";
   };
 
   propagatedBuildInputs = [

From 704aec5b4ad7f5de757d4213ea7fbe2af05b6fc7 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Tue, 12 Oct 2021 01:17:00 +0200
Subject: [PATCH 14/15] python3Packages.graphene-django: 3.0.0b7 ->
 unstable-2021-06-11

Prevents test breakage with django_3.
---
 .../python-modules/graphene-django/default.nix            | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pkgs/development/python-modules/graphene-django/default.nix b/pkgs/development/python-modules/graphene-django/default.nix
index 8c0e31f809da..f736fbe39d85 100644
--- a/pkgs/development/python-modules/graphene-django/default.nix
+++ b/pkgs/development/python-modules/graphene-django/default.nix
@@ -19,15 +19,15 @@
 
 buildPythonPackage rec {
   pname = "graphene-django";
-  version = "3.0.0b7";
+  version = "unstable-2021-06-11";
   format = "setuptools";
   disabled = pythonOlder "3.6";
 
   src = fetchFromGitHub {
     owner = "graphql-python";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-uPc9HNcciQpCcHLYespK8ICny5jOQaliFMyd2Yt6/as=";
+    rev = "e7f7d8da07ba1020f9916153f17e97b0ec037712";
+    sha256 = "0b33q1im90ahp3gzy9wx5amfzy6q57ydjpy5rn988gh81hbyqaxv";
   };
 
   postPatch = ''
@@ -59,7 +59,7 @@ buildPythonPackage rec {
   meta = with lib; {
     description = "Integrate GraphQL into your Django project";
     homepage = "https://github.com/graphql-python/graphene-django";
-    licenses = licenses.mit;
+    license = licenses.mit;
     maintainers = with maintainers; [ hexa ];
   };
 }

From aacee0857daca6e55f4897238f863e8734a88093 Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Wed, 27 Oct 2021 12:13:13 +0200
Subject: [PATCH 15/15] python3Packages.python-redis-lock: fix eval

---
 pkgs/development/python-modules/python-redis-lock/default.nix | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkgs/development/python-modules/python-redis-lock/default.nix b/pkgs/development/python-modules/python-redis-lock/default.nix
index bd8933be824c..7671e5a4a9b2 100644
--- a/pkgs/development/python-modules/python-redis-lock/default.nix
+++ b/pkgs/development/python-modules/python-redis-lock/default.nix
@@ -6,7 +6,7 @@
 , pytestCheckHook
 , process-tests
 , pkgs
-, withDjango ? false, django_redis
+, withDjango ? false, django-redis
 }:
 
 buildPythonPackage rec {
@@ -20,7 +20,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [
     redis
-  ] ++ lib.optional withDjango django_redis;
+  ] ++ lib.optional withDjango django-redis;
 
   checkInputs = [
     pytestCheckHook