projects/guix·blob java-team · refs

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