gnu: python-django-taggit: Update to 1.3.0.
[jackhill/guix/guix.git] / gnu / packages / django.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
3 ;;; Copyright © 2016, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
4 ;;; Copyright © 2017 Nikita <nikita@n0.is>
5 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
6 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
7 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
8 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
9 ;;; Copyright © 2020 Marius Bakke <marius@gnu.org>
10 ;;;
11 ;;; This file is part of GNU Guix.
12 ;;;
13 ;;; GNU Guix is free software; you can redistribute it and/or modify it
14 ;;; under the terms of the GNU General Public License as published by
15 ;;; the Free Software Foundation; either version 3 of the License, or (at
16 ;;; your option) any later version.
17 ;;;
18 ;;; GNU Guix is distributed in the hope that it will be useful, but
19 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ;;; GNU General Public License for more details.
22 ;;;
23 ;;; You should have received a copy of the GNU General Public License
24 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26 (define-module (gnu packages django)
27 #:use-module ((guix licenses) #:prefix license:)
28 #:use-module (guix packages)
29 #:use-module (guix download)
30 #:use-module (guix git-download)
31 #:use-module (guix build-system python)
32 #:use-module (gnu packages)
33 #:use-module (gnu packages base)
34 #:use-module (gnu packages databases)
35 #:use-module (gnu packages check)
36 #:use-module (gnu packages geo)
37 #:use-module (gnu packages python)
38 #:use-module (gnu packages python-compression)
39 #:use-module (gnu packages python-crypto)
40 #:use-module (gnu packages python-web)
41 #:use-module (gnu packages python-xyz)
42 #:use-module (gnu packages sphinx)
43 #:use-module (gnu packages time)
44 #:use-module (gnu packages xml))
45
46 (define-public python-django
47 (package
48 (name "python-django")
49 (version "3.1.1")
50 (source (origin
51 (method url-fetch)
52 (uri (pypi-uri "Django" version))
53 (sha256
54 (base32
55 "0bzwy58hrxbsh7szak1yfh7qvvfnpdpi8ay1x7d3pvbkm1f15j2r"))))
56 (build-system python-build-system)
57 (arguments
58 '(#:phases
59 (modify-phases %standard-phases
60 (add-before 'check 'pre-check
61 (lambda* (#:key inputs #:allow-other-keys)
62 ;; The test-suite tests timezone-dependent functions, thus tzdata
63 ;; needs to be available.
64 (setenv "TZDIR"
65 (string-append (assoc-ref inputs "tzdata")
66 "/share/zoneinfo"))
67
68 ;; Disable test for incorrect timezone: it only raises the
69 ;; expected error when /usr/share/zoneinfo exists, even though
70 ;; the machinery gracefully falls back to TZDIR. According to
71 ;; django/conf/__init__.py, lack of /usr/share/zoneinfo is
72 ;; harmless, so just ignore this test.
73 (substitute* "tests/settings_tests/tests.py"
74 ((".*def test_incorrect_timezone.*" all)
75 (string-append " @unittest.skipIf(True, 'Disabled by Guix')\n"
76 all)))
77
78 ;; Preserve the PYTHONPATH created by Guix when running the tests.
79 (substitute* "tests/admin_scripts/tests.py"
80 (("python_path = \\[")
81 (string-append "python_path = ['"
82 (string-join
83 (string-split (getenv "PYTHONPATH") #\:)
84 "','")
85 "', ")))
86
87 #t))
88 (replace 'check
89 (lambda _
90 (with-directory-excursion "tests"
91 (setenv "PYTHONPATH"
92 (string-append "..:" (getenv "PYTHONPATH")))
93 (invoke "python" "runtests.py"
94 ;; By default tests run in parallel, which may cause
95 ;; various race conditions. Run sequentially for
96 ;; consistent results.
97 "--parallel=1")))))))
98 ;; TODO: Install extras/django_bash_completion.
99 (native-inputs
100 `(("tzdata" ,tzdata-for-tests)
101 ;; Remaining packages are test requirements taken from
102 ;; tests/requirements/py3.txt
103 ("python-docutils" ,python-docutils)
104 ;; optional for tests: ("python-geoip2" ,python-geoip2)
105 ("python-jinja2" ,python-jinja2) ; >= 2.7
106 ;; optional for tests: ("python-memcached" ,python-memcached)
107 ("python-numpy" ,python-numpy)
108 ("python-pillow" ,python-pillow)
109 ("python-pyyaml" ,python-pyyaml)
110 ;; optional for tests: ("python-selenium" ,python-selenium)
111 ("python-tblib" ,python-tblib)))
112 (propagated-inputs
113 `(("python-argon2-cffi" ,python-argon2-cffi)
114 ("python-asgiref" ,python-asgiref)
115 ("python-bcrypt" ,python-bcrypt)
116 ("python-pytz" ,python-pytz)
117
118 ;; This input is not strictly required, but in practice many Django
119 ;; libraries need it for test suites and similar.
120 ("python-sqlparse" ,python-sqlparse)))
121 (home-page "https://www.djangoproject.com/")
122 (synopsis "High-level Python Web framework")
123 (description
124 "Django is a high-level Python Web framework that encourages rapid
125 development and clean, pragmatic design. It provides many tools for building
126 any Web site. Django focuses on automating as much as possible and adhering
127 to the @dfn{don't repeat yourself} (DRY) principle.")
128 (license license:bsd-3)
129 (properties `((python2-variant . ,(delay python2-django))
130 (cpe-name . "django")))))
131
132 (define-public python2-django
133 (let ((base (package-with-python2 (strip-python2-variant python-django))))
134 (package
135 (inherit base)
136 (native-inputs
137 `(;; Test requirements for Python 2 taken from
138 ;; tests/requirements/py3.txt: enum34 and mock.
139 ("python2-enum34" ,python2-enum34)
140 ("python2-mock" ,python2-mock)
141 ;; When adding memcached mind: for Python 2 memcached <= 1.53 is
142 ;; required.
143 ,@(package-native-inputs base))))))
144
145 (define-public python-django-2.2
146 (package
147 (inherit python-django)
148 (version "2.2.16")
149 (source (origin
150 (method url-fetch)
151 (uri (pypi-uri "Django" version))
152 (sha256
153 (base32
154 "1535g2r322cl4x52fb0dmzlbg23539j2wx6027j54p22xvjlbkv2"))))
155 (native-inputs
156 `(;; XXX: In 2.2 and 3.0, selenium is required for the test suite.
157 ("python-selenium" ,python-selenium)
158 ,@(package-native-inputs python-django)))))
159
160 (define-public python-django-extensions
161 (package
162 (name "python-django-extensions")
163 (version "3.0.6")
164 (source
165 (origin
166 (method git-fetch)
167 ;; Fetch from the git repository, so that the tests can be run.
168 (uri (git-reference
169 (url "https://github.com/django-extensions/django-extensions")
170 (commit version)))
171 (file-name (string-append name "-" version))
172 (sha256
173 (base32
174 "0sra6hazqvspxd1pnx5cj7gia1rkaz3hn06ib4wd0frc167f5afy"))))
175 (build-system python-build-system)
176 (arguments
177 '(#:tests? #f)) ;XXX: requires a Postgres or MySQL database
178 (propagated-inputs
179 `(("python-six" ,python-six)
180 ("python-vobject" ,python-vobject)
181 ("python-werkzeug" ,python-werkzeug)
182 ("python-dateutil" ,python-dateutil)
183 ("python-django" ,python-django)))
184 (native-inputs
185 `(("python-mock" ,python-mock)
186 ("python-factory-boy" ,python-factory-boy)
187 ("python-tox" ,python-tox)
188 ("python-pytest" ,python-pytest)
189 ("python-pytest-cov" ,python-pytest-cov)
190 ("python-pytest-django" ,python-pytest-django)
191 ("python-shortuuid" , python-shortuuid)))
192 (home-page
193 "https://github.com/django-extensions/django-extensions")
194 (synopsis "Custom management extensions for Django")
195 (description
196 "Django-extensions extends Django providing, for example, management
197 commands, additional database fields and admin extensions.")
198 (license license:expat)))
199
200 (define-public python-django-simple-math-captcha
201 (package
202 (name "python-django-simple-math-captcha")
203 (version "1.0.9")
204 (home-page "https://github.com/alsoicode/django-simple-math-captcha")
205 (source (origin
206 (method git-fetch)
207 (uri (git-reference
208 (url home-page)
209 (commit (string-append "v" version))))
210 (file-name (git-file-name name version))
211 (sha256
212 (base32
213 "0fhy9k8haqa1296v0qpg1b5w7y3pyw9qi9z9laj5ijry1gk35qaw"))))
214 (build-system python-build-system)
215 (arguments
216 '(#:phases (modify-phases %standard-phases
217 (add-after 'unpack 'patch-six-imports
218 (lambda _
219 ;; Django no longer bundles six, adjust the imports
220 ;; accordingly. The six dependency can likely be
221 ;; removed in the next version.
222 (substitute* (find-files "." "\\.py$")
223 (("from django\\.utils import six")
224 "import six"))
225 #t))
226 (replace 'check
227 (lambda _
228 (invoke "python" "runtests.py"))))))
229 (native-inputs
230 `(("python-mock" ,python-mock)))
231 (propagated-inputs
232 `(("python-django" ,python-django)
233 ("python-six" ,python-six)))
234 (synopsis "Easy-to-use math field/widget captcha for Django forms")
235 (description
236 "A multi-value-field that presents a human answerable question,
237 with no settings.py configuration necessary, but instead can be configured
238 with arguments to the field constructor.")
239 (license license:asl2.0)))
240
241 (define-public python2-django-simple-math-captcha
242 (package-with-python2 python-django-simple-math-captcha))
243
244 (define-public python-django-classy-tags
245 (package
246 (name "python-django-classy-tags")
247 (version "2.0.0")
248 (source
249 (origin
250 (method url-fetch)
251 (uri (pypi-uri "django-classy-tags" version))
252 (sha256
253 (base32
254 "1javam3zqi3y3j0r490mm61v48yh75jaha99gb7lsxkaz6yri7fm"))))
255 (build-system python-build-system)
256 ;; FIXME: How to make the test templates available to Django?
257 (arguments '(#:tests? #f))
258 (propagated-inputs
259 `(("python-django" ,python-django)))
260 (home-page "https://github.com/divio/django-classy-tags")
261 (synopsis "Class based template tags for Django")
262 (description
263 "@code{django-classy-tags} is an approach at making writing template tags
264 in Django easier, shorter and more fun. It provides an extensible argument
265 parser which reduces most of the boiler plate code you usually have to write
266 when coding custom template tags.")
267 (license license:bsd-3)))
268
269 (define-public python-django-taggit
270 (package
271 (name "python-django-taggit")
272 (version "1.3.0")
273 (source
274 (origin
275 (method url-fetch)
276 (uri (pypi-uri "django-taggit" version))
277 (sha256
278 (base32
279 "0bbkabbs77z229ps0800gxfhf75yagp4x4j5jzfysbac3zvkp0sa"))))
280 (build-system python-build-system)
281 (arguments
282 '(#:phases
283 (modify-phases %standard-phases
284 (replace 'check
285 (lambda _
286 (invoke "python3" "-m" "django" "test" "--settings=tests.settings"))))))
287 (propagated-inputs
288 `(("python-django" ,python-django)
289 ("python-isort" ,python-isort)))
290 (native-inputs
291 `(("python-pytest" ,python-pytest)
292 ("python-mock" ,python-mock)))
293 (home-page
294 "https://github.com/jazzband/django-taggit")
295 (synopsis
296 "Reusable Django application for simple tagging")
297 (description
298 "Django-taggit is a reusable Django application for simple tagging.")
299 (license license:bsd-3)))
300
301 (define-public python-easy-thumbnails
302 (package
303 (name "python-easy-thumbnails")
304 (version "2.7")
305 (source
306 (origin
307 (method url-fetch)
308 (uri (pypi-uri "easy-thumbnails" version))
309 (sha256
310 (base32
311 "14gzp5cv24z0qhxb7f7k7v9jgzpaj4n8yhjq83ynpx8183fs1rz4"))))
312 (build-system python-build-system)
313 (propagated-inputs
314 `(("python-django" ,python-django)
315 ("python-pillow" ,python-pillow)))
316 (home-page "https://github.com/SmileyChris/easy-thumbnails")
317 (synopsis "Easy thumbnails for Django")
318 (description
319 "Easy thumbnails is a Django plugin to dynamically create thumbnails
320 based on source images. Multiple thumbnails can be created from a single
321 source image, using different options to control parameters like the image
322 size and quality.")
323 (license license:bsd-3)))
324
325 (define-public python-pytest-django
326 (package
327 (name "python-pytest-django")
328 (version "3.10.0")
329 (source (origin
330 (method url-fetch)
331 (uri (pypi-uri "pytest-django" version))
332 (sha256
333 (base32
334 "19nvqsb7b9kz3ikpb50m8ppf7mfhzrapdxsqd5hhd1pdfz8dprjd"))))
335 (build-system python-build-system)
336 (arguments
337 `(#:phases
338 (modify-phases %standard-phases
339 (replace 'check
340 (lambda* (#:key tests? inputs outputs #:allow-other-keys)
341 (if tests?
342 (begin
343 (add-installed-pythonpath inputs outputs)
344 (setenv "PYTHONPATH"
345 (string-append ".:" ;for pytest_django_test
346 (getenv "PYTHONPATH")))
347 (setenv "PYTEST_DJANGO_TEST_RUNNER" "pytest")
348 (setenv "DJANGO_SETTINGS_MODULE"
349 "pytest_django_test.settings_sqlite_file")
350 (invoke "pytest" "-vv" "-k"
351 ;; FIXME: these tests fail to locate Django templates ...
352 (string-append "not test_django_not_loaded_without_settings"
353 " and not test_settings"
354 ;; ... and this does not discover
355 ;; 'pytest_django_test'.
356 " and not test_urls_cache_is_cleared")))
357 (format #t "test suite not run~%"))
358 #t)))))
359 (native-inputs
360 `(("python-django" ,python-django)
361 ("python-setuptools-scm" ,python-setuptools-scm)
362
363 ;; For tests.
364 ("python-pytest-xdist" ,python-pytest-xdist)))
365 (propagated-inputs
366 `(("python-pytest" ,python-pytest)))
367 (home-page "https://pytest-django.readthedocs.org/")
368 (synopsis "Django plugin for py.test")
369 (description "Pytest-django is a plugin for py.test that provides a set of
370 useful tools for testing Django applications and projects.")
371 (license license:bsd-3)))
372
373 (define-public python2-pytest-django
374 (package-with-python2 python-pytest-django))
375
376 (define-public python-django-haystack
377 (package
378 (name "python-django-haystack")
379 (version "2.8.1")
380 (source
381 (origin
382 (method url-fetch)
383 (uri (pypi-uri "django-haystack" version))
384 (sha256
385 (base32
386 "1302fqsrx8w474xk5cmnmg3hjqfprlxnjg9qlg86arsr4v4vqm4b"))))
387 (build-system python-build-system)
388 (arguments
389 '(#:phases
390 (modify-phases %standard-phases
391 (add-after 'unpack 'loosen-verion-restrictions
392 (lambda _
393 (substitute* "setup.py"
394 (("geopy.*") "geopy',\n"))
395 #t))
396 (add-before 'check 'set-gdal-lib-path
397 (lambda* (#:key inputs #:allow-other-keys)
398 (setenv "GDAL_LIBRARY_PATH"
399 (string-append (assoc-ref inputs "gdal")
400 "/lib"))
401 #t)))
402 #:tests? #f)) ; OSError: libgdal.so.27: cannot open shared object file
403 (propagated-inputs
404 `(("python-django" ,python-django)))
405 (native-inputs
406 `(("gdal" ,gdal)
407 ("python-coverage" ,python-coverage)
408 ("python-dateutil" ,python-dateutil)
409 ("python-geopy" ,python-geopy)
410 ("python-mock" ,python-mock)
411 ("python-nose" ,python-nose)
412 ("python-requests" ,python-requests)
413 ("python-setuptools-scm" ,python-setuptools-scm)
414 ("python-pysolr" ,python-pysolr)
415 ("python-whoosh" ,python-whoosh)))
416 (home-page "http://haystacksearch.org/")
417 (synopsis "Pluggable search for Django")
418 (description "Haystack provides modular search for Django. It features a
419 unified, familiar API that allows you to plug in different search backends
420 (such as Solr, Elasticsearch, Whoosh, Xapian, etc.) without having to modify
421 your code.")
422 (license license:bsd-3)))
423
424 (define-public python-django-filter
425 (package
426 (name "python-django-filter")
427 (version "1.1.0")
428 (source (origin
429 (method url-fetch)
430 (uri (pypi-uri "django-filter" version))
431 (sha256
432 (base32
433 "0slpfqfhnjrzlrb6vmswyhrzn01p84s16j2x1xib35gg4fxg23pc"))))
434 (build-system python-build-system)
435 (arguments
436 '(#:phases
437 (modify-phases %standard-phases
438 (replace 'check
439 (lambda _
440 (invoke "python" "runtests.py"))))))
441 (native-inputs
442 `(("python-django" ,python-django)
443 ("python-djangorestframework" ,python-djangorestframework)
444 ("python-django-crispy-forms" ,python-django-crispy-forms)
445 ("python-mock" ,python-mock)))
446 (home-page "https://django-filter.readthedocs.io/en/latest/")
447 (synopsis "Reusable Django application to filter querysets dynamically")
448 (description
449 "Django-filter is a generic, reusable application to alleviate writing
450 some of the more mundane bits of view code. Specifically, it allows users to
451 filter down a queryset based on a model’s fields, displaying the form to let
452 them do this.")
453 (license license:bsd-3)))
454
455 (define-public python2-django-filter
456 (package-with-python2 python-django-filter))
457
458 (define-public python-django-allauth
459 (package
460 (name "python-django-allauth")
461 (version "0.40.0")
462 (source
463 (origin
464 (method url-fetch)
465 (uri (pypi-uri "django-allauth" version))
466 (sha256
467 (base32
468 "12f5gjidcpb7a0d1f601k0c5dcdmb6fg9sfn7xn5j8zfsg29y63a"))))
469 (build-system python-build-system)
470 (arguments
471 '(#:phases
472 (modify-phases %standard-phases
473 (replace 'check
474 (lambda _
475 (setenv "DJANGO_SETTINGS_MODULE" "test_settings")
476 (invoke "django-admin" "test" "allauth.tests"
477 "--pythonpath=."))))))
478 (propagated-inputs
479 `(("python-openid" ,python-openid)
480 ("python-requests" ,python-requests)
481 ("python-requests-oauthlib" ,python-requests-oauthlib)))
482 (native-inputs
483 `(("python-mock" ,python-mock)))
484 (inputs
485 `(("python-django" ,python-django)))
486 (home-page "https://github.com/pennersr/django-allauth")
487 (synopsis "Set of Django applications addressing authentication")
488 (description
489 "Integrated set of Django applications addressing authentication,
490 registration, account management as well as 3rd party (social)
491 account authentication.")
492 (license license:expat)))
493
494 (define-public python2-django-allauth
495 (package-with-python2 python-django-allauth))
496
497 (define-public python-django-debug-toolbar
498 (package
499 (name "python-django-debug-toolbar")
500 (version "1.10.1")
501 (source
502 (origin
503 (method git-fetch)
504 (uri (git-reference
505 (url "https://github.com/jazzband/django-debug-toolbar")
506 (commit version)))
507 (file-name (git-file-name name version))
508 (sha256
509 (base32
510 "0zr6yjsms97wlvvd17rdbrx01irkg887dn9x70c1hzfjmfvp9afk"))))
511 (build-system python-build-system)
512 (propagated-inputs
513 `(("python-sqlparse" ,python-sqlparse)
514 ("python-django" ,python-django)))
515 (native-inputs
516 `(("python-django-jinja" ,python-django-jinja)
517 ("python-html5lib" ,python-html5lib)))
518 (arguments
519 '(#:phases
520 (modify-phases %standard-phases
521 (replace 'check
522 (lambda _
523 (invoke "make" "test"))))))
524 (home-page
525 "https://github.com/jazzband/django-debug-toolbar")
526 (synopsis "Toolbar to help with developing Django applications")
527 (description
528 "A configurable set of panels that display information about the current
529 request and response as a toolbar on the rendered page.")
530 (license license:bsd-3)))
531
532 (define-public python-django-gravatar2
533 (package
534 (name "python-django-gravatar2")
535 (version "1.4.2")
536 (source
537 (origin
538 (method url-fetch)
539 (uri (pypi-uri "django-gravatar2" version))
540 (sha256
541 (base32
542 "1qsv40xywbqsf4mkrmsswrpzqd7nfljxpfiim9an2z3dykn5rka6"))))
543 (build-system python-build-system)
544 (arguments
545 '(;; TODO: The django project for the tests is missing from the release.
546 #:tests? #f))
547 (inputs
548 `(("python-django" ,python-django)))
549 (home-page "https://github.com/twaddington/django-gravatar")
550 (synopsis "Gravatar support for Django, improved version")
551 (description
552 "Essential Gravatar support for Django. Features helper methods,
553 templatetags and a full test suite.")
554 (license license:expat)))
555
556 (define-public python2-django-gravatar2
557 (package-with-python2 python-django-gravatar2))
558
559 (define-public python-django-assets
560 (package
561 (name "python-django-assets")
562 (version "0.12")
563 (source (origin
564 (method url-fetch)
565 (uri (pypi-uri "django-assets" version))
566 (sha256
567 (base32
568 "0y0007fvkn1rdlj2g0y6k1cnkx53kxab3g8i85i0rd58k335p365"))))
569 (build-system python-build-system)
570 (arguments
571 `(#:phases
572 (modify-phases %standard-phases
573 (add-before 'check 'fix-tests
574 (lambda _
575 (begin
576 ;; https://github.com/miracle2k/django-assets/issues/87
577 (substitute* "tests/__init__.py"
578 (("settings.configure.*")
579 (string-append
580 "settings.configure(\n"
581 "INSTALLED_APPS=['django_assets', "
582 "'django.contrib.staticfiles'],\n"
583 "TEMPLATES=[{'BACKEND': "
584 "'django.template.backends.django.DjangoTemplates'}],\n"
585 ")\n")))
586 ;; These tests fail
587 (substitute* "tests/test_django.py"
588 (("TestLoader") "NoTestLoader"))))))))
589 (native-inputs
590 `(("python-nose" ,python-nose)))
591 (propagated-inputs
592 `(("python-django" ,python-django)
593 ("python-webassets" ,python-webassets)))
594 (home-page "https://github.com/miracle2k/django-assets")
595 (synopsis "Asset management for Django")
596 (description
597 "Asset management for Django, to compress and merge CSS and Javascript
598 files. Integrates the webassets library with Django, adding support for
599 merging, minifying and compiling CSS and Javascript files.")
600 (license license:bsd-2)))
601
602 (define-public python2-django-assets
603 (package-with-python2 python-django-assets))
604
605 (define-public python-django-jinja
606 (package
607 (name "python-django-jinja")
608 (version "2.4.1")
609 (source
610 (origin
611 (method git-fetch)
612 (uri (git-reference
613 (url "https://github.com/niwinz/django-jinja")
614 (commit version)))
615 (file-name (git-file-name name version))
616 (sha256
617 (base32
618 "1fcrxlznlq1xvl26y3j1r22vvy6m08r5l97xi2wj50rdmxhfvhis"))))
619 (build-system python-build-system)
620 (propagated-inputs
621 `(("python-django" ,python-django)
622 ("python-jinja2" ,python-jinja2)
623 ("python-pytz" ,python-pytz)
624 ("python-django-pipeline" ,python-django-pipeline)))
625 (arguments
626 '(;; TODO Tests currently fail due to issues with the configuration for
627 ;; django-pipeline
628 #:tests? #f
629 #:phases
630 (modify-phases %standard-phases
631 (replace 'check
632 (lambda* (#:key tests? #:allow-other-keys)
633 (or
634 (not tests?)
635 (with-directory-excursion "testing"
636 (invoke "python" "runtests.py"))))))))
637 (home-page
638 "https://niwinz.github.io/django-jinja/latest/")
639 (synopsis "Simple jinja2 templating backend for Django")
640 (description
641 "This package provides a templating backend for Django, using Jinja2. It
642 provides certain advantages over the builtin Jinja2 backend in Django, for
643 example, explicit calls to callables from templates and better performance.")
644 (license license:bsd-3)))
645
646 (define-public python-django-jsonfield
647 (package
648 (name "python-django-jsonfield")
649 (version "1.0.3")
650 (source (origin
651 (method url-fetch)
652 (uri (pypi-uri "jsonfield" version))
653 (sha256
654 (base32
655 "19x4lak0hg9c20r7mvf27w7i8r6i4sg2g0ypmlmp2665fnk76zvy"))))
656 (build-system python-build-system)
657 (arguments
658 `(#:phases
659 (modify-phases %standard-phases
660 (add-before 'check 'fix-tests
661 (lambda _
662 (substitute* "jsonfield/tests.py"
663 (("django.forms.util") "django.forms.utils")))))))
664 (propagated-inputs
665 `(("python-django" ,python-django)))
666 (home-page "https://github.com/bradjasper/django-jsonfield")
667 (synopsis "Store validated JSON in your model")
668 (description
669 "Django-jsonfield is a reusable Django field that allows you to store
670 validated JSON in your model. It silently takes care of serialization. To
671 use, simply add the field to one of your models.")
672 (license license:expat)))
673
674 (define-public python2-django-jsonfield
675 (package-with-python2 python-django-jsonfield))
676
677 (define-public python-dj-database-url
678 (package
679 (name "python-dj-database-url")
680 (version "0.4.2")
681 (source (origin
682 (method url-fetch)
683 (uri (pypi-uri "dj-database-url" version))
684 (sha256
685 (base32
686 "024zbkc5rli4hia9lz9g8kf1zxhb2gwawj5abf67i7gf8n22v0x6"))))
687 (build-system python-build-system)
688 (home-page "https://github.com/kennethreitz/dj-database-url")
689 (synopsis "Use Database URLs in your Django Application")
690 (description
691 "This simple Django utility allows you to utilize the 12factor inspired
692 DATABASE_URL environment variable to configure your Django application.
693
694 The dj_database_url.config method returns a Django database connection
695 dictionary, populated with all the data specified in your URL. There is also a
696 conn_max_age argument to easily enable Django’s connection pool.")
697 (license license:bsd-2)))
698
699 (define-public python2-dj-database-url
700 (package-with-python2 python-dj-database-url))
701
702 (define-public python-django-picklefield
703 (package
704 (name "python-django-picklefield")
705 (version "2.1.1")
706 (source
707 (origin
708 (method url-fetch)
709 (uri (pypi-uri "django-picklefield" version))
710 (sha256
711 (base32
712 "0imncys5s3vsy2q79nn7k5d670da1xgmcr9gmhn06fry6ibf39b7"))))
713 (build-system python-build-system)
714 (propagated-inputs `(("python-django" ,python-django)))
715 (native-inputs `(("python-tox" ,python-tox)))
716 (home-page "https://github.com/gintas/django-picklefield")
717 (synopsis "Pickled object field for Django")
718 (description "Pickled object field for Django")
719 (license license:expat)))
720
721 (define-public python-django-bulk-update
722 (package
723 (name "python-django-bulk-update")
724 (version "1.1.10")
725 (source (origin
726 (method url-fetch)
727 (uri (pypi-uri "django-bulk-update" version))
728 (sha256
729 (base32
730 "0mbng9m7swfc0dnidipbzlxfhlfjrv755dlnha5s4m9mgdxb1fhc"))))
731 (build-system python-build-system)
732 (arguments
733 ;; tests don't support django 1.10, but the module seems to work.
734 `(#:tests? #f))
735 (native-inputs
736 `(("six" ,python-six)
737 ("jsonfield" ,python-django-jsonfield)
738 ("python-dj-database-url" ,python-dj-database-url)))
739 (propagated-inputs
740 `(("python-django" ,python-django)))
741 (home-page "https://github.com/aykut/django-bulk-update")
742 (synopsis "Simple bulk update over Django ORM or with helper function")
743 (description
744 "Simple bulk update over Django ORM or with helper function. This
745 project aims to bulk update given objects using one query over Django ORM.")
746 (license license:expat)))
747
748 (define-public python2-django-bulk-update
749 (package-with-python2 python-django-bulk-update))
750
751 (define-public python-django-contact-form
752 (package
753 (name "python-django-contact-form")
754 (version "1.3")
755 (source (origin
756 (method url-fetch)
757 (uri (pypi-uri "django-contact-form" version))
758 (sha256
759 (base32
760 "0az590y56k5ahv4sixrkn54d3a8ig2q2z9pl6s3m4f533mx2gj17"))))
761 (build-system python-build-system)
762 (arguments
763 `(#:phases
764 (modify-phases %standard-phases
765 (replace 'check
766 (lambda _
767 ;; the next version will need "make test"
768 (invoke "flake8" "contact_form")
769 (invoke "coverage" "run" "contact_form/runtests.py")
770 (invoke "coverage" "report" "-m" "--fail-under" "0"))))))
771 (native-inputs
772 `(("python-coverage" ,python-coverage)
773 ("python-flake8" ,python-flake8)))
774 (propagated-inputs
775 `(("python-django" ,python-django)))
776 (home-page "https://github.com/ubernostrum/django-contact-form")
777 (synopsis "Contact form for Django")
778 (description
779 "This application provides simple, extensible contact-form functionality
780 for Django sites.")
781 (license license:bsd-3)))
782
783 (define-public python2-django-contact-form
784 (package-with-python2 python-django-contact-form))
785
786 (define-public python-django-contrib-comments
787 (package
788 (name "python-django-contrib-comments")
789 (version "1.8.0")
790 (source (origin
791 (method url-fetch)
792 (uri (pypi-uri "django-contrib-comments" version))
793 (sha256
794 (base32
795 "0bxsgw8jrkhg6r5s0z6ksfi4w8yknaqb1s9acmxd9pm3pnsnp5kx"))))
796 (build-system python-build-system)
797 (propagated-inputs
798 `(("python-django" ,python-django)))
799 (home-page "https://github.com/django/django-contrib-comments")
800 (synopsis "Comments framework")
801 (description
802 "Django used to include a comments framework; since Django 1.6 it's been
803 separated to a separate project. This is that project. This framework can be
804 used to attach comments to any model, so you can use it for comments on blog
805 entries, photos, book chapters, or anything else.")
806 (license license:bsd-3)))
807
808 (define-public python2-django-contrib-comments
809 (package-with-python2 python-django-contrib-comments))
810
811 (define-public python-django-overextends
812 (package
813 (name "python-django-overextends")
814 (version "0.4.3")
815 (source (origin
816 (method url-fetch)
817 (uri (pypi-uri "django-overextends" version))
818 (sha256
819 (base32
820 "0qc2pcf3i56pmfxh2jw7k3pgljd8xzficmkl2541n7bkcbngqfzm"))))
821 (build-system python-build-system)
822 (arguments
823 `(#:phases
824 (modify-phases %standard-phases
825 (replace 'check
826 (lambda _ (invoke "./test_project/manage.py" "test"))))))
827 (propagated-inputs
828 `(("python-django" ,python-django)))
829 (native-inputs
830 `(("sphinx-me" ,python-sphinx-me)))
831 (home-page "https://github.com/stephenmcd/django-overextends")
832 (synopsis "Circular template inheritance")
833 (description
834 "A Django reusable app providing the overextends template tag, a drop-in
835 replacement for Django's extends tag, which allows you to use circular template
836 inheritance. The primary use-case for overextends is to simultaneously
837 override and extend templates from other reusable apps, in your own Django
838 project.")
839 (license license:bsd-2)))
840
841 (define-public python2-django-overextends
842 (package-with-python2 python-django-overextends))
843
844 (define-public python-django-pipeline
845 (package
846 (name "python-django-pipeline")
847 (version "1.6.14")
848 (source
849 (origin
850 (method url-fetch)
851 (uri (pypi-uri "django-pipeline" version))
852 (sha256
853 (base32
854 "1a207y71r7za033ira0qmh2yrgp5rq0l04gw2fg9b8jri7sslrzg"))))
855 (build-system python-build-system)
856 (arguments
857 '(#:phases
858 (modify-phases %standard-phases
859 (add-after 'unpack 'patch-source
860 (lambda _
861 (substitute* "tests/tests/test_compiler.py"
862 (("\\/usr\\/bin\\/env")
863 (which "env")))))
864 (replace 'check
865 (lambda*(#:key tests? #:allow-other-keys)
866 (or
867 (not tests?)
868 (begin
869 (setenv "PYTHONPATH"
870 (string-append (getcwd) ":"
871 (getenv "PYTHONPATH")))
872 (setenv "DJANGO_SETTINGS_MODULE" "tests.settings")
873 (invoke "django-admin" "test" "tests"))))))))
874 (propagated-inputs
875 `(("python-django" ,python-django)
876 ("python-slimit" ,python-slimit)
877 ("python-jsmin" ,python-jsmin)))
878 (home-page
879 "https://github.com/jazzband/django-pipeline")
880 (synopsis "Asset packaging library for Django")
881 (description
882 "Pipeline is an asset packaging library for Django, providing both CSS
883 and JavaScript concatenation and compression, built-in JavaScript template
884 support, and optional data-URI image and font embedding.")
885 (license license:expat)))
886
887 (define-public python-django-redis
888 (package
889 (name "python-django-redis")
890 (version "4.10.0")
891 (source (origin
892 (method url-fetch)
893 (uri (pypi-uri "django-redis" version))
894 (sha256
895 (base32
896 "1rxcwnv9ik0swkwvfqdi9i9baw6n8if5pj6q63fjh4p9chw3j2xg"))))
897 (build-system python-build-system)
898 (arguments
899 `(#:phases
900 (modify-phases %standard-phases
901 (replace 'check
902 (lambda _
903 (invoke "redis-server" "--daemonize" "yes")
904 (with-directory-excursion "tests"
905 (invoke "python" "runtests.py")))))))
906 (native-inputs
907 `(("python-fakeredis" ,python-fakeredis)
908 ("python-hiredis" ,python-hiredis)
909 ("python-mock" ,python-mock)
910 ("python-msgpack" ,python-msgpack)
911 ("redis" ,redis)))
912 (propagated-inputs
913 `(("python-django" ,python-django)
914 ("python-redis" ,python-redis)))
915 (home-page "https://github.com/niwibe/django-redis")
916 (synopsis "Full featured redis cache backend for Django")
917 (description
918 "Full featured redis cache backend for Django.")
919 (license license:bsd-3)))
920
921 (define-public python2-django-redis
922 (package-with-python2 python-django-redis))
923
924 (define-public python-django-rq
925 (package
926 (name "python-django-rq")
927 (version "1.3.1")
928 (source (origin
929 (method url-fetch)
930 (uri (pypi-uri "django-rq" version))
931 (sha256
932 (base32
933 "1ips1ikv5qhgwb58ssn496vgqg9qv6jinwmwbrg9l3s75fskd1l5"))))
934 (build-system python-build-system)
935 (arguments
936 `(#:phases
937 (modify-phases %standard-phases
938 (replace 'check
939 (lambda _
940 (invoke "redis-server" "--daemonize" "yes")
941 (invoke "django-admin.py" "test" "django_rq"
942 "--settings=django_rq.tests.settings"
943 "--pythonpath=."))))))
944 (native-inputs
945 `(("python-mock" ,python-mock)
946 ("redis" ,redis)))
947 (propagated-inputs
948 `(("python-django" ,python-django)
949 ("python-rq" ,python-rq)))
950 (home-page "https://github.com/ui/django-rq")
951 (synopsis "Django integration with RQ")
952 (description
953 "Django integration with RQ, a Redis based Python queuing library.
954 Django-RQ is a simple app that allows you to configure your queues in django's
955 settings.py and easily use them in your project.")
956 (license license:expat)))
957
958 (define-public python2-django-rq
959 (package-with-python2 python-django-rq))
960
961 (define-public python-django-q
962 (package
963 (name "python-django-q")
964 (version "1.3.2")
965 (source
966 (origin
967 (method url-fetch)
968 (uri (pypi-uri "django-q" version))
969 (sha256
970 (base32
971 "0ac3rjxv37bn97a62ly8b7qvbv765z6paiinzpwxx83nal2icc42"))))
972 (build-system python-build-system)
973 (arguments
974 '(#:phases
975 (modify-phases %standard-phases
976 (replace 'check
977 (lambda _
978 (setenv "DJANGO_SETTINGS_MODULE" "django_q.tests.settings")
979 (invoke "django-admin" "test" "django_q.tests"
980 "--pythonpath=."))))))
981 (propagated-inputs
982 `(("python-arrow" ,python-arrow)
983 ("python-blessed" ,python-blessed)
984 ("python-django" ,python-django)
985 ("python-django-picklefield" ,python-django-picklefield)))
986 (native-inputs
987 `(("python-django-redis" ,python-django-redis)
988 ("python-pytest-django" ,python-pytest-django)))
989 (home-page "https://django-q.readthedocs.io/")
990 (synopsis "Multiprocessing distributed task queue for Django")
991 (description
992 "Django Q is a native Django task queue, scheduler and worker application
993 using Python multiprocessing.")
994 (license license:expat)))
995
996 (define-public python-django-sortedm2m
997 (package
998 (name "python-django-sortedm2m")
999 (version "1.3.3")
1000 (source (origin
1001 (method url-fetch)
1002 (uri (pypi-uri "django-sortedm2m" version))
1003 (sha256
1004 (base32
1005 "0axf765i7b3c2s83nlph47asi8s071dhq8l7y382v1pw785s22vi"))))
1006 (build-system python-build-system)
1007 (arguments
1008 ;; no tests.
1009 `(#:tests? #f))
1010 (propagated-inputs
1011 `(("python-django" ,python-django)))
1012 (home-page "https://github.com/gregmuellegger/django-sortedm2m")
1013 (synopsis "Drop-in replacement for django's own ManyToManyField")
1014 (description
1015 "Sortedm2m is a drop-in replacement for django's own ManyToManyField.
1016 The provided SortedManyToManyField behaves like the original one but remembers
1017 the order of added relations.")
1018 (license license:bsd-3)))
1019
1020 (define-public python2-django-sortedm2m
1021 (package-with-python2 python-django-sortedm2m))
1022
1023 (define-public python-django-appconf
1024 (package
1025 (name "python-django-appconf")
1026 (version "1.0.3")
1027 (source (origin
1028 (method url-fetch)
1029 (uri (pypi-uri "django-appconf" version))
1030 (sha256
1031 (base32
1032 "1qw0p9qh78bvkgi38ba58djwn0rd5j1lrkg2c2wk5wb7snj3rw9m"))))
1033 (build-system python-build-system)
1034 (propagated-inputs
1035 `(("python-django" ,python-django)
1036 ("python-six" ,python-six)))
1037 (home-page "https://github.com/django-compressor/django-appconf")
1038 (synopsis "Handle configuration defaults of packaged Django apps")
1039 (description
1040 "This app precedes Django's own AppConfig classes that act as \"objects
1041 [to] store metadata for an application\" inside Django's app loading mechanism.
1042 In other words, they solve a related but different use case than
1043 django-appconf and can't easily be used as a replacement. The similarity in
1044 name is purely coincidental.")
1045 (license license:bsd-3)))
1046
1047 (define-public python2-django-appconf
1048 (package-with-python2 python-django-appconf))
1049
1050 (define-public python-django-statici18n
1051 (package
1052 (name "python-django-statici18n")
1053 (version "1.3.0")
1054 (source (origin
1055 (method url-fetch)
1056 (uri (pypi-uri "django-statici18n" version))
1057 (sha256
1058 (base32
1059 "0alcf4g1nv69njhq5k3qw4mfl2k6dc18bik5nk0g1mnp3m8zyz7k"))))
1060 (build-system python-build-system)
1061 (propagated-inputs
1062 `(("python-django" ,python-django)
1063 ("django-appconf" ,python-django-appconf)))
1064 (home-page "https://github.com/zyegfryed/django-statici18n")
1065 (synopsis "Generate JavaScript catalog to static files")
1066 (description
1067 "A Django app that provides helper for generating JavaScript catalog to
1068 static files.")
1069 (license license:bsd-3)))
1070
1071 (define-public python2-django-statici18n
1072 (package-with-python2 python-django-statici18n))
1073
1074 (define-public python-django-tagging
1075 (package
1076 (name "python-django-tagging")
1077 (version "0.5.0")
1078 (source
1079 (origin
1080 (method url-fetch)
1081 (uri (pypi-uri "django-tagging" version))
1082 (sha256
1083 (base32
1084 "13afxx30chssclxzd9gqnvwm9qyrdpnlbs6iswdfa18phfj8zmi8"))))
1085 (build-system python-build-system)
1086 (arguments
1087 `(#:phases
1088 (modify-phases %standard-phases
1089 (replace 'check
1090 (lambda _
1091 (setenv "DJANGO_SETTINGS_MODULE" "tagging.tests.settings")
1092 (invoke "django-admin" "test" "--pythonpath=."))))))
1093 (inputs
1094 `(("python-django" ,python-django)))
1095 (home-page "https://github.com/Fantomas42/django-tagging")
1096 (synopsis "Generic tagging application for Django")
1097 (description "This package provides a generic tagging application for
1098 Django projects, which allows association of a number of tags with any
1099 @code{Model} instance and makes retrieval of tags simple.")
1100 (properties `((python2-variant . ,(delay python2-django-tagging))))
1101 (license license:bsd-3)))
1102
1103 (define-public python2-django-tagging
1104 (let ((base (package-with-python2
1105 (strip-python2-variant python-django-tagging))))
1106 (package
1107 (inherit base)
1108 (version "0.4.6")
1109 (source
1110 (origin
1111 (method url-fetch)
1112 (uri (pypi-uri "django-tagging" version))
1113 (sha256
1114 (base32
1115 "0s7b4v45j783yaxs7rni10k24san0ya77nqz4s7zdf3jhfpk42r1")))))))
1116
1117 (define-public python-djangorestframework
1118 (package
1119 (name "python-djangorestframework")
1120 (version "3.7.7")
1121 (source
1122 (origin
1123 (method url-fetch)
1124 (uri (pypi-uri "djangorestframework" version))
1125 (sha256
1126 (base32
1127 "11qv117gqwswxjljs7wafxg1hyzzlx3qrviwlk9hw41bsbl997lz"))))
1128 (build-system python-build-system)
1129 (arguments
1130 '(;; No included tests
1131 #:tests? #f))
1132 (propagated-inputs
1133 `(("python-django" ,python-django)))
1134 (home-page "https://www.django-rest-framework.org")
1135 (synopsis "Toolkit for building Web APIs with Django")
1136 (description
1137 "The Django REST framework is for building Web APIs with Django. It
1138 provides features like a web browseable API and authentication policies.")
1139 (license license:bsd-2)))
1140
1141 (define-public python-django-sekizai
1142 (package
1143 (name "python-django-sekizai")
1144 (version "1.1.0")
1145 (source
1146 (origin
1147 (method url-fetch)
1148 (uri (pypi-uri "django-sekizai" version))
1149 (sha256
1150 (base32
1151 "1nc4sv109valdn6azmgm2j01k7khxy2wnji84z63x7fxsikfdxp2"))))
1152 (build-system python-build-system)
1153 (arguments '(#:tests? #f)) ; Tests not included with release.
1154 (propagated-inputs
1155 `(("python-django" ,python-django)
1156 ("python-django-classy-tags" ,python-django-classy-tags)
1157 ("python-six" ,python-six)))
1158 (home-page "https://github.com/divio/django-sekizai")
1159 (synopsis "Template blocks for Django projects")
1160 (description "Sekizai means blocks in Japanese, and thats what this app
1161 provides. A fresh look at blocks. With @code{django-sekizai} you can define
1162 placeholders where your blocks get rendered and at different places in your
1163 templates append to those blocks. This is especially useful for css and
1164 javascript. Your subtemplates can now define css and javscript files to be
1165 included, and the css will be nicely put at the top and the javascript to the
1166 bottom, just like you should. Also sekizai will ignore any duplicate content in
1167 a single block.")
1168 (license license:bsd-3)))
1169
1170 (define-public python-django-crispy-forms
1171 (package
1172 (name "python-django-crispy-forms")
1173 (version "1.7.2")
1174 (source
1175 (origin
1176 (method url-fetch)
1177 (uri (pypi-uri "django-crispy-forms" version))
1178 (sha256
1179 (base32
1180 "0pv7y648i8iz7mf64gkjizpbx5d01ap2s4vqqa30n38if6wvlljr"))))
1181 (build-system python-build-system)
1182 (arguments
1183 '(;; No included tests
1184 #:tests? #f))
1185 (propagated-inputs
1186 `(("python-django" ,python-django)))
1187 (home-page
1188 "http://github.com/maraujop/django-crispy-forms")
1189 (synopsis "Tool to control Django forms without custom templates")
1190 (description
1191 "@code{django-crispy-forms} lets you easily build, customize and reuse
1192 forms using your favorite CSS framework, without writing template code.")
1193 (license license:expat)))
1194
1195 (define-public python-django-compressor
1196 (package
1197 (name "python-django-compressor")
1198 (version "2.4")
1199 (source
1200 (origin
1201 (method url-fetch)
1202 (uri (pypi-uri "django_compressor" version))
1203 (sha256
1204 (base32
1205 "0kx7bclfa0sxlsz6ka70zr9ra00lks0hmv1kc99wbanx6xhirvfj"))))
1206 (build-system python-build-system)
1207 (arguments
1208 '(#:phases
1209 (modify-phases %standard-phases
1210 (replace 'check
1211 (lambda* (#:key tests? #:allow-other-keys)
1212 (if tests?
1213 (begin
1214 (setenv "DJANGO_SETTINGS_MODULE" "compressor.test_settings")
1215 (invoke "django-admin" "test"
1216 "--pythonpath=."))
1217 #t))))
1218 ;; Tests fail with beautifulsoup 4.9+
1219 ;; https://github.com/django-compressor/django-compressor/issues/998
1220 #:tests? #f))
1221 (propagated-inputs
1222 `(("python-django-appconf" ,python-django-appconf)
1223 ("python-rcssmin" ,python-rcssmin)
1224 ("python-rjsmin" ,python-rjsmin)))
1225 (native-inputs
1226 `(("python-beautifulsoup4" ,python-beautifulsoup4)
1227 ("python-brotli" ,python-brotli)
1228 ("python-csscompressor" ,python-csscompressor)
1229 ("python-django-sekizai" ,python-django-sekizai)
1230 ("python-mock" ,python-mock)))
1231 (home-page "https://django-compressor.readthedocs.io/en/latest/")
1232 (synopsis
1233 "Compress linked and inline JavaScript or CSS into single cached files")
1234 (description
1235 "Django Compressor combines and compresses linked and inline Javascript or
1236 CSS in a Django templates into cacheable static files by using the compress
1237 template tag.")
1238 (license license:expat)))
1239
1240 (define-public python-django-override-storage
1241 (package
1242 (name "python-django-override-storage")
1243 (version "0.1.6")
1244 (source
1245 (origin
1246 (method url-fetch)
1247 (uri (pypi-uri "django-override-storage" version))
1248 (sha256
1249 (base32 "022arq94lxnlyykn8wvfnkykhi2dldnsn93pa2i41na551i0wpiv"))))
1250 (build-system python-build-system)
1251 (propagated-inputs
1252 `(("python-django" ,python-django)))
1253 (home-page
1254 "https://github.com/danifus/django-override-storage")
1255 (synopsis "Django test helpers to manage file storage side effects")
1256 (description
1257 "This project provides tools to help reduce the side effects of using
1258 FileFields during tests.")
1259 (license license:expat)))