projects/guix·blob python-team · refs

2274 lines · 85.7 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2016 Hartmut Goebel <[email protected]>
3;;; Copyright © 2016, 2019, 2020, 2021 Efraim Flashner <[email protected]>
4;;; Copyright © 2017 Nikita <[email protected]>
5;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <[email protected]>
6;;; Copyright © 2017, 2025 Ricardo Wurmus <[email protected]>
7;;; Copyright © 2018 Vijayalakshmi Vedantham <[email protected]>
8;;; Copyright © 2019 Sam <[email protected]>
9;;; Copyright © 2020, 2021, 2022, 2023 Marius Bakke <[email protected]>
10;;; Copyright © 2021 Maxim Cournoyer <[email protected]>
11;;; Copyright © 2021 Luis Felipe López Acevedo <[email protected]>
12;;; Copyright © 2022 Pradana Aumars <[email protected]>
13;;; Copyright © 2025 Sharlatan Hellseher <[email protected]>
14;;; Copyright © 2025 Vinicius Monego <[email protected]>
15;;; Copyright © 2025 jgart <[email protected]>
16;;; Copyright © 2026 Evgeny Pisemsky <[email protected]>
17;;;
18;;; This file is part of GNU Guix.
19;;;
20;;; GNU Guix is free software; you can redistribute it and/or modify it
21;;; under the terms of the GNU General Public License as published by
22;;; the Free Software Foundation; either version 3 of the License, or (at
23;;; your option) any later version.
24;;;
25;;; GNU Guix is distributed in the hope that it will be useful, but
26;;; WITHOUT ANY WARRANTY; without even the implied warranty of
27;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28;;; GNU General Public License for more details.
29;;;
30;;; You should have received a copy of the GNU General Public License
31;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
32
33(define-module (gnu packages django)
34 #:use-module ((guix licenses) #:prefix license:)
35 #:use-module (guix packages)
36 #:use-module (guix download)
37 #:use-module (guix git-download)
38 #:use-module (guix gexp)
39 #:use-module (guix build-system pyproject)
40 #:use-module (guix deprecation)
41 #:use-module (guix search-paths)
42 #:use-module (guix utils)
43 #:use-module (gnu packages)
44 #:use-module (gnu packages base)
45 #:use-module (gnu packages build-tools)
46 #:use-module (gnu packages compression)
47 #:use-module (gnu packages databases)
48 #:use-module (gnu packages check)
49 #:use-module (gnu packages finance)
50 #:use-module (gnu packages geo)
51 #:use-module (gnu packages gnupg)
52 #:use-module (gnu packages mail)
53 #:use-module (gnu packages openldap)
54 #:use-module (gnu packages python)
55 #:use-module (gnu packages python-build)
56 #:use-module (gnu packages python-check)
57 #:use-module (gnu packages python-compression)
58 #:use-module (gnu packages python-crypto)
59 #:use-module (gnu packages python-web)
60 #:use-module (gnu packages python-xyz)
61 #:use-module (gnu packages search)
62 #:use-module (gnu packages security-token)
63 #:use-module (gnu packages sphinx)
64 #:use-module (gnu packages time)
65 #:use-module (gnu packages xml))
66
67(define-public daphne
68 (package
69 (name "daphne")
70 (version "4.2.3")
71 (source
72 (origin
73 (method git-fetch)
74 (uri (git-reference
75 (url "https://github.com/django/daphne")
76 (commit version)))
77 (file-name (git-file-name name version))
78 (sha256
79 (base32 "1pk87ayq72hycfs48r9i4a19id40h9wz7n9bll0mczc9kwjyzlf5"))))
80 (build-system pyproject-build-system)
81 (arguments
82 (list
83 ;; AssertionError("Could not find site-packages in sys.path")
84 ;; This test checks for the presence of fd_endpoint.py in the Pytest
85 ;; store path, but it is in Daphne's path.
86 #:test-flags #~(list "-k" "not test_fd_endpoint_plugin_installed")))
87 (propagated-inputs (list python-asgiref
88 python-autobahn
89 python-twisted))
90 (native-inputs (list python-django-minimal
91 python-pytest
92 python-pytest-asyncio
93 python-setuptools))
94 (home-page "https://github.com/django/daphne")
95 (synopsis "Django ASGI (HTTP/WebSocket) server")
96 (description "Daphne is a HTTP, HTTP2 and WebSocket protocol server for
97@url{https://github.com/django/asgiref/blob/main/specs/asgi.rst,ASGI} and
98@url{https://github.com/django/asgiref/blob/main/specs/www.rst,ASGI-HTTP},
99developed to power Django Channels.
100
101It supports automatic negotiation of protocols; there's no need for URL
102prefixing to determine WebSocket endpoints versus HTTP endpoints.")
103 (license license:bsd-3)))
104
105(define-public python-channels
106 (package
107 (name "python-channels")
108 (version "4.3.2")
109 (source
110 (origin
111 (method git-fetch) ; no tests in PyPI
112 (uri (git-reference
113 (url "https://github.com/django/channels")
114 (commit version)))
115 (file-name (git-file-name name version))
116 (sha256
117 (base32 "0lxq5l0729ms4xzbn1rq968qpi7ipa9aj1wjvzrpdxd3mmlg2618"))))
118 (build-system pyproject-build-system)
119 (arguments
120 '(#:phases
121 (modify-phases %standard-phases
122 (add-before 'check 'delete-selenium-tests
123 (lambda* _
124 (delete-file "tests/sample_project/tests/test_selenium.py"))))))
125 (propagated-inputs (list python-asgiref python-django))
126 ;; Channels develops and maintains Daphne but any other ASGI server can be
127 ;; used, so keep it in native-inputs for tests.
128 (native-inputs (list daphne
129 python-async-timeout
130 python-pytest
131 python-pytest-asyncio
132 python-pytest-django
133 python-setuptools
134 python-wheel))
135 (home-page "https://github.com/django/channels")
136 (synopsis "Async, event-driven capabilities on Django")
137 (description
138 "Channels wraps Django's native asynchronous view support, allowing Django
139projects to handle not only HTTP, but protocols that require long-running
140connections too - WebSockets, MQTT, chatbots, amateur radio, and more. It does
141this while preserving Django's synchronous nature, allowing you to choose how
142you write your code - synchronous, fully asynchronous, or a mixture of both.
143
144Channels also bundles this event-driven architecture with @emph{channel layers},
145a system that allows you to easily communicate between processes, and separate
146your project into different processes.")
147 (license license:bsd-3)))
148
149(define-public python-crispy-bootstrap3
150 (package
151 (name "python-crispy-bootstrap3")
152 (version "2024.1")
153 (source
154 (origin
155 (method git-fetch)
156 (uri (git-reference
157 (url "https://github.com/django-crispy-forms/crispy-bootstrap3")
158 (commit version)))
159 (file-name (git-file-name name version))
160 (sha256
161 (base32 "1ncf8hz3yf8h0asvyi1g54ds0glp46zfcr6sklhsynbqzmcqd463"))))
162 (build-system pyproject-build-system)
163 (arguments (list #:tests? #f)) ; This package's own test suite fails with
164 ; Django 5.2, but is tested successfully by
165 ; python-django-crispy-forms which still
166 ; supports this template pack.
167 (propagated-inputs (list python-django python-django-crispy-forms))
168 (native-inputs (list python-pytest python-pytest-django python-setuptools))
169 (home-page "https://github.com/django-crispy-forms/crispy-bootstrap3")
170 (synopsis "Bootstrap3 template pack for django-crispy-forms")
171 (description
172 "This package provides a bootstrap3 template pack for
173@code{python-django-crispy-forms}.")
174 (license license:expat)))
175
176(define-public python-crispy-bootstrap4
177 (package
178 (name "python-crispy-bootstrap4")
179 (version "2026.2")
180 (source
181 (origin
182 (method git-fetch)
183 (uri (git-reference
184 (url "https://github.com/django-crispy-forms/crispy-bootstrap4")
185 (commit version)))
186 (file-name (git-file-name name version))
187 (sha256
188 (base32 "1sjclyc7xxflzz452j57vp0290gz86kwcbfjz7x39sfwlhrib24q"))))
189 (build-system pyproject-build-system)
190 (arguments
191 (list
192 #:phases
193 #~(modify-phases %standard-phases
194 (add-before 'check 'pre-check
195 (lambda _
196 (setenv "PYTHONPATH" "."))))))
197 (propagated-inputs (list python-django python-django-crispy-forms))
198 (native-inputs (list python-pytest python-pytest-django python-setuptools))
199 (home-page "https://github.com/django-crispy-forms/crispy-bootstrap4")
200 (synopsis "Bootstrap4 template pack for django-crispy-forms")
201 (description
202 "This package provides a bootstrap4 template pack for
203@code{python-django-crispy-forms}.")
204 (license license:expat)))
205
206(define-public python-django
207 (package
208 (name "python-django")
209 (version "6.0.5")
210 (source
211 (origin
212 (method url-fetch)
213 (uri (pypi-uri "django" version))
214 (sha256
215 (base32 "0saj5w1pmfl2bf6smmbx2h8v6b9n9djdsbp46v468a4ax5r6hvdw"))))
216 (build-system pyproject-build-system)
217 (arguments
218 '(#:test-flags
219 (list
220 ;; By default tests run in parallel, which may cause various race
221 ;; conditions. Run sequentially for consistent results.
222 "--parallel=1"
223 ;; The test suite fails as soon as a single test fails.
224 "--failfast")
225 #:phases
226 (modify-phases %standard-phases
227 (add-before 'check 'pre-check
228 (lambda* (#:key inputs #:allow-other-keys)
229 ;; The test-suite tests timezone-dependent functions, thus tzdata
230 ;; needs to be available.
231 (setenv "TZDIR"
232 (search-input-directory inputs "share/zoneinfo"))
233
234 ;; Disable test for incorrect timezone: it only raises the
235 ;; expected error when /usr/share/zoneinfo exists, even though
236 ;; the machinery gracefully falls back to TZDIR. According to
237 ;; django/conf/__init__.py, lack of /usr/share/zoneinfo is
238 ;; harmless, so just ignore this test.
239 (substitute* "tests/settings_tests/tests.py"
240 ((".*def test_incorrect_timezone.*" all)
241 (string-append " @unittest.skip('Disabled by Guix')\n"
242 all)))))
243 (add-before 'check 'delete-sitecustomize
244 (lambda* _
245 ;; This file gets loaded instead of the GUIX sitecustomize.py,
246 ;; so we end up ignoring GUIX_PYTHONPATH and breaking imports.
247 ;; It only contains a coverage hook that we don't need here.
248 (delete-file "tests/sitecustomize.py")))
249 (replace 'check
250 (lambda* (#:key tests? test-flags #:allow-other-keys)
251 (if tests?
252 (with-directory-excursion "tests"
253 ;; Tests expect PYTHONPATH to contain the root directory.
254 (setenv "PYTHONPATH" "..")
255 (apply invoke "python" "runtests.py" test-flags))
256 (format #t "test suite not run~%"))))
257 ;; XXX: The 'wrap' phase adds native inputs as runtime dependencies,
258 ;; see <https://bugs.gnu.org/25235>. The django-admin script typically
259 ;; runs in an environment that has Django and its dependencies on
260 ;; PYTHONPATH, so just disable the wrapper to reduce the size from
261 ;; ~710 MiB to ~203 MiB.
262 (delete 'wrap))))
263 ;; TODO: Install extras/django_bash_completion.
264 (native-inputs
265 (list tzdata-for-tests
266 ;; Remaining packages are test requirements taken from
267 ;; tests/requirements/py3.txt
268 python-docutils
269 ;; optional for tests: python-geoip2
270 ;; optional for tests: python-memcached
271 python-numpy
272 python-pillow
273 python-pyyaml
274 python-setuptools
275 ;; optional for tests: python-selenium
276 python-tblib))
277 (propagated-inputs
278 (list python-asgiref
279 python-sqlparse
280 ;; Optional dependencies.
281 python-argon2-cffi
282 python-bcrypt
283 ;; This input is not strictly required, but in practice many Django
284 ;; libraries need it for test suites and similar.
285 python-jinja2))
286 (native-search-paths
287 ;; Set TZDIR when 'tzdata' is available so that timezone functionality
288 ;; works (mostly) out of the box in containerized environments.
289 ;; Note: This search path actually belongs to 'glibc'.
290 (list $TZDIR))
291 (home-page "https://www.djangoproject.com/")
292 (synopsis "High-level Python Web framework")
293 (description
294 "Django is a high-level Python Web framework that encourages rapid
295development and clean, pragmatic design. It provides many tools for building
296any Web site. Django focuses on automating as much as possible and adhering
297to the @dfn{don't repeat yourself} (DRY) principle.")
298 (license license:bsd-3)
299 (properties `((cpe-name . "django")
300 (lint-hidden-cve
301 ;; This CVE seems fixed since 5.2.1.
302 . ("CVE-2025-32873"
303 ;; This CVE is fixed in 4.1.9.
304 "CVE-2023-31047"))))))
305
306(define-public python-django-cache-url
307 (package
308 (name "python-django-cache-url")
309 (version "3.4.5")
310 (source
311 (origin
312 (method git-fetch)
313 (uri (git-reference
314 (url "https://github.com/epicserve/django-cache-url")
315 (commit (string-append "v" version))))
316 (file-name (git-file-name name version))
317 (sha256
318 (base32 "1a5vd07wrnfbclvf6pz9p8ag9kdd1453lsl9q0bkyc45hq2xqd2a"))))
319 (build-system pyproject-build-system)
320 (native-inputs
321 (list python-django python-pytest python-setuptools))
322 (home-page "https://github.com/epicserve/django-cache-url")
323 (synopsis "Configure Django cache settings from URLs")
324 (description
325 "This package provides a facility for configuring Django cache settings
326with a @var{CACHE_URL} environment variable.")
327 (license license:expat)))
328
329(define-public python-django-configurations
330 (package
331 (name "python-django-configurations")
332 (version "2.5.1")
333 (source
334 (origin
335 (method git-fetch)
336 (uri (git-reference
337 (url "https://github.com/jazzband/django-configurations")
338 (commit version)))
339 (file-name (git-file-name name version))
340 (sha256
341 (base32 "0zmaczfd3y6fsb80i4w5v4zjv8hk36v51p943ag5dk4745r4p050"))))
342 (build-system pyproject-build-system)
343 (arguments
344 (list
345 #:phases
346 #~(modify-phases %standard-phases
347 (add-after 'unpack 'skip-bad-test
348 (lambda _
349 (substitute* "tests/test_values.py"
350 (("test_database_url_value")
351 "__off_test_database_url_value"))))
352 (add-before 'build 'set-environemnt
353 (lambda _
354 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings.main")
355 (setenv "DJANGO_CONFIGURATION" "Test")))
356 (replace 'check
357 (lambda* (#:key tests? #:allow-other-keys)
358 (when tests?
359 (setenv "PYTHONPATH"
360 (string-append ".:" (getenv "GUIX_PYTHONPATH")))
361 (invoke "django-cadmin" "test" "-v2")))))))
362 (native-inputs
363 (list python-dj-database-url
364 python-dj-email-url
365 python-dj-search-url
366 python-django-cache-url
367 python-setuptools
368 python-setuptools-scm))
369 (propagated-inputs
370 (list python-django))
371 (home-page "https://django-configurations.readthedocs.io/")
372 (synopsis "Helper module for organizing Django settings")
373 (description
374 "@code{django-configurations} helps you organize the configuration of
375your Django project by providing glue code to bridge between Django'smodule
376based settings system and programming patterns like mixins, facades, factories
377and adapters that are useful for non-trivial configuration scenarios.")
378 (license license:bsd-3)))
379
380(define-public python-django-extensions
381 (package
382 (name "python-django-extensions")
383 (properties '((commit . "32ddfb0499bec7f39f9fbb44568d2781cecd1f32")
384 (revision . "0")))
385 (version (git-version "4.1"
386 (assoc-ref properties 'revision)
387 (assoc-ref properties 'commit)))
388 (source
389 (origin
390 (method git-fetch)
391 ;; Fetch from the git repository, so that the tests can be run.
392 (uri (git-reference
393 (url "https://github.com/django-extensions/django-extensions")
394 (commit (assoc-ref properties 'commit))))
395 (file-name (string-append name "-" version))
396 (sha256
397 (base32 "09gk82rsmqgaz4pqk0xvb4mgfprls8h1wm24p74d0ykdi7li2plg"))))
398 (build-system pyproject-build-system)
399 (arguments
400 (list
401 ;; The 5 tests in test_dumbscript.py fail (OperationalError).
402 #:test-flags
403 #~(list "--ignore" "tests/test_dumpscript.py")))
404 (propagated-inputs
405 (list python-django))
406 (native-inputs
407 (list python-aiosmtpd
408 python-factory-boy
409 python-pygments
410 python-pytest
411 python-pytest-django
412 python-setuptools
413 python-shortuuid
414 python-vobject
415 python-werkzeug
416 tzdata-for-tests))
417 (home-page "https://github.com/django-extensions/django-extensions")
418 (synopsis "Custom management extensions for Django")
419 (description
420 "Django-extensions extends Django providing, for example, management
421commands, additional database fields and admin extensions.")
422 (license license:expat)))
423
424(define-public python-django-localflavor
425 (package
426 (name "python-django-localflavor")
427 (version "3.1")
428 (source
429 (origin
430 (method url-fetch)
431 (uri (pypi-uri "django-localflavor" version))
432 (sha256
433 (base32 "0i1s0ijfd9rv2cp5x174jcyjpwn7fyg7s1wpbvlwm96bpdvs6bxc"))))
434 (build-system pyproject-build-system)
435 (arguments
436 (list
437 #:test-flags '(list "--settings=tests.settings" "tests")
438 #:phases
439 #~(modify-phases %standard-phases
440 (replace 'check
441 (lambda* (#:key tests? test-flags #:allow-other-keys)
442 (if tests?
443 (apply invoke "python" "-m" "django" "test" test-flags)
444 (format #t "test suite not run~%")))))))
445 (native-inputs
446 (list python-setuptools python-wheel))
447 (propagated-inputs
448 (list python-django python-stdnum))
449 (home-page "https://django-localflavor.readthedocs.io/en/latest/")
450 (synopsis "Country-specific Django helpers")
451 (description "Django-LocalFlavor is a collection of assorted pieces of code
452that are useful for particular countries or cultures.")
453 (license license:bsd-3)))
454
455(define-public python-django-simple-math-captcha
456 (package
457 (name "python-django-simple-math-captcha")
458 (version "2.0.0")
459 (home-page "https://github.com/alsoicode/django-simple-math-captcha")
460 (source (origin
461 (method git-fetch)
462 (uri (git-reference
463 (url home-page)
464 (commit version)))
465 (file-name (git-file-name name version))
466 (sha256
467 (base32
468 "1pqriqvg1bfx36p8hxzh47zl5qk911vgf3xaxfvhkjyi611rbxzy"))))
469 (build-system pyproject-build-system)
470 (arguments
471 (list
472 #:phases
473 '(modify-phases %standard-phases
474 (add-after 'unpack 'compatibility
475 (lambda _
476 (substitute* "test_simplemathcaptcha/form_tests.py"
477 (("label for=\"id_captcha_0\"") "label")
478 (("str\\(f\\)") "str(f.as_table())"))
479 (substitute* "simplemathcaptcha/widgets.py"
480 (("ugettext_lazy") "gettext_lazy"))))
481 (replace 'check
482 (lambda* (#:key tests? #:allow-other-keys)
483 (when tests?
484 (invoke "python" "runtests.py")))))))
485 (native-inputs
486 (list python-mock python-setuptools python-wheel))
487 (propagated-inputs
488 (list python-django python-six))
489 (synopsis "Easy-to-use math field/widget captcha for Django forms")
490 (description
491 "A multi-value-field that presents a human answerable question,
492with no settings.py configuration necessary, but instead can be configured
493with arguments to the field constructor.")
494 (license license:asl2.0)))
495
496(define-public python-django-classy-tags
497 (package
498 (name "python-django-classy-tags")
499 (version "4.1.0")
500 (source
501 (origin
502 (method git-fetch)
503 (uri (git-reference
504 (url "https://github.com/divio/django-classy-tags")
505 (commit version)))
506 (file-name (git-file-name name version))
507 (sha256
508 (base32 "10xl1knpvnfjlc5mm0lyy62di463nwcgikdr18bqb1gxipfk6br4"))))
509 (build-system pyproject-build-system)
510 (arguments
511 (list
512 #:phases
513 #~(modify-phases %standard-phases
514 (replace 'check
515 (lambda* (#:key tests? #:allow-other-keys)
516 (when tests?
517 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
518 (invoke "django-admin" "test" "tests"
519 "--pythonpath=.")))))))
520 (native-inputs (list python-setuptools))
521 (propagated-inputs (list python-django))
522 (home-page "https://github.com/divio/django-classy-tags")
523 (synopsis "Class based template tags for Django")
524 (description
525 "@code{django-classy-tags} is an approach at making writing template tags
526in Django easier, shorter and more fun. It provides an extensible argument
527parser which reduces most of the boiler plate code you usually have to write
528when coding custom template tags.")
529 (license license:bsd-3)))
530
531(define-public python-django-taggit
532 (package
533 (name "python-django-taggit")
534 (version "6.1.0")
535 (source
536 (origin
537 (method git-fetch)
538 (uri (git-reference
539 (url "https://github.com/jazzband/django-taggit")
540 (commit version)))
541 (file-name (git-file-name name version))
542 (sha256
543 (base32
544 "1i8an3wcl7nygl5f565jcpyhyws9gabawazggxpf6m3vklxn3cj0"))))
545 (build-system pyproject-build-system)
546 (arguments
547 '(#:phases
548 (modify-phases %standard-phases
549 (replace 'check
550 (lambda _
551 (invoke "python3" "-m" "django" "test" "--settings=tests.settings"))))))
552 (propagated-inputs
553 (list python-django))
554 (native-inputs
555 (list python-django-rest-framework
556 python-setuptools
557 python-wheel
558 tzdata-for-tests))
559 (home-page "https://github.com/jazzband/django-taggit")
560 (synopsis "Reusable Django application for simple tagging")
561 (description
562 "Django-taggit is a reusable Django application for simple tagging.")
563 (license license:bsd-3)))
564
565(define-public python-django-webtest
566 (package
567 (name "python-django-webtest")
568 (version "1.9.14")
569 (source
570 (origin
571 (method git-fetch)
572 (uri (git-reference
573 (url "https://github.com/django-webtest/django-webtest")
574 (commit version)))
575 (file-name (git-file-name name version))
576 (sha256
577 (base32 "1yndvjhccm6251cxl0y1rdx7k36b1q26d7rhz6vb6ajv3w68d8r7"))))
578 (build-system pyproject-build-system)
579 (arguments
580 (list
581 #:phases
582 #~(modify-phases %standard-phases
583 (replace 'check
584 (lambda* (#:key tests? #:allow-other-keys)
585 (when tests?
586 (with-directory-excursion "django_webtest_tests"
587 (setenv "DJANGO_SETTINGS_MODULE" "settings")
588 (invoke "python" "runtests.py")
589 (invoke "pytest" "test_pytest.py"))))))))
590 (native-inputs
591 (list python-pytest
592 python-pytest-django
593 python-setuptools
594 python-tzdata))
595 (propagated-inputs
596 (list python-webtest
597 python-django))
598 (home-page "https://github.com/django-webtest/django-webtest")
599 (synopsis "Integration of WebTest with Django")
600 (description
601 "This package provides an instant integration of Ian Bicking's WebTest with
602Django's testing framework.")
603 (license license:expat)))
604
605(define-public python-easy-thumbnails
606 (package
607 (name "python-easy-thumbnails")
608 (version "2.10.1")
609 (source
610 (origin
611 (method url-fetch)
612 (uri (pypi-uri "easy_thumbnails" version))
613 (sha256
614 (base32
615 "0bi25k1kf8gn954x6730cn76bidv7jdym8avmcsnqm47jgwsa2m5"))))
616 (build-system pyproject-build-system)
617 (arguments
618 (list #:test-flags '(list "--pyargs" "easy_thumbnails")))
619 (propagated-inputs
620 (list python-django python-pillow))
621 (native-inputs
622 (list python-pytest
623 python-pytest-django
624 python-setuptools
625 python-testfixtures
626 tzdata-for-tests))
627 (home-page "https://github.com/SmileyChris/easy-thumbnails")
628 (synopsis "Easy thumbnails for Django")
629 (description
630 "Easy thumbnails is a Django plugin to dynamically create thumbnails
631based on source images. Multiple thumbnails can be created from a single
632source image, using different options to control parameters like the image
633size and quality.")
634 (license license:bsd-3)))
635
636(define-public python-pytest-django
637 (package
638 (name "python-pytest-django")
639 (version "4.14.0")
640 (source
641 (origin
642 (method git-fetch)
643 (uri (git-reference
644 (url "https://github.com/pytest-dev/pytest-django")
645 (commit (string-append "v" version))))
646 (file-name (git-file-name name version))
647 (sha256
648 (base32 "14syhy27bqx5mlq7z7d0wvgq9mdpkmi7x71mlld4bhp7p2g8rh55"))))
649 (build-system pyproject-build-system)
650 (native-inputs
651 (list python-django-minimal
652 python-pytest-bootstrap
653 python-setuptools
654 python-setuptools-scm))
655 (home-page "https://pytest-django.readthedocs.io/")
656 (synopsis "Django plugin for Pytest")
657 (description "Pytest-django is a plugin for py.test that provides a set of
658useful tools for testing Django applications and projects.")
659 (license license:bsd-3)))
660
661(define-public python-django-haystack
662 (package
663 (name "python-django-haystack")
664 (version "3.3.0")
665 (source
666 (origin
667 (method url-fetch)
668 (uri (pypi-uri "django-haystack" version))
669 (sha256
670 (base32
671 "1arfl0y34nfvpzwiib6859g9154qqvdb97j09nhmsqh0h1myvkp3"))))
672 (build-system pyproject-build-system)
673 (arguments
674 (list
675 #:phases
676 #~(modify-phases %standard-phases
677 (replace 'check
678 (lambda* (#:key tests? #:allow-other-keys)
679 (when tests?
680 ;; Patch out tests for the abandoned "whoosh" project.
681 (delete-file-recursively "test_haystack/whoosh_tests")
682 (let ((port (open-file "test_haystack/settings.py" "a")))
683 (display "
684del HAYSTACK_CONNECTIONS[\"whoosh\"]
685del HAYSTACK_CONNECTIONS[\"filtered_whoosh\"]
686" port)
687 (close port))
688 (substitute* "test_haystack/test_management_commands.py"
689 (("whoosh") "solr"))
690 (invoke "python" "test_haystack/run_tests.py"))))
691 ;; Importing this module requires setting up a Django project.
692 (delete 'sanity-check))))
693 (propagated-inputs
694 (list python-django python-packaging))
695 ;; (inputs (list gdal)) ; it's optional, tests fail when provided
696 (native-inputs
697 (list python-dateutil
698 python-geopy
699 python-pysolr
700 python-requests
701 python-setuptools
702 python-setuptools-scm
703 tzdata-for-tests))
704 (home-page "https://haystacksearch.org/")
705 (synopsis "Pluggable search for Django")
706 (description "Haystack provides modular search for Django. It features a
707unified, familiar API that allows you to plug in different search backends
708(such as Solr, Elasticsearch, Whoosh, Xapian, etc.) without having to modify
709your code.")
710 (license license:bsd-3)))
711
712(define-public python-xapian-haystack
713 (package
714 (name "python-xapian-haystack")
715 (version "4.0.0")
716 (source
717 (origin
718 (method git-fetch)
719 (uri (git-reference
720 (url "https://github.com/notanumber/xapian-haystack")
721 (commit version)))
722 (file-name (git-file-name name version))
723 (sha256
724 (base32 "1gviamx1kqn18hpv2vgr15gj00iaflak5h7xir09fs39ncqvz3bp"))))
725 (build-system pyproject-build-system)
726 (arguments
727 ;; CI runs tests after copying them into django-haystack tests, see e.g.
728 ;; https://github.com/notanumber/xapian-haystack/blob/16fd168b704958056c581e86427358d1e732a39a/.github/workflows/test.yml#L89
729 (list
730 #:phases
731 #~(modify-phases %standard-phases
732 (add-after 'unpack 'fix-inmemory-db-handling
733 (lambda _
734 (substitute* "xapian_backend.py"
735 (("inmemory_open\\(\\)")
736 "WritableDatabase('', xapian.DB_BACKEND_INMEMORY)")
737 (("database.close\\(\\)")
738 "if not self.inmemory_db: database.close()"))))
739 ;; Raises django.core.exceptions.ImproperlyConfigured.
740 (delete 'sanity-check)
741 (replace 'check
742 (lambda* (#:key tests? #:allow-other-keys)
743 (when tests?
744 (setenv "PYTHONPATH" ".")
745 (setenv "DJANGO_SETTINGS_MODULE" "test_haystack.xapian_settings")
746 (with-directory-excursion "/tmp"
747 (invoke "tar" "xf" #$(package-source python-django-haystack)))
748 (invoke "cp" "xapian_backend.py"
749 "/tmp/django_haystack-3.3.0/haystack/backends/")
750 (invoke "cp" "-r"
751 "tests/xapian_settings.py"
752 "tests/xapian_tests"
753 "/tmp/django_haystack-3.3.0/test_haystack/")
754 (with-directory-excursion "/tmp/django_haystack-3.3.0"
755 (invoke "django-admin" "test" "test_haystack.xapian_tests"))))))))
756 (propagated-inputs
757 (list
758 python-django
759 python-django-haystack
760 python-filelock
761 python-xapian-bindings
762 xapian))
763 (native-inputs (list python-setuptools tzdata-for-tests))
764 (home-page "https://github.com/notanumber/xapian-haystack")
765 (synopsis "A Xapian backend for Haystack")
766 (description "This package provides a Xapian backend for Haystack.")
767 (license license:gpl2)))
768
769(define-public python-django-filter
770 (package
771 (name "python-django-filter")
772 (version "25.2")
773 (source (origin
774 (method url-fetch)
775 (uri (pypi-uri "django_filter" version))
776 (sha256
777 (base32
778 "08wgzqirabxzcdhh0wvv45hqr6dqxy3ifm7mjv86hi0zjd59h3kn"))))
779 (build-system pyproject-build-system)
780 (arguments
781 '(#:phases
782 (modify-phases %standard-phases
783 (replace 'check
784 (lambda* (#:key tests? #:allow-other-keys)
785 (when tests?
786 (invoke "python" "runtests.py")))))))
787 (native-inputs
788 (list python-django
789 python-django-rest-framework
790 python-flit-core
791 tzdata-for-tests))
792 (home-page "https://django-filter.readthedocs.io/en/latest/")
793 (synopsis "Reusable Django application to filter querysets dynamically")
794 (description
795 "Django-filter is a generic, reusable application to alleviate writing
796some of the more mundane bits of view code. Specifically, it allows users to
797filter down a queryset based on a model’s fields, displaying the form to let
798them do this.")
799 (license license:bsd-3)))
800
801(define-public python-django-allauth
802 (package
803 (name "python-django-allauth")
804 (version "65.18.0")
805 (source
806 (origin
807 (method git-fetch)
808 (uri (git-reference
809 (url "https://codeberg.org/allauth/django-allauth")
810 (commit version)))
811 (file-name (git-file-name name version))
812 (sha256
813 (base32 "171z6v1nd7v0y0ar87ixibci9zpx0blmrfqbnvp29p2x57dkhi9r"))))
814 (build-system pyproject-build-system)
815 (arguments
816 (list
817 ;; tests: 2050 passed, 17 warnings, 6 subtests passed
818 #:phases
819 #~(modify-phases %standard-phases
820 (add-after 'unpack 'include-package-data
821 (lambda _
822 ;; setuptools-scm works only with VCS tracked files, and any non
823 ;; "*.py" data files are ignored, see:
824 ;; allauth/django-allauth#4705 and guix/guix#8975.
825 (substitute* "pyproject.toml"
826 (("\"\\*\\.mo\"" all)
827 (string-join
828 (list all "'*.js'" "'*.html'" "'*.md'" "'*.txt'"
829 "'*.yaml'" "'*.xml'")
830 ", ")))))
831 (add-before 'check 'remove-local-source
832 (lambda _
833 ;; To force tests using installed package.
834 (delete-file-recursively "allauth"))))))
835 (propagated-inputs
836 (list python-asgiref
837 python-django
838 ;; [optional]
839 python-fido2
840 python-oauthlib
841 python-openid
842 python-pyjwt
843 python-python3-saml ;TODO: rename to Guix name format
844 python-pyyaml
845 python-qrcode
846 python-requests))
847 (inputs (list xmlsec-openssl))
848 (native-inputs
849 (list tzdata-for-tests
850 python-django-ninja
851 python-django-rest-framework
852 python-oauthlib
853 python-psycopg2
854 python-pytest
855 python-pytest-asyncio
856 python-pytest-django
857 python-setuptools))
858 (home-page "https://codeberg.org/allauth/django-allauth")
859 (synopsis "Set of Django applications addressing authentication")
860 (description
861 "Integrated set of Django applications addressing authentication,
862registration, account management as well as 3rd party (social)
863account authentication.")
864 (license license:expat)))
865
866(define-public python-django-csp
867 (package
868 (name "python-django-csp")
869 (version "4.0")
870 (source
871 (origin
872 (method url-fetch)
873 (uri (pypi-uri "django_csp" version))
874 (sha256
875 (base32 "0cr8f4lbv8y32gfgnw4b6cnvi8k15ggpi49jmlyhmciff2xi0w5j"))))
876 (build-system pyproject-build-system)
877 (arguments
878 (list
879 #:phases
880 #~(modify-phases %standard-phases
881 (add-before 'check 'fix-tests
882 (lambda _
883 (substitute* "pyproject.toml"
884 (("--ruff --ruff-format") ""))
885 (setenv "PYTHONPATH" "."))))))
886 (propagated-inputs (list python-django python-packaging))
887 (native-inputs (list python-jinja2
888 python-pytest
889 python-pytest-django
890 python-setuptools))
891 (home-page "https://django-csp.readthedocs.io/en/latest/")
892 (synopsis "Django Content Security Policy support.")
893 (description "This package adds support for Content-Security-Policy headers
894to Django.")
895 (license license:bsd-3)))
896
897(define-public python-django-template-partials
898 (package
899 (name "python-django-template-partials")
900 (version "25.2")
901 (source
902 (origin
903 (method url-fetch)
904 (uri (pypi-uri "django_template_partials" version))
905 (sha256
906 (base32 "1xmfjqb4alwqky0jmq03292y7m7w13mmh1yz0ayavlym2954w12m"))))
907 (build-system pyproject-build-system)
908 (arguments
909 (list
910 #:phases #~(modify-phases %standard-phases
911 (replace 'check
912 (lambda* (#:key tests? #:allow-other-keys)
913 (when tests?
914 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
915 (invoke "django-admin" "test" "--pythonpath=.")))))))
916 (propagated-inputs (list python-django))
917 (native-inputs (list python-flit-core))
918 (home-page "https://github.com/carltongibson/django-template-partials")
919 (synopsis
920 "Reusable named inline-partials for the Django Template Language")
921 (description
922 "This package provides template partials for Django, offering fragment
923reuse, integration with the template loader and inline output.")
924 (license license:expat)))
925
926(define-public python-django-debug-toolbar
927 (package
928 (name "python-django-debug-toolbar")
929 (version "6.0.0")
930 (source
931 (origin
932 (method git-fetch)
933 (uri (git-reference
934 (url "https://github.com/jazzband/django-debug-toolbar")
935 (commit version)))
936 (file-name (git-file-name name version))
937 (sha256
938 (base32
939 "0rh0bkbn3z8njmaca0jjby4l9axmbgmcr34pf4sdjk99l55azmv4"))))
940 (build-system pyproject-build-system)
941 (arguments
942 (list
943 #:phases
944 '(modify-phases %standard-phases
945 (add-after 'unpack 'disable-bad-tests
946 (lambda _
947 (substitute* "tests/test_integration.py"
948 (("def test_cache_page")
949 "def _test_cache_page"))))
950 (replace 'check
951 (lambda* (#:key tests? #:allow-other-keys)
952 (when tests?
953 (invoke "make" "test")))))))
954 (propagated-inputs
955 (list python-sqlparse python-django))
956 (native-inputs
957 (list python-django-csp
958 python-django-template-partials
959 python-hatchling
960 python-html5lib
961 python-setuptools
962 tzdata-for-tests))
963 (home-page "https://github.com/jazzband/django-debug-toolbar")
964 (synopsis "Toolbar to help with developing Django applications")
965 (description
966 "This package provides a configurable set of panels that display
967information about the current request and response as a toolbar on the
968rendered page.")
969 (license license:bsd-3)))
970
971(define-public python-django-gravatar2
972 (package
973 (name "python-django-gravatar2")
974 (version "1.4.5")
975 (source
976 (origin
977 (method git-fetch)
978 (uri (git-reference
979 (url "https://github.com/twaddington/django-gravatar")
980 (commit version)))
981 (file-name (git-file-name name version))
982 (sha256
983 (base32 "0brh1176gx758cimkz36g8v760a1hadxspqanp8kc59kvx50qvm0"))))
984 (build-system pyproject-build-system)
985 (arguments
986 (list
987 #:phases
988 #~(modify-phases %standard-phases
989 (replace 'check
990 (lambda* (#:key tests? #:allow-other-keys)
991 (when tests?
992 (with-directory-excursion "example_project"
993 (invoke "python" "./manage.py" "test"
994 "-k" "not test_has_gravatar"
995 "django_gravatar"))))))))
996 (native-inputs (list python-setuptools))
997 (inputs (list python-django))
998 (home-page "https://github.com/twaddington/django-gravatar")
999 (synopsis "Gravatar support for Django, improved version")
1000 (description
1001 "Essential Gravatar support for Django. Features helper methods,
1002templatetags and a full test suite.")
1003 (license license:expat)))
1004
1005(define-public python-django-jinja
1006 (package
1007 (name "python-django-jinja")
1008 (properties '((commit . "db07311d9693ffcd42ec34f9ce7bcab861b81d0f")
1009 (revision . "0")))
1010 (version (git-version "2.11.0"
1011 (assoc-ref properties 'revision)
1012 (assoc-ref properties 'commit)))
1013 (source
1014 (origin
1015 (method git-fetch)
1016 (uri (git-reference
1017 (url "https://github.com/niwinz/django-jinja")
1018 (commit (assoc-ref properties 'commit))))
1019 (file-name (git-file-name name version))
1020 (sha256
1021 (base32
1022 "1iqqqbvi0w9vlbgq3j8wi1z2ln92zri1abc9b951yy5sp47xk4vh"))))
1023 (build-system pyproject-build-system)
1024 (arguments
1025 (list
1026 #:test-backend #~'custom
1027 #:test-flags #~(list "testing/runtests.py")))
1028 (propagated-inputs
1029 (list python-django python-jinja2 python-pytz python-django-pipeline))
1030 (native-inputs
1031 (list python-setuptools tzdata-for-tests))
1032 (home-page "https://niwi.nz/django-jinja/latest/")
1033 (synopsis "Simple jinja2 templating backend for Django")
1034 (description
1035 "This package provides a templating backend for Django, using Jinja2. It
1036provides certain advantages over the builtin Jinja2 backend in Django, for
1037example, explicit calls to callables from templates and better performance.")
1038 (license license:bsd-3)))
1039
1040(define-public python-dj-database-url
1041 (package
1042 (name "python-dj-database-url")
1043 (version "3.0.1")
1044 (source (origin
1045 (method url-fetch)
1046 (uri (pypi-uri "dj_database_url" version))
1047 (sha256
1048 (base32
1049 "1y7ghizjni3imbmqh63mra8pcvqzr5q0hma1ijzwd3w8zcg9d549"))))
1050 (build-system pyproject-build-system)
1051 (native-inputs (list python-pytest python-setuptools python-wheel))
1052 (propagated-inputs
1053 (list python-django))
1054 (home-page "https://github.com/jazzband/dj-database-url")
1055 (synopsis "Use Database URLs in your Django Application")
1056 (description
1057 "This simple Django utility allows you to utilize the 12factor inspired
1058DATABASE_URL environment variable to configure your Django application.
1059
1060The dj_database_url.config method returns a Django database connection
1061dictionary, populated with all the data specified in your URL. There is also a
1062conn_max_age argument to easily enable Django’s connection pool.")
1063 (license license:bsd-3)))
1064
1065(define-public python-dj-email-url
1066 (package
1067 (name "python-dj-email-url")
1068 (version "1.0.6")
1069 (source (origin
1070 (method url-fetch)
1071 (uri (pypi-uri "dj-email-url" version))
1072 (sha256
1073 (base32
1074 "16k91rvd9889xxrrf84a3zb0jpinizhfqdmafn54zxa8kqrf7zsm"))))
1075 (build-system pyproject-build-system)
1076 (arguments
1077 (list #:tests? #f)) ;XXX: no tests in PyPI, check in git
1078 (native-inputs (list python-setuptools))
1079 (home-page "https://github.com/migonzalvar/dj-email-url")
1080 (synopsis "Configure email settings from URLs")
1081 (description
1082 "This package provides a facility for configuring Django email backend
1083settings from URLs.")
1084 (license (list license:bsd-2 ;source code
1085 license:cc-by4.0 ;documentation
1086 license:cc0)))) ;configuration and data
1087
1088(define-public python-dj-search-url
1089 ;; XXX: No updates since 2012, consider to remove in the next refresh cycle.
1090 (package
1091 (name "python-dj-search-url")
1092 (version "0.1")
1093 (source (origin
1094 (method url-fetch)
1095 (uri (pypi-uri "dj-search-url" version))
1096 (sha256
1097 (base32
1098 "0h7vshhglym6af2pplkyivk6y0g0ncq0xpdzi88kq2sha9c1lka2"))))
1099 (build-system pyproject-build-system)
1100 (arguments
1101 (list #:tests? #f))
1102 (native-inputs (list python-setuptools))
1103 (home-page "https://github.com/dstufft/dj-search-url")
1104 (synopsis "Configure Haystack search from URLs")
1105 (description
1106 "This package provides a facility for configuring Django Haystack
1107applications with a @var{SEARCH_URL} variable.")
1108 (license license:bsd-2)))
1109
1110(define-public python-django-picklefield
1111 (package
1112 (name "python-django-picklefield")
1113 (version "3.3.0")
1114 (source
1115 (origin
1116 (method git-fetch) ; no tests in PyPI
1117 (uri (git-reference
1118 (url "https://github.com/gintas/django-picklefield")
1119 (commit (string-append "v" version))))
1120 (file-name (git-file-name name version))
1121 (sha256
1122 (base32
1123 "19qiyb3i9s72qanxzrgy1a10707138zq8sclhdfn4zpnqykaqzpw"))))
1124 (build-system pyproject-build-system)
1125 (arguments
1126 (list
1127 #:phases #~(modify-phases %standard-phases
1128 (replace 'check
1129 (lambda* (#:key tests? #:allow-other-keys)
1130 (when tests?
1131 (invoke "python" "-m" "django" "test" "-v2"
1132 "--settings=tests.settings")))))))
1133 (native-inputs (list python-setuptools python-wheel))
1134 (propagated-inputs (list python-django))
1135 (home-page "https://github.com/gintas/django-picklefield")
1136 (synopsis "Pickled object field for Django")
1137 (description "Pickled object field for Django")
1138 (license license:expat)))
1139
1140(define-public python-django-contact-form
1141 (package
1142 (name "python-django-contact-form")
1143 (version "5.2.0")
1144 (source (origin
1145 (method url-fetch)
1146 (uri (pypi-uri "django_contact_form" version))
1147 (sha256
1148 (base32
1149 "091nji94c6d2n8zfpsfhwdv417ligi1hfwr4vvydbggf3s4q392n"))))
1150 (build-system pyproject-build-system)
1151 (arguments
1152 (list
1153 #:phases #~(modify-phases %standard-phases
1154 (replace 'check
1155 (lambda* (#:key tests? #:allow-other-keys)
1156 (when tests?
1157 ;; This file contains a single test that requires
1158 ;; python-akismet (not yet packaged).
1159 (delete-file "tests/test_akismet_integration.py")
1160 (setenv "DJANGO_SETTINGS_MODULE" "tests.test_settings")
1161 (invoke "django-admin" "test" "--pythonpath=.")))))))
1162 (native-inputs
1163 (list python-pdm-backend python-tzdata))
1164 (propagated-inputs
1165 (list python-django))
1166 (home-page "https://github.com/ubernostrum/django-contact-form")
1167 (synopsis "Contact form for Django")
1168 (description
1169 "This application provides simple, extensible contact-form functionality
1170for Django sites.")
1171 (license license:bsd-3)))
1172
1173(define-public python-django-mailer
1174 (package
1175 (name "python-django-mailer")
1176 ;; Include switching from lockfile to filelock and other fixes.
1177 (properties '((commit . "e350fb04eec052a7ad27aee310e6d4073012ca2f")
1178 (revision . "0")))
1179 (version (git-version "2.3.2"
1180 (assoc-ref properties 'revision)
1181 (assoc-ref properties 'commit)))
1182 (source
1183 (origin
1184 (method git-fetch)
1185 (uri (git-reference
1186 (url "https://github.com/pinax/django-mailer")
1187 (commit (assoc-ref properties 'commit))))
1188 (file-name (git-file-name name version))
1189 (sha256
1190 (base32 "19d8asqai0sxn0y0bzqz03hgm8rzl95rmp787y3ps2lsm4c1an3y"))))
1191 (build-system pyproject-build-system)
1192 (native-inputs
1193 (list python-pytest
1194 python-pytest-django
1195 python-setuptools))
1196 (propagated-inputs
1197 (list python-django
1198 python-filelock-next))
1199 (home-page "https://github.com/pinax/django-mailer")
1200 (synopsis "Mail queuing and management for Django")
1201 (description
1202 "This is a reusable Django application for queuing the sending of email.
1203It works by storing email in the database for later sending.")
1204 (license license:expat)))
1205
1206;; A bare minimal package, mainly to use in tests and reduce closure size.
1207;; Tests are left out in the main package to slim down native-inputs and
1208;; propagated-inputs.
1209(define-public python-django-minimal
1210 (package/inherit python-django
1211 (name "python-django-minimal")
1212 (arguments (list #:tests? #f))
1213 (native-inputs (list python-setuptools))
1214 (propagated-inputs (list python-asgiref python-sqlparse))))
1215
1216(define-public python-django-contrib-comments
1217 (package
1218 (name "python-django-contrib-comments")
1219 (properties '((commit . "4ad4c701f2a17ca62f040e94d73c2eb08af320e9")
1220 (revision . "0")))
1221 (version (git-version "2.2.0"
1222 (assoc-ref properties 'revision)
1223 (assoc-ref properties 'commit)))
1224 (source
1225 (origin
1226 (method git-fetch)
1227 (uri (git-reference
1228 (url "https://github.com/django/django-contrib-comments")
1229 (commit (assoc-ref properties 'commit))))
1230 (file-name (git-file-name name version))
1231 (sha256
1232 (base32 "0rr8vxj8q93b1a8s69a8big0r5h77liwi8ldc7ssk2bfwqb7gh26"))))
1233 (build-system pyproject-build-system)
1234 (arguments
1235 (list
1236 #:test-backend #~'custom
1237 #:test-flags #~(list "tests/runtests.py")))
1238 (native-inputs (list python-setuptools tzdata-for-tests))
1239 (propagated-inputs (list python-django))
1240 (home-page "https://github.com/django/django-contrib-comments")
1241 (synopsis "Comments framework")
1242 (description
1243 "Django used to include a comments framework; since Django 1.6 it's been
1244separated to a separate project. This is that project. This framework can be
1245used to attach comments to any model, so you can use it for comments on blog
1246entries, photos, book chapters, or anything else.")
1247 (license license:bsd-3)))
1248
1249(define-public python-django-ninja
1250 (package
1251 (name "python-django-ninja")
1252 (version "1.5.1")
1253 (source (origin
1254 (method url-fetch)
1255 (uri (pypi-uri "django_ninja" version))
1256 (sha256
1257 (base32
1258 "1iqp3c4gxvskw1xdi9bqzpz2rw6779ydkd6czp3382fncj5adkba"))))
1259 (build-system pyproject-build-system)
1260 ;; tests: 670 passed, 1 skipped, 53 warnings
1261 (propagated-inputs
1262 (list python-django python-pydantic))
1263 (native-inputs
1264 (list python-flit-core
1265 python-psycopg2
1266 python-pytest
1267 python-pytest-asyncio
1268 python-pytest-django))
1269 (home-page "https://django-ninja.rest-framework.com")
1270 (synopsis "REST framework for Django")
1271 (description
1272 "Django Ninja is a web framework for building APIs with Django
1273and Python type hints. It is designed to be fast and easy to use thanks
1274to asyncio and Pydantic.")
1275 (license license:expat)))
1276
1277(define-public python-django-htmx
1278 (package
1279 (name "python-django-htmx")
1280 (version "1.23.2")
1281 (source (origin
1282 (method git-fetch) ; PyPI does not include settings.py for tests
1283 (uri (git-reference
1284 (url "https://github.com/adamchainz/django-htmx")
1285 (commit version)))
1286 (file-name (git-file-name name version))
1287 (sha256
1288 (base32
1289 "0gr6zahrqvx8sjsy7wr1k7rgavz7bjx32kky4900gff70wrqbmvy"))))
1290 (build-system pyproject-build-system)
1291 (arguments
1292 (list
1293 #:phases
1294 #~(modify-phases %standard-phases
1295 (replace 'check
1296 (lambda* (#:key tests? #:allow-other-keys)
1297 (when tests?
1298 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
1299 (invoke "django-admin" "test" "tests"
1300 "--pythonpath=.")))))))
1301 (propagated-inputs (list python-asgiref python-django))
1302 (native-inputs (list python-pytest python-setuptools python-wheel))
1303 (home-page "https://django-htmx.readthedocs.io/en/latest/")
1304 (synopsis "Extensions for using Django with htmx")
1305 (description "This package provides a Django extension to work with
1306@url{https://htmx.org/,htmx}.")
1307 (license license:expat)))
1308
1309(define-public python-django-pipeline
1310 (package
1311 (name "python-django-pipeline")
1312 (version "4.1.0")
1313 (source
1314 (origin
1315 (method url-fetch)
1316 (uri (pypi-uri "django_pipeline" version))
1317 (sha256
1318 (base32
1319 "1d12wzqvdnc3hk3s5yz9jd4xqhc75wbfsl6xdhwphnr1dzgpj7da"))))
1320 (build-system pyproject-build-system)
1321 (arguments
1322 (list
1323 #:phases
1324 '(modify-phases %standard-phases
1325 (add-after 'unpack 'patch-source
1326 (lambda _
1327 (substitute* "tests/tests/test_compiler.py"
1328 (("\\/usr\\/bin\\/env")
1329 (which "env")))))
1330 (replace 'check
1331 (lambda* (#:key tests? #:allow-other-keys)
1332 (when tests?
1333 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
1334 (invoke "django-admin" "test" "tests"
1335 "--pythonpath=.")))))))
1336 (propagated-inputs
1337 (list python-jsmin
1338 python-css-html-js-minify))
1339 (native-inputs
1340 (list python-django
1341 python-setuptools
1342 python-setuptools-scm))
1343 (home-page
1344 "https://github.com/jazzband/django-pipeline")
1345 (synopsis "Asset packaging library for Django")
1346 (description
1347 "Pipeline is an asset packaging library for Django, providing both CSS
1348and JavaScript concatenation and compression, built-in JavaScript template
1349support, and optional data-URI image and font embedding.")
1350 (license license:expat)))
1351
1352(define-public python-django-cors-headers
1353 (package
1354 (name "python-django-cors-headers")
1355 (version "4.7.0")
1356 (source (origin
1357 (method git-fetch) ; PyPI does not include settings.py for tests
1358 (uri (git-reference
1359 (url "https://github.com/adamchainz/django-cors-headers")
1360 (commit version)))
1361 (file-name (git-file-name name version))
1362 (sha256
1363 (base32
1364 "0j5h31wfndkva5a6m6zw67yq3sbndl0zq9w4w3v7xx15dd84g9y4"))))
1365 (build-system pyproject-build-system)
1366 (arguments
1367 (list
1368 #:phases
1369 #~(modify-phases %standard-phases
1370 (replace 'check
1371 (lambda* (#:key tests? #:allow-other-keys)
1372 (when tests?
1373 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
1374 (invoke "django-admin" "test" "tests"
1375 "--pythonpath=.")))))))
1376 (propagated-inputs (list python-asgiref python-django))
1377 (native-inputs (list python-pytest python-setuptools python-wheel))
1378 (home-page "https://github.com/adamchainz/django-cors-headers")
1379 (synopsis "Django application for handling headers required for CORS")
1380 (description
1381 "@code{django-cors-headers} is a Django application for handling the
1382server headers required for Cross-Origin Resource Sharing (CORS).")
1383 (license license:expat)))
1384
1385(define-public python-django-redis
1386 (package
1387 (name "python-django-redis")
1388 (version "7.0.0")
1389 (source
1390 (origin
1391 (method git-fetch)
1392 (uri (git-reference
1393 (url "https://github.com/niwibe/django-redis")
1394 (commit version)))
1395 (file-name (git-file-name name version))
1396 (sha256
1397 (base32 "1wkq1l39hxarimkyqhlhrrib1iagy1wlr2d7nm9mn9xlqqv630z1"))))
1398 (build-system pyproject-build-system)
1399 (arguments
1400 (list
1401 #:phases
1402 #~(modify-phases %standard-phases
1403 (add-before 'check 'start-redis
1404 (lambda* (#:key tests? #:allow-other-keys)
1405 (when tests?
1406 (invoke "redis-server" "--daemonize" "yes")))))))
1407 (native-inputs
1408 (list python-fakeredis
1409 python-hiredis
1410 python-mock
1411 python-msgpack
1412 python-pytest
1413 python-pytest-django
1414 python-pytest-mock
1415 python-pytest-xdist
1416 python-setuptools
1417 redis))
1418 (propagated-inputs
1419 (list python-django
1420 python-redis
1421 ;; [optional]
1422 python-lz4
1423 python-msgpack
1424 python-pyzstd))
1425 (home-page "https://github.com/niwibe/django-redis")
1426 (synopsis "Full featured redis cache backend for Django")
1427 (description
1428 "This package provides a full featured Redis cache backend for Django.")
1429 (license license:bsd-3)))
1430
1431(define-public python-django-rq
1432 (package
1433 (name "python-django-rq")
1434 (version "3.2.2")
1435 (source
1436 (origin
1437 (method git-fetch)
1438 (uri (git-reference
1439 (url "https://github.com/ui/django-rq")
1440 (commit (string-append "v" version))))
1441 (file-name (git-file-name name version))
1442 (sha256
1443 (base32 "0zdzbg7ld7325x5c8rl9n08w5n1srxfrwn54gfm8b04k4hbw9axw"))))
1444 (build-system pyproject-build-system)
1445 (arguments
1446 (list
1447 #:phases
1448 #~(modify-phases %standard-phases
1449 (add-before 'check 'start-redis
1450 (lambda* (#:key tests? #:allow-other-keys)
1451 (when tests?
1452 (invoke "redis-server" "--daemonize" "yes")))))))
1453 (native-inputs
1454 (list python-django-redis
1455 python-pytest
1456 python-pytest-django
1457 python-rq-scheduler
1458 python-hatchling
1459 redis
1460 tzdata-for-tests))
1461 (propagated-inputs
1462 (list python-django
1463 python-redis
1464 python-rq
1465 python-pyaml))
1466 (home-page "https://github.com/ui/django-rq")
1467 (synopsis "Django integration with RQ")
1468 (description
1469 "Django integration with RQ, a Redis based Python queuing library.
1470Django-RQ is a simple app that allows you to configure your queues in django's
1471settings.py and easily use them in your project.")
1472 (license license:expat)))
1473
1474(define-public python-django-q
1475 (package
1476 (name "python-django-q")
1477 (version "1.3.9")
1478 (source
1479 (origin
1480 (method url-fetch)
1481 (uri (pypi-uri "django-q" version))
1482 (sha256
1483 (base32 "06x9l2j54km0nww71dv22ndgiax23kd7cwx5dafbzam3199lsssw"))))
1484 (build-system pyproject-build-system)
1485 (arguments
1486 (list
1487 ;; FIXME: Tests require disque, Redis, MongoDB, Docker.
1488 #:tests? #f))
1489 (native-inputs
1490 (list python-setuptools
1491 python-wheel))
1492 (propagated-inputs
1493 (list python-arrow
1494 python-blessed
1495 python-django
1496 python-django-picklefield))
1497 (home-page "https://django-q.readthedocs.io/")
1498 (synopsis "Multiprocessing distributed task queue for Django")
1499 (description
1500 "Django Q is a native Django task queue, scheduler and worker application
1501using Python multiprocessing.")
1502 (license license:expat)))
1503
1504(define-public python-django-q2
1505 (package
1506 (name "python-django-q2")
1507 (version "1.11.1")
1508 (source
1509 (origin
1510 (method url-fetch)
1511 (uri (pypi-uri "django_q2" version))
1512 (sha256
1513 (base32 "0rvfhrvvc7cmxnqjj21rln0scgdn9qy78ax201pg564h3ybay334"))))
1514 (build-system pyproject-build-system)
1515 (arguments (list #:tests? #f)) ;XXX: tests failed to find django_q2
1516 (native-inputs
1517 (list python-uv-build))
1518 (propagated-inputs
1519 (list python-django
1520 python-django-picklefield))
1521 (home-page "https://django-q2.readthedocs.org")
1522 (synopsis "Multiprocessing distributed task queue for Django")
1523 (description
1524 "This package provides a multiprocessing distributed task queue for
1525Django. Django Q2 is a fork of Django Q with the new updated version of
1526Django Q, dependencies updates, docs updates and several bug fixes.")
1527 (license license:expat)))
1528
1529(define-public python-django-q-sentry
1530 (package
1531 (name "python-django-q-sentry")
1532 (version "0.1.6")
1533 (source
1534 (origin
1535 (method git-fetch)
1536 (uri (git-reference
1537 (url "https://github.com/danielwelch/django-q-sentry")
1538 ;; There are no tags.
1539 (commit "6ed0b372c502c18101c7b77dce162dcf2262c7bb")))
1540 (file-name (git-file-name name version))
1541 (sha256
1542 (base32 "0c7rypsfax1l1j587p4cvcypa7if3vcyz2l806s6z27ajz0bz3v4"))))
1543 (build-system pyproject-build-system)
1544 (arguments
1545 (list
1546 #:tests? #f ; no tests.
1547 #:phases
1548 #~(modify-phases %standard-phases
1549 (add-after 'unpack 'use-poetry-core
1550 (lambda _
1551 ;; Patch to use the core poetry API.
1552 (substitute* "pyproject.toml"
1553 (("poetry.masonry.api") "poetry.core.masonry.api")))))))
1554 (propagated-inputs (list python-sentry-sdk))
1555 (native-inputs (list python-poetry-core python-setuptools))
1556 (home-page "https://django-q.readthedocs.org")
1557 (synopsis "Sentry support plugin for Django Q")
1558 (description "This package provides a Sentry support plugin for Django Q.")
1559 (license license:expat)))
1560
1561(define-public python-django-q-rollbar
1562 (package
1563 (name "python-django-q-rollbar")
1564 (version "0.1.3")
1565 (source
1566 (origin
1567 (method url-fetch)
1568 (uri (pypi-uri "django-q-rollbar" version))
1569 (sha256
1570 (base32 "0jzf84h4vr335ppp7x4d3pm04dlz8b75w0bswyynqzjhjji6vpm4"))))
1571 (build-system pyproject-build-system)
1572 (arguments
1573 (list
1574 ;; XXX: No tests in Pypi archive, unclear how to get it from git.
1575 #:tests? #f
1576 #:phases
1577 #~(modify-phases %standard-phases
1578 (add-after 'unpack 'use-poetry-core
1579 (lambda _
1580 ;; Patch to use the core poetry API.
1581 (substitute* "pyproject.toml"
1582 (("poetry.masonry.api") "poetry.core.masonry.api"))))
1583 (add-after 'unpack 'relax-requirements
1584 (lambda _
1585 (substitute* "pyproject.toml"
1586 (("rollbar = .*") "rollbar = \"^1\"")))))))
1587 (propagated-inputs (list python-rollbar python-requests))
1588 (native-inputs (list python-poetry-core python-setuptools))
1589 (home-page "https://django-q.readthedocs.org")
1590 (synopsis "Rollbar support plugin for Django Q")
1591 (description
1592 "This package provides a Rollbar support plugin for Django Q.")
1593 (license license:expat)))
1594
1595(define-public python-django-sortedm2m
1596 (package
1597 (name "python-django-sortedm2m")
1598 (version "4.0.0")
1599 (source (origin
1600 (method git-fetch)
1601 (uri (git-reference
1602 (url "https://github.com/jazzband/django-sortedm2m")
1603 (commit version)))
1604 (file-name (git-file-name name version))
1605 (sha256
1606 (base32
1607 "13sm7axrmk60ai8jcd17x490yhg0svdmfj927vvfkq4lszmc5g96"))))
1608 (build-system pyproject-build-system)
1609 ;; Tests are disable because they need a live instance of PostgreSQL.
1610 (arguments (list #:tests? #false))
1611 (propagated-inputs
1612 (list python-django python-psycopg2))
1613 (native-inputs (list python-setuptools python-wheel))
1614 (home-page "https://github.com/jazzband/django-sortedm2m")
1615 (synopsis "Drop-in replacement for django's own ManyToManyField")
1616 (description
1617 "Sortedm2m is a drop-in replacement for django's own ManyToManyField.
1618The provided SortedManyToManyField behaves like the original one but remembers
1619the order of added relations.")
1620 (license license:bsd-3)))
1621
1622(define-public python-django-appconf
1623 (package
1624 (name "python-django-appconf")
1625 (version "1.1.0")
1626 (source (origin
1627 (method url-fetch)
1628 (uri (pypi-uri "django-appconf" version))
1629 (sha256
1630 (base32
1631 "1r23cb8g680p4lc8q4gikarcn1y0x5x4whw9w4gg58425wvsvklz"))))
1632 (build-system pyproject-build-system)
1633 (arguments
1634 (list
1635 #:phases #~(modify-phases %standard-phases
1636 (replace 'check
1637 (lambda* (#:key tests? #:allow-other-keys)
1638 (when tests?
1639 (setenv "DJANGO_SETTINGS_MODULE" "tests.test_settings")
1640 (invoke "django-admin" "test" "--pythonpath=.")))))))
1641 (native-inputs (list python-setuptools python-wheel))
1642 (propagated-inputs
1643 (list python-django))
1644 (home-page "https://github.com/django-compressor/django-appconf")
1645 (synopsis "Handle configuration defaults of packaged Django apps")
1646 (description
1647 "This app precedes Django's own AppConfig classes that act as \"objects
1648[to] store metadata for an application\" inside Django's app loading mechanism.
1649In other words, they solve a related but different use case than
1650django-appconf and can't easily be used as a replacement. The similarity in
1651name is purely coincidental.")
1652 (license license:bsd-3)))
1653
1654(define-public python-django-statici18n
1655 (package
1656 (name "python-django-statici18n")
1657 (version "2.6.0")
1658 (home-page "https://github.com/zyegfryed/django-statici18n")
1659 (source (origin
1660 (method git-fetch)
1661 (uri (git-reference
1662 (url home-page)
1663 (commit (string-append "v" version))))
1664 (file-name (git-file-name name version))
1665 (sha256
1666 (base32
1667 "13caylidzlsb25gihc6xyqfzmdikj240kqvbdb1hn3h40ky4alhv"))))
1668 (build-system pyproject-build-system)
1669 (arguments
1670 (list
1671 #:phases
1672 '(modify-phases %standard-phases
1673 (replace 'check
1674 (lambda* (#:key tests? #:allow-other-keys)
1675 (when tests?
1676 (setenv "PYTHONPATH" "./tests/test_project")
1677 (setenv "DJANGO_SETTINGS_MODULE" "project.settings")
1678 (invoke "pytest" "-vv")))))))
1679 (native-inputs
1680 (list python-pytest python-pytest-django python-setuptools python-wheel))
1681 (propagated-inputs
1682 (list python-django python-django-appconf))
1683 (synopsis "Generate JavaScript catalog to static files")
1684 (description
1685 "A Django app that provides helper for generating JavaScript catalog to
1686static files.")
1687 (license license:bsd-3)))
1688
1689;; This is a fork of the now unmaintained django-tagging package.
1690(define-public python-django-tagging
1691 (package
1692 (name "python-django-tagging")
1693 (version "0.5.1")
1694 (source
1695 (origin
1696 (method git-fetch)
1697 (uri (git-reference
1698 (url "https://github.com/jazzband/django-tagging")
1699 (commit version)))
1700 (file-name (git-file-name name version))
1701 (sha256
1702 (base32
1703 "1hyh0admdy7yvdnv0sr3lkmi7yw9qhk1y8403g7ijb8wf9psqc6s"))))
1704 (build-system pyproject-build-system)
1705 (arguments
1706 (list
1707 ;; 6 of 75 tests fail with unclear an error.
1708 #:tests? #false
1709 #:phases
1710 '(modify-phases %standard-phases
1711 (replace 'check
1712 (lambda* (#:key tests? #:allow-other-keys)
1713 (when tests?
1714 (setenv "DJANGO_SETTINGS_MODULE" "tagging.tests.settings")
1715 (invoke "django-admin" "test" "--pythonpath=.")))))))
1716 (inputs
1717 (list python-django))
1718 (native-inputs (list python-setuptools python-wheel tzdata-for-tests))
1719 (home-page "https://github.com/jazzband/django-tagging")
1720 (synopsis "Generic tagging application for Django")
1721 (description "This package provides a generic tagging application for
1722Django projects, which allows association of a number of tags with any
1723@code{Model} instance and makes retrieval of tags simple.")
1724 (license license:bsd-3)))
1725
1726(define-public python-django-rest-framework
1727 (package
1728 (name "python-django-rest-framework")
1729 (version "3.16.1")
1730 (source
1731 (origin
1732 (method git-fetch)
1733 (uri (git-reference
1734 (url "https://github.com/encode/django-rest-framework")
1735 (commit version)))
1736 (file-name (git-file-name name version))
1737 (sha256
1738 (base32
1739 "01i2p1mh48bkxhggvfh6j11rh9zrgw4w6fr78msgrdw6bdjf4fwj"))))
1740 (build-system pyproject-build-system)
1741 (arguments
1742 '(#:phases
1743 (modify-phases %standard-phases
1744 (replace 'check
1745 (lambda* (#:key tests? inputs #:allow-other-keys)
1746 (if tests?
1747 (invoke "python" "runtests.py")
1748 (format #t "test suite not run~%")))))))
1749 (native-inputs
1750 (list python-pytest
1751 python-pytest-django
1752 python-setuptools
1753 python-wheel
1754 tzdata-for-tests))
1755 (propagated-inputs
1756 (list python-django python-pytz))
1757 (home-page "https://www.django-rest-framework.org")
1758 (synopsis "Toolkit for building Web APIs with Django")
1759 (description
1760 "The Django REST framework is for building Web APIs with Django. It
1761provides features like a Web-browsable API and authentication policies.")
1762 (license license:bsd-2)))
1763
1764(define-public python-django-sekizai
1765 (package
1766 (name "python-django-sekizai")
1767 (version "4.1.0")
1768 (source
1769 (origin
1770 (method url-fetch)
1771 (uri (pypi-uri "django-sekizai" version))
1772 (sha256
1773 (base32
1774 "1bfdag32yqjq3vqvyi9izdkmfcs2qip42rcmxpphqp0bmv5kdjia"))))
1775 (build-system pyproject-build-system)
1776 (arguments
1777 (list
1778 #:phases #~(modify-phases %standard-phases
1779 (replace 'check
1780 (lambda* (#:key tests? #:allow-other-keys)
1781 (when tests?
1782 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
1783 (invoke "django-admin" "test" "--pythonpath=.")))))))
1784 (native-inputs (list python-setuptools python-wheel))
1785 (propagated-inputs
1786 (list python-django python-django-classy-tags))
1787 (home-page "https://github.com/django-cms/django-sekizai")
1788 (synopsis "Template blocks for Django projects")
1789 (description "Sekizai means blocks in Japanese, and that is what this app
1790provides. A fresh look at blocks. With @code{django-sekizai} you can define
1791placeholders where your blocks get rendered and at different places in your
1792templates append to those blocks. This is especially useful for css and
1793javascript. Your subtemplates can now define css and javascript files to be
1794included, and the css will be nicely put at the top and the javascript to the
1795bottom, just like you should. Also sekizai will ignore any duplicate content in
1796a single block.")
1797 (license license:bsd-3)))
1798
1799(define-public python-django-crispy-forms
1800 (package
1801 (name "python-django-crispy-forms")
1802 (version "2.5")
1803 (source
1804 (origin
1805 (method git-fetch)
1806 (uri (git-reference
1807 (url "https://github.com/django-crispy-forms/django-crispy-forms")
1808 (commit version)))
1809 (file-name (git-file-name name version))
1810 (sha256
1811 (base32 "0nx3b5p8flwirfpwiq528z9dxqz49s99z3y33n0076af8zmkr72i"))))
1812 (build-system pyproject-build-system)
1813 (arguments
1814 (list
1815 #:phases
1816 #~(modify-phases %standard-phases
1817 (add-before 'check 'pre-check
1818 (lambda _
1819 (setenv "PYTHONPATH" "."))))))
1820 (native-inputs
1821 (append
1822 ;; XXX: python-crispy-boostrap packages and this package have a
1823 ;; circular dependency. Get a bootstrap version for them.
1824 (map (lambda (pkg)
1825 (package/inherit pkg
1826 (arguments
1827 (list
1828 #:tests? #f
1829 #:phases
1830 #~(modify-phases %standard-phases
1831 (delete 'sanity-check))))
1832 (propagated-inputs
1833 (modify-inputs propagated-inputs
1834 (delete "python-django-crispy-forms")))))
1835 (list python-crispy-bootstrap3 python-crispy-bootstrap4))
1836 (list python-pytest python-pytest-django python-setuptools)))
1837 (propagated-inputs (list python-django))
1838 (home-page "https://github.com/django-crispy-forms/django-crispy-forms")
1839 (synopsis "Tool to control Django forms without custom templates")
1840 (description
1841 "@code{django-crispy-forms} lets you easily build, customize and reuse
1842forms using your favorite CSS framework, without writing template code.")
1843 (license license:expat)))
1844
1845(define-public python-django-compressor
1846 (package
1847 (name "python-django-compressor")
1848 (version "4.5.1")
1849 (source
1850 (origin
1851 (method url-fetch)
1852 (uri (pypi-uri "django_compressor" version))
1853 (sha256
1854 (base32 "08m8cs1mnpwd2zlck8cbl4cdp21dgv4vj7j17krbgn745s5a9n61"))
1855 (patches
1856 (search-patches "django-compressor-build-with-beautifulsoup-4.14+.patch"))))
1857 (build-system pyproject-build-system)
1858 (arguments
1859 (list
1860 #:phases
1861 '(modify-phases %standard-phases
1862 (add-after 'unpack 'relax-requirements
1863 (lambda _
1864 (substitute* "setup.py"
1865 (("==") ">="))))
1866 ;; This needs calmjs.
1867 (add-after 'unpack 'skip-bad-test
1868 (lambda _
1869 (substitute* "compressor/tests/test_filters.py"
1870 (("test_calmjs_filter") "_test_calmjs_filter"))))
1871 ;; XXX: Reported upstream
1872 ;; <https://github.com/django-compressor/django-compressor/pull/1294>.
1873 (add-after 'unpack 'fix-setup.py
1874 (lambda _
1875 (substitute* "setup.py"
1876 (("package_data=.*,") "include_package_data=True,"))))
1877 (replace 'check
1878 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
1879 (when tests?
1880 (with-directory-excursion (site-packages inputs outputs)
1881 (setenv "DJANGO_SETTINGS_MODULE" "compressor.test_settings")
1882 (invoke "django-admin" "test"
1883 "--pythonpath=."))))))))
1884 (propagated-inputs
1885 (list python-django
1886 python-django-appconf
1887 python-django-sekizai
1888 python-rcssmin
1889 python-rjsmin))
1890 (native-inputs
1891 (list python-beautifulsoup4
1892 python-brotli
1893 python-csscompressor
1894 python-setuptools
1895 python-wheel))
1896 (home-page "https://django-compressor.readthedocs.io/en/latest/")
1897 (synopsis
1898 "Compress linked and inline JavaScript or CSS into single cached files")
1899 (description
1900 "Django Compressor combines and compresses linked and inline Javascript or
1901CSS in a Django templates into cacheable static files by using the compress
1902template tag.")
1903 (license license:expat)))
1904
1905(define-public python-django-dbbackup
1906 (package
1907 (name "python-django-dbbackup")
1908 (version "5.1.2")
1909 (source
1910 (origin
1911 (method git-fetch)
1912 (uri (git-reference
1913 (url "https://github.com/Archmonger/django-dbbackup")
1914 (commit version)))
1915 (file-name (git-file-name name version))
1916 (sha256
1917 (base32 "1iapp6kln4sc459w97x2hzdz471d4c2ikqwq556c6bqafdgh8brn"))))
1918 (build-system pyproject-build-system)
1919 (arguments
1920 (list
1921 #:phases
1922 #~(modify-phases %standard-phases
1923 (add-before 'check 'pre-check
1924 (lambda _
1925 ;; To write a .env file.
1926 (setenv "HOME" "/tmp"))))))
1927 (native-inputs (list gnupg
1928 python-dotenv
1929 python-gnupg
1930 python-hatchling
1931 python-pytest
1932 python-pytz
1933 python-testfixtures
1934 python-tzdata))
1935 (propagated-inputs (list python-django))
1936 (home-page "https://github.com/Archmonger/django-dbbackup")
1937 (synopsis "Backup and restore a Django project database and media")
1938 (description
1939 "This Django application provides management commands to help backup and
1940restore your project database and media files with various storages such as
1941Amazon S3, Dropbox, local file storage or any Django storage.")
1942 (license license:bsd-3)))
1943
1944(define-public python-django-override-storage
1945 (package
1946 (name "python-django-override-storage")
1947 (version "0.3.2")
1948 (source
1949 (origin
1950 (method git-fetch)
1951 (uri (git-reference
1952 (url "https://github.com/danifus/django-override-storage")
1953 (commit (string-append "v" version))))
1954 (file-name (git-file-name name version))
1955 (sha256
1956 (base32 "1zxfzawhcm1lnxl0d025z6ipgfarvqr2jyl4cg7680gs73m5ikw5"))))
1957 (build-system pyproject-build-system)
1958 (arguments
1959 (list
1960 #:phases
1961 #~(modify-phases %standard-phases
1962 (replace 'check
1963 (lambda _
1964 (invoke "python" "runtests.py"))))))
1965 (native-inputs (list python-mock python-setuptools))
1966 (propagated-inputs (list python-django))
1967 (home-page "https://github.com/danifus/django-override-storage")
1968 (synopsis "Django test helpers to manage file storage side effects")
1969 (description
1970 "This project provides tools to help reduce the side effects of using
1971FileFields during tests.")
1972 (license license:expat)))
1973
1974(define-public python-django-storages
1975 (package
1976 (name "python-django-storages")
1977 (version "1.14.6")
1978 (source
1979 (origin
1980 (method url-fetch)
1981 (uri (pypi-uri "django_storages" version))
1982 (sha256
1983 (base32 "1ja1jgh7alypsb46ncbc6acsxxw771hf51yfqz4rmxhl8a7ww9bs"))))
1984 (build-system pyproject-build-system)
1985 (arguments
1986 (list
1987 #:phases #~(modify-phases %standard-phases
1988 (add-before 'check 'delete-some-tests
1989 (lambda _
1990 (delete-file
1991 ;; python-google-cloud-storage broken in the CI
1992 "tests/test_gcloud.py")
1993 (delete-file
1994 ;; python-moto can't find 'mock_s3'
1995 "tests/test_s3.py")
1996 (substitute* "tests/test_utils.py"
1997 ;; This test depends on a file which is likely
1998 ;; unavailble in PyPI (FileNotFoundError).
1999 (("def test_with_string_file_detect_encoding")
2000 "def _test_with_string_file_detect_encoding"))))
2001 (replace 'check
2002 (lambda* (#:key tests? #:allow-other-keys)
2003 (when tests?
2004 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
2005 (invoke "django-admin" "test" "tests"
2006 "--pythonpath=.")))))))
2007 (propagated-inputs (list python-django))
2008 (native-inputs (list python-azure-storage-blob ; azure backend
2009 python-dropbox ; dropbox backend
2010 python-paramiko ; sftp backend
2011 python-pytest
2012 python-setuptools python-wheel))
2013 (home-page "https://django-storages.readthedocs.io/en/latest/")
2014 (synopsis "Support for many storage backends in Django")
2015 (description
2016 "@code{django-storages} is a project to provide a variety of storage
2017backends in a single library.")
2018 (license license:bsd-3)))
2019
2020(define-public python-django-auth-ldap
2021 (package
2022 (name "python-django-auth-ldap")
2023 (version "4.8.0")
2024 (source
2025 (origin
2026 (method git-fetch)
2027 (uri (git-reference
2028 (url "https://github.com/django-auth-ldap/django-auth-ldap")
2029 (commit version)))
2030 (file-name (git-file-name name version))
2031 (sha256
2032 (base32 "11mgxj05ra1yh2z9knzvcayd3zwqgl39gna0gm0xp290cyw5mnnb"))))
2033 (build-system pyproject-build-system)
2034 (arguments
2035 (list
2036 #:phases
2037 #~(modify-phases %standard-phases
2038 (replace 'check
2039 (lambda* (#:key inputs #:allow-other-keys)
2040 (setenv "SLAPD"
2041 (search-input-file inputs "/libexec/slapd"))
2042 (setenv "SCHEMA"
2043 (search-input-directory inputs "etc/openldap/schema"))
2044 (invoke "python"
2045 "-m" "django" "test"
2046 "--settings" "tests.settings"))))))
2047 (native-inputs (list openldap python-setuptools))
2048 (propagated-inputs (list python-django python-ldap))
2049 (home-page "https://github.com/django-auth-ldap/django-auth-ldap")
2050 (synopsis "Django LDAP authentication backend")
2051 (description
2052 "This package provides an LDAP authentication backend for Django.")
2053 (license license:bsd-2)))
2054
2055(define-public python-django-logging-json
2056 (package
2057 (name "python-django-logging-json")
2058 (version "1.16")
2059 (source
2060 (origin
2061 (method git-fetch)
2062 (uri (git-reference
2063 (url "https://github.com/cipriantarta/django-logging")
2064 (commit version)))
2065 (file-name (git-file-name name version))
2066 (sha256
2067 (base32 "1big7mv0274wgbr06v2qlq61pzh7h2rcn0la212shnh5b4fvhg56"))))
2068 (build-system pyproject-build-system)
2069 (arguments
2070 (list
2071 #:tests? #f ;no tests
2072 #:phases
2073 #~(modify-phases %standard-phases
2074 ;; Importing this module requires a Django project.
2075 (delete 'sanity-check))))
2076 (native-inputs (list python-setuptools))
2077 (propagated-inputs
2078 (list python-certifi python-django python-elasticsearch python-six))
2079 (home-page "https://github.com/cipriantarta/django-logging")
2080 (synopsis "Log requests/responses in various formats")
2081 (description
2082 "This package provides a Django library that logs request, response,
2083and exception details in a JSON document. It can also send logs directly
2084to ElasticSearch.")
2085 (license license:bsd-2)))
2086
2087(define-public python-django-netfields
2088 (package
2089 (name "python-django-netfields")
2090 (version "1.3.2")
2091 (source
2092 (origin
2093 (method git-fetch)
2094 (uri (git-reference
2095 (url "https://github.com/jimfunk/django-postgresql-netfields")
2096 (commit (string-append "v" version))))
2097 (file-name (git-file-name name version))
2098 (sha256
2099 (base32 "176dmdlhd6bka4k6b4mlha3ags6mqf2qy3rxvpgnk9v5nncqm7l9"))))
2100 (build-system pyproject-build-system)
2101 (arguments
2102 (list
2103 #:tests? #f ;XXX: Requires a running PostgreSQL server
2104 ;; XXX: Requires rest_framework.
2105 #:test-flags
2106 #~(list "--ignore=test/tests/test_rest_framework_fields.py")
2107 #:phases
2108 #~(modify-phases %standard-phases
2109 (add-before 'check 'pre-check
2110 (lambda _
2111 (setenv "DJANGO_SETTINGS_MODULE" "testsettings")
2112 (setenv "PYTHONPATH" "."))))))
2113 (native-inputs
2114 (list python-pytest python-pytest-django python-setuptools))
2115 (propagated-inputs
2116 (list python-django python-netaddr python-psycopg2 python-six))
2117 (home-page "https://github.com/jimfunk/django-postgresql-netfields")
2118 (synopsis "PostgreSQL netfields implementation for Django")
2119 (description
2120 "This package provides mappings for the PostgreSQL @code{INET} and
2121@code{CIDR} fields for use in Django projects.")
2122 (license license:bsd-3)))
2123
2124(define-public python-django-url-filter
2125 (package
2126 (name "python-django-url-filter")
2127 (version "0.3.15")
2128 (source
2129 (origin
2130 (method git-fetch)
2131 (uri (git-reference
2132 (url "https://github.com/miki725/django-url-filter")
2133 (commit version)))
2134 (file-name (git-file-name name version))
2135 (sha256
2136 (base32 "0r4zhqhs8y6cnplwyvcb0zpijizw1ifnszs38n4w8138657f9026"))))
2137 (build-system pyproject-build-system)
2138 (arguments
2139 (list
2140 #:tests? #f ;FIXME: Django raises "Apps aren't loaded yet"!?
2141 #:test-flags #~(list "--doctest-modules" "tests/" "url_filter/")
2142 #:phases
2143 #~(modify-phases %standard-phases
2144 (add-after 'unpack 'loosen-requirements
2145 (lambda _
2146 ;; Do not depend on compatibility package for old
2147 ;; Python versions.
2148 (substitute* "requirements.txt"
2149 (("enum-compat")
2150 ""))
2151 ;; Patch for Django 4.0 compatibility, taken from upstream pull
2152 ;; request: https://github.com/miki725/django-url-filter/pull/103
2153 (substitute* "url_filter/validators.py"
2154 ((" ungettext_lazy")
2155 " ngettext_lazy"))))
2156 (add-before 'check 'configure-tests
2157 (lambda _
2158 (setenv "DJANGO_SETTINGS_MODULE" "test_project.settings"))))))
2159 (native-inputs (list python-mock python-pytest python-setuptools python-sqlalchemy))
2160 (propagated-inputs (list python-cached-property python-django python-six))
2161 (home-page "https://github.com/miki725/django-url-filter")
2162 (synopsis "Filter data via human-friendly URLs")
2163 (description
2164 "The main goal of Django URL Filter is to provide an easy URL interface
2165for filtering data. It allows the user to safely filter by model attributes
2166and also specify the lookup type for each filter (very much like Django's
2167filtering system in ORM).")
2168 (license license:expat)))
2169
2170(define-public python-django-svg-image-form-field
2171 (package
2172 (name "python-django-svg-image-form-field")
2173 (version "1.0.1")
2174 (source
2175 (origin
2176 (method git-fetch)
2177 (uri (git-reference
2178 (url "https://github.com/artrey/django-svg-image-form-field")
2179 (commit (string-append version))))
2180 (file-name (git-file-name name version))
2181 (sha256
2182 (base32 "131m545khn8l20j4x2bvlvz36dlbnhj9pc98i2dw72s3bw8pgws0"))))
2183 (build-system pyproject-build-system)
2184 (arguments (list #:tests? #f)) ; No tests.
2185 (native-inputs (list python-setuptools))
2186 (propagated-inputs
2187 (list python-defusedxml python-django python-pillow))
2188 (home-page "https://github.com/artrey/django-svg-image-form-field")
2189 (synopsis "Form field to validate SVG and other images")
2190 (description "This form field allows users to provide SVG images for
2191models that use Django's standard @code{ImageField}, in addition to the
2192image files already supported by it.")
2193 (license license:expat)))
2194
2195(define-public python-django-environ
2196 (package
2197 (name "python-django-environ")
2198 (version "0.12.1")
2199 (source
2200 (origin
2201 (method git-fetch)
2202 (uri (git-reference
2203 (url "https://github.com/joke2k/django-environ")
2204 (commit (string-append "v" version))))
2205 (file-name (git-file-name name version))
2206 (sha256
2207 (base32 "0alm1ir5fsiq26dnm0pam1rdyiwnpqmnqy537xx3jicjdz2ajy7y"))))
2208 (build-system pyproject-build-system)
2209 (native-inputs (list python-pytest
2210 python-setuptools))
2211 (home-page "https://django-environ.readthedocs.io/")
2212 (synopsis "Configure Django project using environment variables")
2213 (description
2214 "This Django package allows you to utilize 12factor inspired environment
2215variables to configure your Django application.")
2216 (license license:expat)))
2217
2218(define-public python-django-widget-tweaks
2219 (package
2220 (name "python-django-widget-tweaks")
2221 (version "1.5.0")
2222 (source
2223 (origin
2224 (method url-fetch)
2225 (uri (pypi-uri "django-widget-tweaks" version))
2226 (sha256
2227 (base32 "1ir9qrygb0bsi53sqxs7052i5gpbzz3h8j3m5j94x6dv3rl8088w"))))
2228 (build-system pyproject-build-system)
2229 (arguments
2230 (list
2231 #:phases
2232 #~(modify-phases %standard-phases
2233 (replace 'check
2234 (lambda* (#:key tests? #:allow-other-keys)
2235 (when tests?
2236 (invoke "python" "-m" "django" "test"
2237 "--settings=tests.settings")))))))
2238 (native-inputs (list python-setuptools python-wheel))
2239 (propagated-inputs (list python-django))
2240 (home-page "https://github.com/jazzband/django-widget-tweaks")
2241 (synopsis "Tweak the form field rendering in Django templates")
2242 (description
2243 "This package provides a way to tweak the form field rendering in
2244templates and not in python-level form definitions.")
2245 (license license:expat)))
2246
2247(define-public python-django-cleanup
2248 (package
2249 (name "python-django-cleanup")
2250 (version "9.0.0")
2251 (source
2252 (origin
2253 (method git-fetch)
2254 (uri (git-reference
2255 (url "https://github.com/un1t/django-cleanup")
2256 (commit (string-append version))))
2257 (file-name (git-file-name name version))
2258 (sha256
2259 (base32 "02ipa8d8ndnj8bs4dqhk03id4vmrvyr25vkpfqcfhmwipbhx8dc0"))))
2260 (build-system pyproject-build-system)
2261 (native-inputs
2262 (list python-pytest
2263 python-pytest-django
2264 python-setuptools
2265 python-wheel))
2266 (propagated-inputs
2267 (list python-django))
2268 (home-page "https://github.com/un1t/django-cleanup")
2269 (synopsis "Automatically deletes unused media files")
2270 (description "This application automatically deletes user-uploaded
2271files when a model is modified or deleted. It works for FileField,
2272ImageField and their subclasses. Files set as default values for any
2273FileField are not deleted.")
2274 (license license:expat)))