;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2016, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
+;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
+;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (guix build-system python)
#:use-module (guix utils)
#:use-module (gnu packages)
+ #:use-module (gnu packages base)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages curl)
#:use-module (gnu packages databases)
#:use-module (gnu packages django)
+ #:use-module (gnu packages groff)
#:use-module (gnu packages libffi)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-check)
#:use-module (gnu packages python-crypto)
#:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages sphinx)
+ #:use-module (gnu packages texinfo)
#:use-module (gnu packages tls)
#:use-module (gnu packages time)
#:use-module (gnu packages web)
(define-public python-aiohttp
(package
(name "python-aiohttp")
- (version "3.4.4")
+ (version "3.5.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "aiohttp" version))
(sha256
(base32
- "1ykm6kdjkrg556j0zd7dx2l1rsrbh0d9g27ivr6dmaahz9pyrbsi"))))
+ "1gy95ni8rkdwzir9zf14ivpfwp02g69xbhibldykff0rzbs86k4w"))))
(build-system python-build-system)
(arguments
`(#:tests? #f)) ;missing pytest-timeout
(define-public python-aiorpcx
(package
(name "python-aiorpcx")
- (version "0.10.2")
+ (version "0.18.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "aiorpcX" version))
(sha256
(base32
- "1p88k15jh0d2a18pnnbfcamsqi2bxvmmhpizmdlxfdxf8vy5ggyj"))))
+ "0k545hc7wl6sh1svydzbv6x7sx5pig2pqkl3yxs9riwmvzawx9xp"))))
(build-system python-build-system)
(propagated-inputs
`(("python-attrs" ,python-attrs)))
(home-page "https://github.com/kyuupichan/aiorpcX")
(synopsis "Generic asyncio RPC implementation")
(description
- "aiorpcX is a generic asyncio library implementation of RPC suitable for
-an application that is a client, server or both.
+ "The aiorpcX library is a generic asyncio implementation of RPC suitable
+for an application that is a client, server or both.
The package includes a module with full coverage of JSON RPC versions 1.0 and
2.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
(define-public python2-httplib2
(package-with-python2 python-httplib2))
+(define-public httpie
+ (package
+ (name "httpie")
+ (version "1.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "httpie" version))
+ (sha256
+ (base32
+ "103fcigpxf4nqmrdqjnyz7d9n4n16906slwmmqqc0gkxv8hnw6vd"))))
+ (build-system python-build-system)
+ (arguments
+ ;; The tests attempt to access external web servers, so we cannot run them.
+ '(#:tests? #f))
+ (propagated-inputs
+ `(("python-colorama" ,python-colorama)
+ ("python-pygments" ,python-pygments)
+ ("python-requests" ,python-requests)))
+ (home-page "https://httpie.org/")
+ (synopsis "cURL-like tool for humans")
+ (description
+ "A command line HTTP client with an intuitive UI, JSON support,
+syntax highlighting, wget-like downloads, plugins, and more. It consists of
+a single http command designed for painless debugging and interaction with
+HTTP servers, RESTful APIs, and web services.")
+ (license license:bsd-3)))
+
(define-public python-html2text
(package
(name "python-html2text")
- (version "2018.1.9")
+ (version "2019.8.11")
(source
(origin
(method url-fetch)
(uri (pypi-uri "html2text" version))
(sha256
(base32
- "1m6d7ciq30adc3d1n8g6r46072n7q8kdy039pqvnnmp763xi8xb2"))))
+ "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm"))))
(build-system python-build-system)
- (home-page "https://pypi.org/project/html2text/")
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "pytest" "test/"))))))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/Alir3z4/html2text")
(synopsis "Convert HTML into plain text")
(description "html2text takes HTML and converts it into plain ASCII text
which is also valid markdown. html2text was originally written by Aaron
(define-public python-tornado-http-auth
(package
(name "python-tornado-http-auth")
- (version "1.1.0")
+ (version "1.1.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "tornado-http-auth" version))
(sha256
- (base32
- "0znrgqd7k2s4ia474xizi6h3061zj4sn5n6cq76bkwl3wwshifn5"))))
+ (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
(build-system python-build-system)
(propagated-inputs
`(("python-tornado" ,python-tornado)))
- (home-page
- "https://github.com/gvalkov/tornado-http-auth")
- (synopsis
- "Digest and basic authentication module for Tornado")
+ (home-page "https://github.com/gvalkov/tornado-http-auth")
+ (synopsis "Digest and basic authentication module for Tornado")
(description
"Provides support for adding authentication to services using the Tornado
web framework, either via the basic or digest authentication schemes.")
(define-public python-zope-event
(package
(name "python-zope-event")
- (version "4.1.0")
+ (version "4.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.event" version))
(sha256
(base32
- "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
+ "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
(build-system python-build-system)
(home-page "https://pypi.python.org/pypi/zope.event")
(synopsis "Event publishing system for Python")
(define-public python-requests
(package
(name "python-requests")
- (version "2.21.0")
+ (version "2.22.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "requests" version))
(sha256
(base32
- "13jr0wkj9c2j8c0c8iaal9iivi0bpxghnsdn6lxcpnmc657q4ajh"))))
+ "1d5ybh11jr5sm7xp6mz8fyc7vrp4syifds91m7sj60xalal0gq0i"))))
(build-system python-build-system)
(propagated-inputs
`(("python-certifi" ,python-certifi)
than Python’s urllib2 library.")
(license license:asl2.0)))
+;; Some software requires an older version of Requests, notably Docker/Docker
+;; Compose.
+(define-public python-requests-2.20
+ (package (inherit python-requests)
+ (version "2.20.1")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "requests" version))
+ (sha256
+ (base32
+ "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
+ (propagated-inputs
+ `(("python-urllib3" ,python-urllib3-1.24)
+ ("python-idna" ,python-idna-2.7)
+ ,@(package-propagated-inputs python-requests)))))
+
;; Some software requires an older version of Requests, notably Docker
;; Compose.
(define-public python-requests-2.7
(define-public python-urllib3
(package
(name "python-urllib3")
- (version "1.24.1")
+ (version "1.25.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "urllib3" version))
(sha256
(base32
- "08lwd9f3hqznyf32vnzwvp87pchx062nkbgyrf67rwlkgj0jk5fy"))))
+ "0cij8qcvvpj62g1q8n785qjkdymfh4b7vf45si4sw64l41rr3rfv"))))
(build-system python-build-system)
(arguments `(#:tests? #f))
(propagated-inputs
supports url redirection and retries, and also gzip and deflate decoding.")
(license license:expat)))
+;; Some software requires an older version of urllib3, notably Docker.
+(define-public python-urllib3-1.24
+ (package (inherit python-urllib3)
+ (version "1.24.3")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "urllib3" version))
+ (sha256
+ (base32
+ "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
+
+
(define-public python2-urllib3
(package-with-python2 python-urllib3))
(base32
"0sispclx263lybbk19zp1n9yhg8xxx4jddypzgi24vpjaqnsbwlc"))))
(build-system python-build-system)
+ (arguments
+ ;; FIXME: The 'pypi' release does not contain tests.
+ '(#:tests? #f
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-reference-to-groff
+ (lambda _
+ (substitute* "awscli/help.py"
+ (("if not self._exists_on_path\\('groff'\\):") "")
+ (("raise ExecutableNotFoundError\\('groff'\\)") "")
+ (("cmdline = \\['groff'")
+ (string-append "cmdline = ['" (which "groff") "'")))
+ #t)))))
(propagated-inputs
`(("python-colorama" ,python-colorama)
("python-botocore" ,python-botocore)
("python-docutils" ,python-docutils)
("python-pyyaml" ,python-pyyaml)
("python-rsa" ,python-rsa)))
- (arguments
- ;; FIXME: The 'pypi' release does not contain tests.
- '(#:tests? #f))
+ (inputs
+ `(("groff" ,groff)))
(home-page "https://aws.amazon.com/cli/")
(synopsis "Command line client for AWS")
(description "AWS CLI provides a unified command line interface to the
(define-public python-wsgiproxy2
(package
(name "python-wsgiproxy2")
- (version "0.4.5")
+ (version "0.4.6")
(source
(origin
(method url-fetch)
(uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
(sha256
- (base32
- "19d9dva282vfjs784i0zkxp078lxfz4h3f621z30ij9wbf5rba6a"))))
+ (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
(build-system python-build-system)
(native-inputs
`(("python-webtest" ,python-webtest)))
(define-public python-flask
(package
(name "python-flask")
- (version "1.0.2")
+ (version "1.0.3")
(source (origin
(method url-fetch)
- (uri (pypi-uri "flask" version))
+ (uri (pypi-uri "Flask" version))
(sha256
(base32
- "0j6f4a9rpfh25k1gp7azqhnni4mb4fgy50jammgjgddw1l3w0w92"))))
+ "1wxnhjlxwwjhjxmghykjhllpahv5pkdc5hln4ab6nab43s26sz5d"))))
(build-system python-build-system)
(arguments
'(#:phases
(define-public python-responses
(package
(name "python-responses")
- (version "0.5.1")
+ (version "0.10.6")
(source (origin
(method url-fetch)
(uri (pypi-uri "responses" version))
(sha256
(base32
- "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
+ "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
(build-system python-build-system)
(arguments
`(;; Test suite is not distributed:
(define-public python-cachecontrol
(package
(name "python-cachecontrol")
- (version "0.11.6")
+ (version "0.12.5")
(source
(origin
- (method url-fetch)
+ (method git-fetch)
;; Pypi does not have tests.
- (uri (string-append
- "https://github.com/ionrock/cachecontrol/archive/v"
- version ".tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
+ (uri (git-reference
+ (url "https://github.com/ionrock/cachecontrol")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
(sha256
(base32
- "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
+ "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
(build-system python-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'check
- (lambda _
- ;; Drop test that requires internet access.
- (delete-file "tests/test_regressions.py")
- (setenv "PYTHONPATH"
- (string-append (getcwd) "/build/lib:"
- (getenv "PYTHONPATH")))
- (invoke "py.test" "-vv")
- #t)))))
- (native-inputs
- `(("python-pytest" ,python-pytest)
- ("python-redis" ,python-redis)
- ("python-webtest" ,python-webtest)
- ("python-mock" ,python-mock)))
+ ;; Versions > 0.11.6 depend on CherryPy for testing.
+ ;; It's too much work to package CherryPy for now.
+ `(#:tests? #f))
(propagated-inputs
`(("python-requests" ,python-requests)
("python-lockfile" ,python-lockfile)))
(define-public python-s3transfer
(package
(name "python-s3transfer")
- (version "0.1.13")
+ (version "0.2.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "s3transfer" version))
(sha256
(base32
- "1harvyn1s8v54n1w5h7c0lg4bgjh68aylhg28s8n174q53h1ip4h"))))
+ "08fhj73b1ai52hrs2q3nggshq3pswn1gq8ch3m009cb2v2vmqggj"))))
(build-system python-build-system)
(arguments
`(#:phases
(modify-phases %standard-phases
(replace 'check
(lambda _
- ;; 7 of the 'integration' tests require network access or login
- ;; credentials.
+ ;; Some of the 'integration' tests require network access or
+ ;; login credentials.
(invoke "nosetests" "--exclude=integration")
#t)))))
(native-inputs
("python-mock" ,python-mock)
("python-nose" ,python-nose)))
(propagated-inputs
- `(("python-botocore" ,python-botocore)))
+ `(("python-botocore" ,python-botocore)
+ ("python-urllib3" ,python-urllib3)))
(synopsis "Amazon S3 Transfer Manager")
(description "S3transfer is a Python library for managing Amazon S3
transfers.")
"This package provides HTTP basic access authentication for Flask.")
(license license:bsd-3)))
-(define-public python-flask-sqlalchemy
+(define-public python-flask-htpasswd
(package
- (name "python-flask-sqlalchemy")
- (version "2.1")
+ (name "python-flask-htpasswd")
+ (version "0.3.1")
(source
(origin
(method url-fetch)
- (uri (pypi-uri "Flask-SQLAlchemy" version))
+ (uri (pypi-uri "flask-htpasswd" version))
(sha256
(base32
- "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
+ "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-flask" ,python-flask)
+ ("python-itsdangerous" ,python-itsdangerous)
+ ("python-passlib" ,python-passlib)
+ ("python-tox" ,python-tox)))
+ (home-page "http://github.com/carsongee/flask-htpasswd")
+ (synopsis "Basic authentication via htpasswd files in Flask applications")
+ (description "This package provides Basic authentication via
+@file{htpasswd} files and access_token authentication in Flask
+applications.")
+ (license license:bsd-3)))
+
+(define-public python-flask-sqlalchemy
+ (package
+ (name "python-flask-sqlalchemy")
+ (version "2.4.0")
+ (source (origin
+ (method url-fetch)
+ (uri (pypi-uri "Flask-SQLAlchemy" version))
+ (sha256
+ (base32
+ "0nnllf0ddbh9jlhngnyjj98lbxgxr1csaplllx0caw98syq0k5hc"))))
(build-system python-build-system)
(propagated-inputs
`(("python-flask" ,python-flask)
("python-sqlalchemy" ,python-sqlalchemy)))
- (home-page
- "https://github.com/mitsuhiko/flask-sqlalchemy")
- (synopsis
- "Module adding SQLAlchemy support to your Flask application")
+ (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
+ (synopsis "Module adding SQLAlchemy support to your Flask application")
(description
- "This package adds SQLAlchemy support to your Flask application.")
+ "This package adds SQLAlchemy support to your Flask application.")
(license license:bsd-3)))
(define-public python-flask-restplus
(base32
"0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
(build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-tests
+ (lambda _
+ (substitute* "tests.py"
+ (("flask\\.ext\\.script") "flask_script"))
+ #t)))))
(propagated-inputs
`(("python-flask" ,python-flask)
("python-argcomplete" ,python-argcomplete)
(define-public python-genshi
(package
(name "python-genshi")
- (version "0.7.1")
+ (version "0.7.2")
(source
(origin
(method git-fetch)
(commit version)))
(file-name (git-file-name name version))
(sha256
- (base32 "01fx8fnpay5w048ppyjivg2dgfpp5rybn07y3pfsgj2knram3nhl"))))
+ (base32 "06rch30x10l105k5b6rahd839lkhmgrzn6691wbci0cb2fzps32w"))))
(build-system python-build-system)
(home-page "https://genshi.edgewall.org/")
(synopsis "Toolkit for generation of output for the web")
(propagated-inputs
`(("python-gevent" ,python2-gevent)
("python-tornado" ,python2-tornado)))))
+
+(define-public python-slugify
+ (package
+ (name "python-slugify")
+ (version "3.0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "python-slugify" version))
+ (sha256
+ (base32 "0dv97yi5fq074q5qyqbin09pmi8ixg36caf5nkpw2bqkd8jh6pap"))
+ (patches
+ (search-patches "python-slugify-depend-on-unidecode.patch"))))
+ (native-inputs
+ `(("python-wheel" ,python-wheel)))
+ (propagated-inputs
+ `(("python-unidecode" ,python-unidecode)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "python" "test.py"))))))
+ (build-system python-build-system)
+ (home-page "https://github.com/un33k/python-slugify")
+ (synopsis "Python Slugify application that handles Unicode")
+ (description "This package provides a @command{slufigy} command and
+library to create slugs from unicode strings while keeping it DRY.")
+ (license license:expat)))
+
+(define-public python-branca
+ (package
+ (name "python-branca")
+ (version "0.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "branca" version))
+ (sha256
+ (base32
+ "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-jinja2" ,python-jinja2)
+ ("python-six" ,python-six)))
+ (native-inputs
+ `(("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/python-visualization/branca")
+ (synopsis "Generate complex HTML+JS pages with Python")
+ (description "Generate complex HTML+JS pages with Python")
+ (license license:expat)))
+
+(define-public python-tinycss2
+ (package
+ (name "python-tinycss2")
+ (version "1.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "tinycss2" version))
+ (sha256
+ (base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (invoke "pytest"))))))
+ (propagated-inputs
+ `(("python-webencodings" ,python-webencodings)))
+ (native-inputs
+ `(("python-pytest-flake8" ,python-pytest-flake8)
+ ("python-pytest-isort" ,python-pytest-isort)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (home-page "https://tinycss2.readthedocs.io/")
+ (synopsis "Low-level CSS parser for Python")
+ (description "@code{tinycss2} can parse strings, return Python objects
+representing tokens and blocks, and generate CSS strings corresponding to
+these objects.
+
+Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
+grammar of CSS but doesn’t know specific rules, properties or values supported
+in various CSS modules.")
+ (license license:bsd-3)))
+
+(define-public python-cssselect2
+ (package
+ (name "python-cssselect2")
+ (version "0.2.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "cssselect2" version))
+ (sha256
+ (base32 "0skymzb4ncrm2zdsy80f53vi0arf776lvbp51hzh4ayp1il5lj3h"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (invoke "pytest"))))))
+ (propagated-inputs
+ `(("python-tinycss2" ,python-tinycss2)))
+ (native-inputs
+ `(("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-flake8" ,python-pytest-flake8)
+ ("python-pytest-isort" ,python-pytest-isort)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (home-page "https://cssselect2.readthedocs.io/")
+ (synopsis "CSS selectors for Python ElementTree")
+ (description "@code{cssselect2} is a straightforward implementation of
+CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
+ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
+
+Unlike the Python package @code{cssselect}, it does not translate selectors to
+XPath and therefore does not have all the correctness corner cases that are
+hard or impossible to fix in cssselect.")
+ (license license:bsd-3)))
+
+(define-public gunicorn
+ (package
+ (name "gunicorn")
+ (version "20.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "gunicorn" version))
+ (sha256
+ (base32
+ "0l1zm8a0vz8ws3lkn8q9a0f93ipdzyvlf2zlwdj5xyadh6jdwsgg"))))
+ (outputs '("out" "doc"))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'build 'build-doc
+ (lambda _
+ (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
+ (delete-file "docs/build/texinfo/Makefile")
+ (delete-file "docs/build/texinfo/Gunicorn.texi")
+ #t))
+ (replace 'check
+ (lambda _
+ (setenv "PYTHONPATH"
+ (string-append ".:" (getenv "PYTHONPATH")))
+ ;; Remove test modules failing due to libc not found due to
+ ;; section '.dynamic' not found in libc.so
+ (delete-file "tests/test_arbiter.py")
+ (delete-file "tests/test_config.py")
+ (delete-file "tests/test_sock.py")
+ (invoke "pytest")))
+ (add-after 'install 'install-doc
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((doc (string-append (assoc-ref outputs "doc")
+ "/share/doc/" ,name "-" ,version))
+ (html (string-append doc "/html"))
+ (info (string-append doc "/info"))
+ (examples (string-append doc "/examples")))
+ (mkdir-p html)
+ (mkdir-p info)
+ (mkdir-p examples)
+ (copy-recursively "docs/build/html" html)
+ (copy-recursively "docs/build/texinfo" info)
+ (copy-recursively "examples" examples)
+ (for-each (lambda (file)
+ (copy-file file (string-append doc "/" file)))
+ '("README.rst" "NOTICE" "LICENSE" "THANKS")))
+ #t)))))
+ (native-inputs
+ `(("binutils" ,binutils) ;; for ctypes.util.find_library()
+ ("python-aiohttp", python-aiohttp)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-sphinx" ,python-sphinx)
+ ("texinfo" ,texinfo)))
+ (home-page "http://gunicorn.org/")
+ (synopsis "Python WSGI HTTP Server for UNIX")
+ (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
+Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
+Unicorn project. The Gunicorn server is broadly compatible with
+various web frameworks, simply implemented, light on server resources,
+and fairly speedy.")
+ (license license:expat)))