diff options
author | Efraim Flashner <efraim@flashner.co.il> | 2020-09-05 21:56:34 +0300 |
---|---|---|
committer | Efraim Flashner <efraim@flashner.co.il> | 2020-09-05 22:30:04 +0300 |
commit | de3c03a47160dec355d9b19ad5ca210d90c15fd7 (patch) | |
tree | 4ca6dc05b5fc9530d812bbb269f1c61ab9efccf3 /gnu/packages/python-web.scm | |
parent | ab6fe9d362046231ad6f46eccfd1ea2c9c80b401 (diff) | |
parent | b8477cab7bccc4191ed3dfa3f149aec7917834d8 (diff) | |
download | guix-de3c03a47160dec355d9b19ad5ca210d90c15fd7.tar guix-de3c03a47160dec355d9b19ad5ca210d90c15fd7.tar.gz |
Merge remote-tracking branch 'origin/master' into staging
Diffstat (limited to 'gnu/packages/python-web.scm')
-rw-r--r-- | gnu/packages/python-web.scm | 369 |
1 files changed, 344 insertions, 25 deletions
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm index 95af1856b8..9ee4834616 100644 --- a/gnu/packages/python-web.scm +++ b/gnu/packages/python-web.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net> ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org> -;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr> +;;; Copyright © 2013, 2014, 2015, 2016, 2020 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2016, 2017, 2020 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017 Roel Janssen <roel@gnu.org> @@ -37,6 +37,7 @@ ;;; Copyright © 2020 Holger Peters <holger.peters@posteo.de> ;;; Copyright © 2020 Noisytoot <noisytoot@gmail.com> ;;; Copyright © 2020 Edouard Klein <edk@beaver-labs.com> +;;; Copyright © 2020 Vinicius Monego <monego@posteo.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -464,6 +465,129 @@ follow links and submit forms. It doesn’t do JavaScript.") (define-public python2-mechanicalsoup (package-with-python2 python-mechanicalsoup)) +(define-public python-hyperframe + (package + (name "python-hyperframe") + (version "5.2.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "hyperframe" version)) + (sha256 + (base32 "07xlf44l1cw0ghxx46sbmkgzil8vqv8kxwy42ywikiy35izw3xd9")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "test")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://github.com/python-hyper/hyperframe") + (synopsis "HTTP/2 framing layer for Python") + (description + "This library contains the HTTP/2 framing code used in the hyper project. +It provides a pure-Python codebase that is capable of decoding a binary stream +into HTTP/2 frames.") + (license license:expat))) + +(define-public python-hpack + (package + (name "python-hpack") + (version "3.0.0") + (source + (origin + ;; PyPI tarball is missing some files necessary for the tests. + (method git-fetch) + (uri (git-reference + (url "https://github.com/python-hyper/hpack") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0w8hkz50a6lzkmgi41ryicm0mh9ca9cx29pm3s0xlpn0vs29xrmd")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "test" "-k" + ;; This test will be fixed in the next version. See: + ;; https://github.com/python-hyper/hpack/issues/168. + "not test_get_by_index_out_of_range")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://hyper.rtfd.org") + (synopsis "Pure-Python HPACK header compression") + (description + "This module contains a pure-Python HTTP/2 header encoding (HPACK) logic +for use in Python programs that implement HTTP/2.") + (license license:expat))) + +(define-public python-h11 + (package + (name "python-h11") + (version "0.9.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "h11" version)) + (sha256 + (base32 "1qfad70h59hya21vrzz8dqyyaiqhac0anl2dx3s3k80gpskvrm1k")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "pytest" "-vv")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://github.com/python-hyper/h11") + (synopsis "Pure-Python, bring-your-own-I/O implementation of HTTP/1.1") + (description + "This is a little HTTP/1.1 library written from scratch in Python, heavily +inspired by hyper-h2. It's a bring-your-own-I/O library; h11 contains no IO +code whatsoever. This means you can hook h11 up to your favorite network API, +and that could be anything you want.") + (license license:expat))) + +(define-public python-h2 + (package + (name "python-h2") + (version "3.2.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "h2" version)) + (sha256 + (base32 "051gg30aca26rdxsmr9svwqm06pdz9bv21ch4n0lgi7jsvml2pw7")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "test")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (propagated-inputs + `(("python-hpack" ,python-hpack) + ("python-hyperframe" ,python-hyperframe))) + (home-page "https://github.com/python-hyper/hyper-h2") + (synopsis "HTTP/2 State-Machine based protocol implementation") + (description + "This module contains a pure-Python implementation of a HTTP/2 protocol +stack. It does not provide a parsing layer, a network layer, or any rules +about concurrency. Instead, it's a purely in-memory solution, defined in +terms of data actions and HTTP/2 frames. This is one building block of a full +Python HTTP implementation.") + (license license:expat))) + (define-public python-sockjs-tornado (package (name "python-sockjs-tornado") @@ -872,6 +996,111 @@ teams extension for python-openid.") (define-public python2-openid-teams (package-with-python2 python-openid-teams)) +(define-public python-priority + (package + (name "python-priority") + (version "1.3.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "priority" version)) + (sha256 + (base32 "1gpzn9k9zgks0iw5wdmad9b4dry8haiz2sbp6gycpjkzdld9dhbb")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "test" "-k" + ;; This test exceeded the Hypothesis deadline. + "not test_period_of_repetition")))))) + (native-inputs + `(("python-hypothesis" ,python-hypothesis) + ("python-pytest" ,python-pytest) + ("python-pytest-cov" ,python-pytest-cov) + ("python-pytest-xdist" ,python-pytest-xdist))) + (home-page "https://python-hyper.org/projects/priority/en/latest/") + (synopsis "Pure-Python implementation of the HTTP/2 priority tree") + (description + "Priority is a pure-Python implementation of the priority logic for HTTP/2, +set out in RFC 7540 Section 5.3 (Stream Priority).") + (license license:expat))) + +(define-public python-wsproto + (package + (name "python-wsproto") + (version "0.15.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "wsproto" version)) + (sha256 + (base32 "17gsxlli4w8am1wwwl3k90hpdfa213ax40ycbbvb7hjx1v1rhiv1")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "test")))))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (propagated-inputs + `(("python-h11" ,python-h11))) + (home-page "https://github.com/python-hyper/wsproto/") + (synopsis "WebSockets state-machine based protocol implementation") + (description + "@code{wsproto} is a pure-Python implementation of a WebSocket protocol +stack. It's written from the ground up to be embeddable in whatever program you +choose to use, ensuring that you can communicate via WebSockets, as defined in +RFC6455, regardless of your programming paradigm.") + (license license:expat))) + +(define-public python-hypercorn + (package + (name "python-hypercorn") + (version "0.10.2") + (source + (origin + (method url-fetch) + (uri (pypi-uri "Hypercorn" version)) + (sha256 + (base32 "15dgy47a18w2ls3hwykra1cyf7yzxmfjqnsqml482p12cxr2xwqr")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key inputs outputs #:allow-other-keys) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv")))))) + (propagated-inputs + `(("python-h11" ,python-h11) + ("python-h2" ,python-h2) + ("python-priority" ,python-priority) + ("python-toml" ,python-toml) + ("python-typing-extensions" ,python-typing-extensions) + ("python-wsproto" ,python-wsproto))) + (native-inputs + `(("python-hypothesis" ,python-hypothesis) + ("python-mock" ,python-mock) + ("python-pytest" ,python-pytest) + ("python-pytest-asyncio" ,python-pytest-asyncio) + ("python-pytest-cov" ,python-pytest-cov) + ("python-pytest-trio" ,python-pytest-trio) + ("python-trio" ,python-trio))) + (home-page "https://gitlab.com/pgjones/hypercorn/") + (synopsis "ASGI Server based on Hyper libraries") + (description + "Hypercorn is an ASGI web server based on the sans-io hyper, h11, h2, and +wsproto libraries and inspired by Gunicorn. It supports HTTP/1, HTTP/2, +WebSockets (over HTTP/1 and HTTP/2), ASGI/2, and ASGI/3 specifications. It can +utilise asyncio, uvloop, or trio worker types.") + (license license:expat))) + (define-public python-tornado (package (name "python-tornado") @@ -1627,6 +1856,27 @@ WebSocket usage in Python programs.") ,python2-backport-ssl-match-hostname) ,@(package-native-inputs base)))))) +(define-public python-purl + (package + (name "python-purl") + (version "1.5") + (source + (origin + (method url-fetch) + (uri (pypi-uri "purl" version)) + (sha256 + (base32 + "15ibnz1xrh5msmn04j0nr00sz4n7jwx6cwd6zlx99kkz3vpin53m")))) + (build-system python-build-system) + (propagated-inputs `(("python-six" ,python-six))) + (home-page + "https://github.com/codeinthehole/purl") + (synopsis + "Python package for URL manipulation") + (description + "Purl is a Python package for handling URLs.") + (license license:expat))) + (define-public python-requests (package (name "python-requests") @@ -1669,18 +1919,6 @@ than Python’s urllib2 library.") ("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 - (package (inherit python-requests) - (version "2.7.0") - (source (origin - (method url-fetch) - (uri (pypi-uri "requests" version)) - (sha256 - (base32 - "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir")))))) - (define-public python2-requests (package-with-python2 python-requests)) @@ -1711,14 +1949,14 @@ library.") (define-public python-requests-mock (package (name "python-requests-mock") - (version "1.3.0") + (version "1.8.0") (source (origin (method url-fetch) (uri (pypi-uri "requests-mock" version)) (sha256 (base32 - "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx")))) + "09nj8fmyj7xz2mgwyvbw0fl9zybmx2d3qd2hf529vvjc9s24d3z6")))) (build-system python-build-system) (propagated-inputs `(("python-requests" ,python-requests) @@ -1729,9 +1967,10 @@ library.") ("python-docutils" ,python-docutils) ("python-fixtures" ,python-fixtures) ("python-mock" ,python-mock) + ("python-purl" ,python-purl) + ("python-pytest" ,python-pytest) ("python-sphinx" ,python-sphinx) - ("python-testrepository" ,python-testrepository) - ("python-testtools" ,python-testtools))) + ("python-testrepository" ,python-testrepository))) (home-page "https://requests-mock.readthedocs.org/") (synopsis "Mock out responses from the requests package") (description @@ -1774,6 +2013,20 @@ with python-requests.") (define-public python2-requests-toolbelt (package-with-python2 python-requests-toolbelt)) +(define-public python-requests-toolbelt-0.9.1 + (package + (inherit python-requests-toolbelt) + (version "0.9.1") + (source (origin + (method url-fetch) + (uri (pypi-uri "requests-toolbelt" version)) + (sha256 + (base32 + "1h3gm88dcjbd7gm229a7x5qkkhnsqsjz0m0l2xyavm2ab3a8k04n")))) + (arguments + `(;; FIXME: Some tests require network access. + #:tests? #f)))) + (define-public python-oauthlib (package (name "python-oauthlib") @@ -2550,13 +2803,13 @@ applications.") (define-public python-flask-sqlalchemy (package (name "python-flask-sqlalchemy") - (version "2.4.3") + (version "2.4.4") (source (origin (method url-fetch) (uri (pypi-uri "Flask-SQLAlchemy" version)) (sha256 (base32 - "19apnn2m9bl1d1h2nc52pnmiyx993mwzmfjrv04l3wn5hyznyr8b")))) + "1rgsj49gnx361hnb3vn6c1h17497qh22yc3r70l1r6w0mw71bixz")))) (build-system python-build-system) (propagated-inputs `(("python-flask" ,python-flask) @@ -3527,17 +3780,13 @@ Python.") (define-public python-slugify (package (name "python-slugify") - (version "3.0.4") + (version "4.0.1") (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))) + (base32 "0w22fapghmzk3xdasc4dn7h8sl58l08d1h5zbf72dh80drv1g9b9")))) (propagated-inputs `(("python-unidecode" ,python-unidecode))) (arguments @@ -4398,3 +4647,73 @@ Agent is a web crawler. It uses the list of registered robots from "This module provides an interface that queries the Apache Solr server using a pure Python implementation.") (license license:bsd-3))) + +(define-public python-http-ece + (package + (name "python-http-ece") + (version "1.1.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/web-push-libs/encrypted-content-encoding") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0bp4cc0xc123i72h80ax3qz3ixfwx3j7pw343kc7i6kdvfi8klx7")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'change-directory + (lambda _ (chdir "python") #t))))) + (propagated-inputs + `(("python-cryptography" ,python-cryptography))) + (native-inputs + `(("python-coverage" ,python-coverage) + ("python-flake8" ,python-flake8) + ("python-mock" ,python-mock) + ("python-nose" ,python-nose))) + (home-page "https://github.com/web-push-libs/encrypted-content-encoding") + (synopsis "Encrypted Content Encoding for HTTP") + (description + "This package provices a simple implementation of Encrypted Content +Encoding for HTTP.") + (license license:expat))) + +(define-public python-cloudscraper + (package + (name "python-cloudscraper") + (version "1.2.46") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cloudscraper" version)) + (sha256 + (base32 + "1br4p648yassywsd7whz1c7s10rwdysnd7wdqfjq9bksqfxrac3r")) + (modules '((guix build utils))) + (snippet + '(with-directory-excursion "cloudscraper" + (for-each delete-file + '("captcha/2captcha.py" + "captcha/9kw.py" + "captcha/anticaptcha.py" + "captcha/deathbycaptcha.py" + "interpreters/js2py.py" + "interpreters/v8.py")) + #t)))) + (build-system python-build-system) + (propagated-inputs + `(("python-requests" ,python-requests) + ("python-requests-toolbelt" ,python-requests-toolbelt-0.9.1) + ("python-pyparsing" ,python-pyparsing-2.4.7))) + (native-inputs + `(("python-pytest" ,python-pytest))) + (home-page "https://github.com/venomous/cloudscraper") + (synopsis "Cloudflare anti-bot bypass") + (description + "This module acts as a webbrowser solving Cloudflare's Javascript +challenges.") + (license license:expat))) |