X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/32e18e9b9471e863e5857a89683f358bfb91c157..8ed9be3faccb865204de46d2a8ed3e96e59281b6:/gnu/packages/python-web.scm diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index e622f27d6b..7808b7631e 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -13,8 +13,8 @@ ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2015 Cyril Roelandt ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari -;;; Copyright © 2016 Hartmut Goebel -;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice +;;; Copyright © 2016, 2019 Hartmut Goebel +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice ;;; Copyright © 2015, 2017 Ben Woodcroft ;;; Copyright © 2015, 2016 Christopher Allan Webber ;;; Copyright © 2017 Adriano Peluso @@ -30,6 +30,7 @@ ;;; Copyright © 2019 Vagrant Cascadian ;;; Copyright © 2019 Brendan Tildesley ;;; Copyright © 2019 Pierre Langlois +;;; Copyright © 2019 Tanguy Le Carrour ;;; ;;; This file is part of GNU Guix. ;;; @@ -53,6 +54,7 @@ #: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) @@ -62,9 +64,11 @@ #: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) @@ -303,19 +307,55 @@ other HTTP libraries.") (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 @@ -809,21 +849,18 @@ connection to each user.") (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.") @@ -923,14 +960,14 @@ object to help create WSGI responses.") (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") @@ -1602,14 +1639,13 @@ Amazon Web Services (AWS) API.") (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))) @@ -1643,7 +1679,7 @@ and to spawn subprocesses to handle requests.") (build-system python-build-system) (native-inputs `(("python-nose" ,python-nose))) - (home-page "http://pythonpaste.org/deploy/") + (home-page "https://pylonsproject.org/") (synopsis "Load, configure, and compose WSGI applications and servers") (description @@ -1676,7 +1712,7 @@ file.") ("python-webob" ,python-webob) ("python-six" ,python-six) ("python-beautifulsoup4" ,python-beautifulsoup4))) - (home-page "http://webtest.pythonpaste.org/") + (home-page "https://docs.pylonsproject.org/projects/webtest/") (synopsis "Helper to test WSGI applications") (description "Webtest allows you to test your Python web applications without starting an HTTP server. It supports anything that supports the @@ -1979,7 +2015,7 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients." (define-public python-cachecontrol (package (name "python-cachecontrol") - (version "0.11.6") + (version "0.12.5") (source (origin (method git-fetch) @@ -1990,25 +2026,12 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients." (file-name (git-file-name name version)) (sha256 (base32 - "0pb16bzbkk99nh317xyfk8fxc2ngimsbz7lz9pxsw8c82n83d4dh")))) + "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))) @@ -2218,24 +2241,21 @@ applications.") (define-public python-flask-sqlalchemy (package (name "python-flask-sqlalchemy") - (version "2.1") - (source - (origin - (method url-fetch) - (uri (pypi-uri "Flask-SQLAlchemy" version)) - (sha256 - (base32 - "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965")))) + (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 @@ -2512,14 +2532,14 @@ CSS tidy. Also supports URL rewriting in CSS files.") (define-public python-elasticsearch (package (name "python-elasticsearch") - (version "6.1.1") + (version "7.1.0") (source (origin (method url-fetch) (uri (pypi-uri "elasticsearch" version)) (sha256 (base32 - "1kjxl45yvvgfb5fmamx0kfsfg9pzphiqrwbkns3s28r1w7ya74cd")))) + "0rnjvlhw4v3vg14l519qliy1s1zpmx3827q0xfviwvk42rr7hh01")))) (build-system python-build-system) (native-inputs `(("python-mock" ,python-mock) @@ -2611,7 +2631,7 @@ for Flask programs that are using @code{python-alembic}.") (define-public python-genshi (package (name "python-genshi") - (version "0.7.1") + (version "0.7.2") (source (origin (method git-fetch) @@ -2620,7 +2640,7 @@ for Flask programs that are using @code{python-alembic}.") (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") @@ -2728,17 +2748,26 @@ List.") (define-public python-publicsuffix2 (package (name "python-publicsuffix2") - (version "2.20160818") + (version "2.20191221") (source (origin (method url-fetch) - (uri (pypi-uri "publicsuffix2" version ".tar.bz2")) + (uri (pypi-uri "publicsuffix2" version)) (sha256 - (base32 - "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68")))) + (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00")))) (build-system python-build-system) (arguments - '(#:tests? #f)) ; The test suite requires network access. + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'ignore-maintainer-inputs + (lambda _ + ;; Comment out a demand for python-requests, which is used only by + ;; the unused ‘update_psl’ helper command. + (substitute* "setup.py" + (("'requests " match) + (format "# ~a" match))) + #t))) + #:tests? #f)) ; the test suite requires network access (home-page "https://github.com/pombredanne/python-publicsuffix2") (synopsis "Get a public suffix for a domain name using the Public Suffix List") (description "Get a public suffix for a domain name using the Public Suffix @@ -2865,7 +2894,7 @@ available in Django, but is a standalone package.") ("python-nose" ,python-nose))) (propagated-inputs `(("python-six" ,python-six))) - (home-page "http://pythonpaste.org") + (home-page "https://pythonpaste.readthedocs.io/") (synopsis "Python web development tools, focusing on WSGI") (description @@ -2894,7 +2923,8 @@ follows ideas flowing from WSGI (Web Standard Gateway Interface).") (propagated-inputs `(("python-paste" ,python-paste) ("python-pastedeploy" ,python-pastedeploy))) - (home-page "http://pythonpaste.org/script/") + (home-page (string-append "https://web.archive.org/web/20161025192515/" + "http://pythonpaste.org/script/")) (arguments '(;; Unfortunately, this requires the latest unittest2, ;; but that requires traceback2 which requires linecache2 which requires @@ -3222,14 +3252,13 @@ Python.") (define-public python-slugify (package (name "python-slugify") - (version "3.0.2") + (version "3.0.4") (source (origin (method url-fetch) (uri (pypi-uri "python-slugify" version)) (sha256 - (base32 - "0n6pfmsq899c54plpvzi46l7zrpa3zfpm8im6h32czjw6kxky5jp")) + (base32 "0dv97yi5fq074q5qyqbin09pmi8ixg36caf5nkpw2bqkd8jh6pap")) (patches (search-patches "python-slugify-depend-on-unidecode.patch")))) (native-inputs @@ -3271,3 +3300,134 @@ library to create slugs from unicode strings while keeping it DRY.") (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 "https://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)))