;;; 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>
;;; 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.
;;;
#:use-module (gnu packages databases)
#:use-module (gnu packages django)
#:use-module (gnu packages groff)
+ #:use-module (gnu packages libevent)
#:use-module (gnu packages libffi)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
`(("python-pycares" ,python-pycares)))
(arguments
`(#:tests? #f)) ;tests require internet access
- (home-page "http://github.com/saghul/aiodns")
+ (home-page "https://github.com/saghul/aiodns")
(synopsis "Simple DNS resolver for asyncio")
(description "@code{aiodns} provides a simple way for doing
asynchronous DNS resolutions with a synchronous looking interface by
(define-public python-furl
(package
(name "python-furl")
- (version "0.5.6")
+ (version "2.0.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "furl" version))
(sha256
(base32
- "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
+ "1v2lakx03d5w8954a39ki44xv5mllnq0a0avhxykv9hrzg0yvjpx"))))
(build-system python-build-system)
(propagated-inputs
`(("python-six" ,python-six)
("python-orderedmultidict" ,python-orderedmultidict)))
(native-inputs
- `(("python-pycodestyle" ,python-pycodestyle)))
+ `(("python-flake8" ,python-flake8)))
(home-page "https://github.com/gruns/furl")
(synopsis "URL manipulation in Python")
(description "Furl provides an easy-to-use alternative to the
(define-public httpie
(package
(name "httpie")
- (version "2.0.0")
+ (version "2.2.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "httpie" version))
(sha256
(base32
- "02bw20cwv3a1lzrn919dk25dq4v81x6q786zlrqsqzhsdxszj14c"))))
+ "18058k0i3cc4ixvgzj882w693lf40283flvspbrvd876iq42ib1i"))))
(build-system python-build-system)
(arguments
;; The tests attempt to access external web servers, so we cannot run them.
(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")
(define-public python-html5-parser
(package
(name "python-html5-parser")
- (version "0.4.5")
+ (version "0.4.9")
(source (origin
(method url-fetch)
(uri (pypi-uri "html5-parser" version))
(sha256
(base32
- "01mx33sx4dhl4kj6wc48nj6jz7ry60rkhjv0s6k8h5xmjf5yy0x9"))))
+ "13yl3vnf3sxl05m0nhpngnrz3g1jvyahd33lys3m3hfb91l8zzi5"))))
(build-system python-build-system)
(native-inputs
`(("pkg-config" ,pkg-config)))
(define-public python-pycurl
(package
(name "python-pycurl")
- (version "7.43.0.2")
+ (version "7.43.0.5")
(source
(origin
(method url-fetch)
(uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
version ".tar.gz"))
(sha256
- (base32 "1915kb04k1j4y6k1dx1sgnbddxrl9r1n4q928if2lkrdm73xy30g"))))
+ (base32 "1cwlb76vddqp2mxqvjbhf367caddzy82rhangddjjhjqaj8x4zgc"))))
(build-system python-build-system)
(arguments
;; The tests attempt to access external web servers, so we cannot run
(define-public python-cssselect
(package
(name "python-cssselect")
- (version "0.9.2")
- (source
- (origin
- (method url-fetch)
- (uri (pypi-uri "cssselect" version))
- (sha256
- (base32
- "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
+ (version "1.1.0")
+ (source (origin
+ ;; The PyPI release does not contain tests.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/scrapy/cssselect")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0xslrnhbrmgakp4xg6k26qffay3kqffp3a2z2sk27c65rwxa79kc"))))
(build-system python-build-system)
(arguments
- ;; tests fail with message
- ;; AttributeError: 'module' object has no attribute 'tests'
- `(#:tests? #f))
- (home-page
- "https://pythonhosted.org/cssselect/")
- (synopsis
- "CSS3 selector parser and translator to XPath 1.0")
+ `(#:phases (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "pytest" "-vv"))))))
+ (native-inputs
+ `(("python-lxml" ,python-lxml)
+ ("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/scrapy/cssselect")
+ (synopsis "CSS3 selector parser and translator to XPath 1.0")
(description
- "Cssselect ia a Python module that parses CSS3 Selectors and translates
+ "Cssselect ia a Python module that parses CSS3 Selectors and translates
them to XPath 1.0 expressions. Such expressions can be used in lxml or
another XPath engine to find the matching elements in an XML or HTML document.")
(license license:bsd-3)))
(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")
(define-public python-zope-interface
(package
(name "python-zope-interface")
- (version "4.7.2")
+ (version "5.1.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.interface" version))
(sha256
(base32
- "0r9kvb1q3lxrdhxabliv9nwhjsdmn1n0vcjv93rlqkyb7yyh24gx"))))
+ "03nrl6b8cb600dnnh46y149awvrm0gxyqgwq5hdw3lvys8mw9r20"))))
(build-system python-build-system)
+ (arguments '(#:tests? #f)) ; test suite can't find python-zope-testing
(native-inputs
- `(("python-zope-event" ,python-zope-event)))
+ `(("python-coverage" ,python-coverage)
+ ("python-nose" ,python-nose)
+ ("python-zope-event" ,python-zope-event)
+ ("python-zope-testing" ,python-zope-testing)))
(home-page "https://github.com/zopefoundation/zope.interface")
(synopsis "Python implementation of the \"design by contract\"
methodology")
(define-public python-zope-exceptions
(package
(name "python-zope-exceptions")
- (version "4.3")
+ (version "4.4")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.exceptions" version))
(sha256
(base32
- "04bjskwas17yscl8bs3l44maxspw1gdji0zcmr499fs420y9r9az"))))
+ "1nkgfwawswmyc6i0b8g3ymvja4mb507m8yhid8s4rbxq3dmqhwhd"))))
(build-system python-build-system)
(arguments
- '(#:tests? #f)) ; circular dependency with zope.testrunner
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "zope-testrunner" "--test-path=src"))))))
+ (native-inputs
+ `(("python-zope-testrunner" ,python-zope-testrunner-bootstrap)))
(propagated-inputs
`(("python-zope-interface" ,python-zope-interface)))
(home-page "https://pypi.org/project/zope.exceptions/")
that have uses outside of the Zope framework.")
(license license:zpl2.1)))
+(define-public python-zope-exceptions-bootstrap
+ (package
+ (inherit python-zope-exceptions)
+ (arguments `(#:tests? #f))
+ (propagated-inputs `())
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-exceptions
(package-with-python2 python-zope-exceptions))
(define-public python-zope-testrunner
(package
(name "python-zope-testrunner")
- (version "5.1")
+ (version "5.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.testrunner" version))
(sha256
(base32
- "0w3q66cy4crpj7c0hw0vvvvwf3g931rnvw7wwa20av7yqvv6ajim"))))
+ "0jyyf1dcz156q95x2y7yw2v420q2xn3cff0c5aci7hmdmcbn0gc7"))))
(build-system python-build-system)
(arguments
'(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
tests.")
(license license:zpl2.1)))
+(define-public python-zope-testrunner-bootstrap
+ (package
+ (inherit python-zope-testrunner)
+ (arguments `(#:tests? #f))
+ (propagated-inputs
+ `(("python-six" ,python-six)
+ ("python-zope-exceptions" ,python-zope-exceptions-bootstrap)))
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-testrunner
(package-with-python2 python-zope-testrunner))
(define-public python-zope-schema
(package
(name "python-zope-schema")
- (version "5.0.1")
+ (version "6.0.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.schema" version))
(sha256
(base32
- "0q93j0x52a42khw12al90jw2bk0wly3jwghql3a25zpwwxvn24ya"))))
+ "09jg47bxhfg1ahr1jxb5y0cbiszyk1j6fn1r1r7s6svjl3lbryr0"))))
(build-system python-build-system)
(arguments
- '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (if tests?
+ (invoke "zope-testrunner" "--test-path=src")
+ #t))))))
(propagated-inputs
`(("python-zope-event" ,python-zope-event)
("python-zope-interface" ,python-zope-interface)))
(define-public python-zope-configuration
(package
(name "python-zope-configuration")
- (version "4.3.1")
+ (version "4.4.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "zope.configuration" version))
(sha256
(base32
- "1qb88764fd7nkkmqv7fl9bxd1jirynkg5vbqkpqdiffnkxzp85kf"))))
+ "0g6vrl7y27z9cj5xyrww9xlzk4npj55mgmlrcd9d2nj08jn2pw79"))))
(build-system python-build-system)
- (arguments
- '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
(native-inputs
- `(("python-zope-testing" ,python-zope-testing)
+ `(("python-manuel" ,python-manuel)
+ ("python-zope-testing" ,python-zope-testing)
("python-zope-testrunner" ,python-zope-testrunner)))
(propagated-inputs
`(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
Markup Language.")
(license license:zpl2.1)))
+(define-public python-zope-configuration-bootstrap
+ (package
+ (inherit python-zope-configuration)
+ (arguments `(#:tests? #f))
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-configuration
(package-with-python2 python-zope-configuration))
+(define-public python-zope-copy
+ (package
+ (name "python-zope-copy")
+ (version "4.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "zope.copy" version))
+ (sha256
+ (base32
+ "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
+ (propagated-inputs
+ `(("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-zope-component" ,python-zope-component-bootstrap)
+ ("python-zope-location" ,python-zope-location-bootstrap)
+ ("python-zope-testing" ,python-zope-testing)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/zope.copy")
+ (synopsis "Pluggable object copying mechanism")
+ (description
+ "This package provides a pluggable mechanism for copying persistent objects.")
+ (license license:zpl2.1)))
+
(define-public python-zope-proxy
(package
(name "python-zope-proxy")
- (version "4.3.4")
+ (version "4.3.5")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.proxy" version))
(sha256
(base32
- "1g0rcfnbchpvqhm76aixqlz544dawrgmy8gw9zwmijhk6wfl9f26"))))
+ "14h7nyfbl5vpfk0rbviy4ygdfx0yx5kncvg6jpbdb0dhwna0ssm6"))))
(build-system python-build-system)
- (arguments
- '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
(native-inputs
- `(("python-zope-testrunner" ,python-zope-testrunner)))
+ `(("python-zope-security" ,python-zope-security-bootstrap)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
(propagated-inputs
`(("python-zope-interface" ,python-zope-interface)))
(home-page "https://pypi.org/project/zope.proxy/")
brokering, etc.) for which the proxy is responsible.")
(license license:zpl2.1)))
+(define-public python-zope-proxy-bootstrap
+ (package
+ (inherit python-zope-proxy)
+ (arguments `(#:tests? #f))
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-proxy
(package-with-python2 python-zope-proxy))
+(define-public python-zope-hookable
+ (package
+ (name "python-zope-hookable")
+ (version "5.0.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "zope.hookable" version))
+ (sha256
+ (base32
+ "0hc82lfr7bk53nvbxvjkibkarngyrzgfk2i6bg8wshl0ly0pdl19"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-coverage" ,python-coverage)
+ ("python-zope-testing" ,python-zope-testing)))
+ (home-page "https://github.com/zopefoundation/zope.hookable")
+ (synopsis "Zope hookable")
+ (description "This package supports the efficient creation of hookable
+objects, which are callable objects that are meant to be optionally replaced.
+The idea is that you create a function that does some default thing and make i
+hookable. Later, someone can modify what it does by calling its sethook method
+and changing its implementation. All users of the function, including those
+that imported it, will see the change.")
+ (license license:zpl2.1)))
+
(define-public python-zope-location
(package
(name "python-zope-location")
Zope3, which are are special objects that have a structural location.")
(license license:zpl2.1)))
+(define-public python-zope-location-bootstrap
+ (package
+ (inherit python-zope-location)
+ (arguments `(#:tests? #f))
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-location
(package-with-python2 python-zope-location))
(define-public python-zope-security
(package
(name "python-zope-security")
- (version "5.1.0")
+ (version "5.1.1")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.security" version))
(sha256
(base32
- "1npfrgnm202v48wavpwn3450dsn7az12lfww95vbhxyjl11f14yb"))))
+ "11lfw67cigscfax9c5j63xcvz2qcj724zx5fcdqyc94am2glim0h"))))
(build-system python-build-system)
- (arguments
- '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
(propagated-inputs
`(("python-zope-component" ,python-zope-component)
("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
("python-zope-proxy" ,python-zope-proxy)
("python-zope-schema" ,python-zope-schema)))
(native-inputs
- `(("python-zope-configuration" ,python-zope-configuration)
- ("python-zope-testrunner" ,python-zope-testrunner)
- ("python-zope-testing" ,python-zope-testing)))
+ `(("python-btrees" ,python-btrees)
+ ("python-zope-component" ,python-zope-component-bootstrap)
+ ("python-zope-configuration" ,python-zope-configuration-bootstrap)
+ ("python-zope-location" ,python-zope-location-bootstrap)
+ ("python-zope-testing" ,python-zope-testing)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
(home-page "https://pypi.org/project/zope.security/")
(synopsis "Zope security framework")
(description "Zope.security provides a generic mechanism to implement
security policies on Python objects.")
(license license:zpl2.1)))
+(define-public python-zope-security-bootstrap
+ (package
+ (inherit python-zope-security)
+ (arguments `(#:tests? #f))
+ (propagated-inputs
+ `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
+ ("python-zope-interface" ,python-zope-interface)
+ ("python-zope-proxy" ,python-zope-proxy-bootstrap)
+ ("python-zope-schema" ,python-zope-schema)))
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-security
(package-with-python2 python-zope-security))
(define-public python-zope-component
(package
(name "python-zope-component")
- (version "4.3.0")
+ (version "4.6.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "zope.component" version))
(sha256
(base32
- "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
+ "14iwp95hh6q5dj4k9h1iw75cbp89bs27nany4dinyglb44c8jqli"))))
(build-system python-build-system)
(arguments
- ;; Skip tests due to circular dependency with python-zope-security.
- '(#:tests? #f))
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (invoke "python" "setup.py" "test"))))))
(native-inputs
- `(("python-zope-testing" ,python-zope-testing)))
- (propagated-inputs
- `(("python-zope-event" ,python-zope-event)
- ("python-zope-interface" ,python-zope-interface)
+ `(("python-persistent" ,python-persistent)
+ ("python-zope-configuration" ,python-zope-configuration-bootstrap)
("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
- ("python-zope-configuration" ,python-zope-configuration)))
+ ("python-zope-location" ,python-zope-location-bootstrap)
+ ("python-zope-proxy" ,python-zope-proxy-bootstrap)
+ ("python-zope-security" ,python-zope-security-bootstrap)
+ ("python-zope-testing" ,python-zope-testing)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (propagated-inputs
+ `(("python-zope-deferredimport" ,python-zope-deferredimport)
+ ("python-zope-deprecation" ,python-zope-deprecation)
+ ("python-zope-event" ,python-zope-event)
+ ("python-zope-hookable" ,python-zope-hookable)
+ ("python-zope-interface" ,python-zope-interface)))
(home-page "https://github.com/zopefoundation/zope.component")
(synopsis "Zope Component Architecture")
(description "Zope.component represents the core of the Zope Component
facilities for defining, registering and looking up components.")
(license license:zpl2.1)))
+(define-public python-zope-component-bootstrap
+ (package
+ (inherit python-zope-component)
+ (arguments `(#:tests? #f))
+ (native-inputs `())
+ (properties `((hidden? . #t)))))
+
(define-public python2-zope-component
(package-with-python2 python-zope-component))
+(define-public python-zope-deferredimport
+ (package
+ (name "python-zope-deferredimport")
+ (version "4.3.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "zope.deferredimport" version))
+ (sha256
+ (base32
+ "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-zope-proxy" ,python-zope-proxy)))
+ (native-inputs
+ `(("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/zope.deferredimport")
+ (synopsis "Defer imports until used by code")
+ (description
+ "Often, especially for package modules, you want to import names for
+convenience, but not actually perform the imports until necessary. The
+@code{zope.deferredimport} package provided facilities for defining names in
+modules that will be imported from somewhere else when used. You can also cause
+deprecation warnings to be issued when a variable is used.")
+ (license license:zpl2.1)))
+
(define-public python-ndg-httpsclient
(package
(name "python-ndg-httpsclient")
,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")
- (version "2.22.0")
+ (version "2.23.0")
(source (origin
(method url-fetch)
(uri (pypi-uri "requests" version))
(sha256
(base32
- "1d5ybh11jr5sm7xp6mz8fyc7vrp4syifds91m7sj60xalal0gq0i"))))
+ "1rhpg0jb08v0gd7f19jjiwlcdnxpmqi1fhvw7r4s9avddi4kvx5k"))))
(build-system python-build-system)
(propagated-inputs
`(("python-certifi" ,python-certifi)
(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
- (package (inherit python-requests)
- (version "2.7.0")
- (source (origin
- (method url-fetch)
- (uri (pypi-uri "requests" version))
- (sha256
- (base32
- "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
+ "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
+ (propagated-inputs
+ `(("python-urllib3" ,python-urllib3-1.24)
+ ("python-idna" ,python-idna-2.7)
+ ,@(package-propagated-inputs python-requests)))))
(define-public python2-requests
(package-with-python2 python-requests))
(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)
("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
(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")
(define-public python-urllib3
(package
(name "python-urllib3")
- (version "1.25.3")
+ (version "1.25.9")
(source
(origin
(method url-fetch)
(uri (pypi-uri "urllib3" version))
(sha256
(base32
- "0cij8qcvvpj62g1q8n785qjkdymfh4b7vf45si4sw64l41rr3rfv"))))
+ "09rmjqm5syhhc8fx3v06h3yv6cqy0b1081jg8wm5grpwpr72j61h"))))
(build-system python-build-system)
(arguments `(#:tests? #f))
(propagated-inputs
`(("python-gevent" ,python-gevent)
("python-requests" ,python-requests)))
(native-inputs
- `(("python-nose" ,python-nose)))
+ `(("python-nose" ,python-nose)
+ ("python-zope.interface" ,python-zope-interface)
+ ("python-zope.event" ,python-zope-event)))
(home-page "https://github.com/kennethreitz/grequests")
(synopsis "Python library for asynchronous HTTP requests")
(description "GRequests is a Python library that allows you to use
("python-itsdangerous" ,python-itsdangerous)
("python-passlib" ,python-passlib)
("python-tox" ,python-tox)))
- (home-page "http://github.com/carsongee/flask-htpasswd")
+ (home-page "https://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
(define-public python-flask-sqlalchemy
(package
(name "python-flask-sqlalchemy")
- (version "2.4.0")
+ (version "2.4.4")
(source (origin
(method url-fetch)
(uri (pypi-uri "Flask-SQLAlchemy" version))
(sha256
(base32
- "0nnllf0ddbh9jlhngnyjj98lbxgxr1csaplllx0caw98syq0k5hc"))))
+ "1rgsj49gnx361hnb3vn6c1h17497qh22yc3r70l1r6w0mw71bixz"))))
(build-system python-build-system)
(propagated-inputs
`(("python-flask" ,python-flask)
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/maxcountryman/flask-login.git")
+ (url "https://github.com/maxcountryman/flask-login")
(commit version)))
(file-name (git-file-name name version))
(sha256
(origin
(method git-fetch)
(uri (git-reference
- (url "https://github.com/edgewall/genshi.git")
+ (url "https://github.com/edgewall/genshi")
(commit version)))
(file-name (git-file-name name version))
(sha256
(define-public python-bottle
(package
(name "python-bottle")
- (version "0.12.13")
+ (version "0.12.18")
(source
(origin
(method url-fetch)
(uri (pypi-uri "bottle" version))
(sha256
(base32
- "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
+ "17pn43kzr7m6czjbm4nda7kzs4ap9mmb30qfbhifyzas2i5vf688"))))
(build-system python-build-system)
(home-page "http://bottlepy.org/")
(synopsis "WSGI framework for small web-applications.")
(build-system python-build-system)
(arguments
`(#:tests? #f)) ;tests require internet access
- (home-page "http://github.com/saghul/pycares")
+ (home-page "https://github.com/saghul/pycares")
(synopsis "Python interface for @code{c-ares}")
(description "@code{pycares} is a Python module which provides an
interface to @code{c-ares}, a C library that performs DNS requests and
(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
(origin
(method url-fetch)
(uri (pypi-uri "tinycss2" version))
+ (patches (search-patches "python-tinycss2-flake8-compat.patch"))
(sha256
(base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
(build-system python-build-system)
hard or impossible to fix in cssselect.")
(license license:bsd-3)))
+(define-public python-uvloop
+ (package
+ (name "python-uvloop")
+ (version "0.14.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "uvloop" version))
+ (sha256
+ (base32 "07j678z9gf41j98w72ysrnb5sa41pl5yxd7ib17lcwfxqz0cjfhj"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f ;FIXME: tests hang and with some errors in the way
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'preparations
+ (lambda _
+ ;; Use packaged libuv.
+ (substitute* "setup.py" (("self.use_system_libuv = False")
+ "self.use_system_libuv = True"))
+ #t)))))
+ (native-inputs
+ `(("python-aiohttp" ,python-aiohttp)
+ ("python-cython" ,python-cython)
+ ("python-flake8" ,python-flake8)
+ ("python-psutil" ,python-psutil)
+ ("python-pyopenssl" ,python-pyopenssl)
+ ("python-twine" ,python-twine)))
+ (inputs
+ `(("libuv" ,libuv)))
+ (home-page "https://github.com/MagicStack/uvloop")
+ (synopsis "Fast implementation of asyncio event loop on top of libuv")
+ (description
+ "@code{uvloop} is a fast, drop-in replacement of the built-in asyncio
+event loop. It is implemented in Cython and uses libuv under the hood.")
+ (license license:expat)))
+
(define-public gunicorn
(package
(name "gunicorn")
(package
(inherit gunicorn)
(name "gunicorn")
- (arguments `(#:tests? #f))
- (properties '((hidden? . #t)))
+ (arguments `(#:tests? #f))
+ (properties '((hidden? . #t)))
(native-inputs `())))
+(define-public python-httptools
+ (package
+ (name "python-httptools")
+ (version "0.1.1")
+ (source
+ (origin
+ ;; PyPI tarball comes with a vendored http-parser and no tests.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/MagicStack/httptools")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0g08128x2ixsiwrzskxc6c8ymgzs39wbzr5mhy0mjk30q9pqqv77"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'preparations
+ (lambda _
+ ;; Skip a failing test (AssertionError). Bug report:
+ ;; https://github.com/MagicStack/httptools/issues/10.
+ (substitute* "tests/test_parser.py"
+ ((" def test_parser_response_1")
+ (string-append
+ " @unittest.skip(\"Disabled.\")\n"
+ " def test_parser_response_1")))
+ ;; Use packaged http-parser.
+ (substitute* "setup.py" (("self.use_system_http_parser = False")
+ "self.use_system_http_parser = True"))
+ ;; This path is hardcoded. Hardcode our own.
+ (substitute* "httptools/parser/cparser.pxd"
+ (("../../vendor/http-parser")
+ (string-append (assoc-ref %build-inputs "http-parser")
+ "/include")))
+ ;; Don't force Cython version.
+ (substitute* "setup.py" (("Cython==") "Cython>="))
+ #t)))))
+ (native-inputs
+ `(("python-cython" ,python-cython)
+ ("python-pytest" ,python-pytest)))
+ (inputs
+ `(("http-parser" ,http-parser)))
+ (home-page "https://github.com/MagicStack/httptools")
+ (synopsis "Collection of framework independent HTTP protocol utils")
+ (description
+ "@code{httptools} is a Python binding for the nodejs HTTP parser.")
+ (license license:expat)))
+
+(define-public python-uvicorn
+ (package
+ (name "python-uvicorn")
+ (version "0.11.8")
+ (source
+ (origin
+ ;; PyPI tarball has no tests.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/encode/uvicorn")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "00iidg5ysp7k00bw3kmkvr8mghnh4jdi0p2ryiarhryf8wz2r3fy"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key inputs outputs tests? #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (invoke "pytest" "-vv"))))))
+ (native-inputs
+ `(("python-black" ,python-black)
+ ("python-codecov" ,python-codecov)
+ ("python-flake8" ,python-flake8)
+ ("python-isort" ,python-isort)
+ ("python-mypy" ,python-mypy)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-mock" ,python-pytest-mock)
+ ("python-requests" ,python-requests)))
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-h11" ,python-h11)
+ ("python-httptools" ,python-httptools)
+ ("python-pyyaml" ,python-pyyaml)
+ ("python-uvloop" ,python-uvloop)
+ ("python-watchgod" ,python-watchgod)
+ ("python-websockets" ,python-websockets)
+ ("python-wsproto" ,python-wsproto)))
+ (home-page "https://github.com/encode/uvicorn")
+ (synopsis "Fast ASGI server implementation")
+ (description
+ "@code{uvicorn} is a fast ASGI server implementation, using @code{uvloop}
+and @code{httptools}. It currently supports HTTP/1.1 and WebSockets. Support
+for HTTP/2 is planned.")
+ (license license:bsd-3)))
+
(define-public python-translation-finder
(package
(name "python-translation-finder")
@acronym{TLS, Transport Layer Security} support.")
(license license:bsd-2)))
+(define-public python-httpcore
+ (package
+ (name "python-httpcore")
+ (version "0.10.2")
+ (source
+ (origin
+ ;; PyPI tarball does not contain tests.
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/encode/httpcore")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "00gn8nfv814rg6fj7xv97mrra3fvx6fzjcgx9y051ihm6hxljdsi"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'remove-unavailable-tests
+ (lambda _
+ ;; These tests require 'mitmproxy' which is not packaged.
+ (for-each (lambda (f)
+ (delete-file f))
+ '("tests/conftest.py"
+ "tests/sync_tests/test_interfaces.py"
+ "tests/async_tests/test_interfaces.py"))
+ #t))
+ (add-after 'remove-unavailable-tests 'force-h11-version
+ ;; Allow build with h11 >= 0.10.
+ (lambda _
+ (substitute* "setup.py" (("h11>=0.8,<0.10") "h11"))
+ #t))
+ (replace 'check
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (add-installed-pythonpath inputs outputs)
+ (invoke "pytest" "-vv" "--cov=httpcore"
+ "--cov=tests" "tests"))))))
+ (native-inputs
+ `(;; ("mitmproxy" ,mitmproxy) ;; TODO: Package this.
+ ("python-autoflake" ,python-autoflake)
+ ("python-flake8" ,python-flake8)
+ ("python-flake8-bugbear" ,python-flake8-bugbear)
+ ("python-flake8-pie" ,python-flake8-pie)
+ ("python-isort" ,python-isort)
+ ("python-mypy" ,python-mypy)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-asyncio" ,python-pytest-asyncio)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-trio" ,python-pytest-trio)
+ ("python-uvicorn" ,python-uvicorn)
+ ("python-trustme" ,python-trustme)))
+ (propagated-inputs
+ `(("python-h11" ,python-h11)
+ ("python-h2" ,python-h2)
+ ("python-sniffio" ,python-sniffio)
+ ("python-trio" ,python-trio)
+ ("python-trio-typing" ,python-trio-typing)))
+ (home-page "https://github.com/encode/httpcore")
+ (synopsis "Minimal, low-level HTTP client")
+ (description
+ "HTTP Core provides a minimal and low-level HTTP client, which does one
+thing only: send HTTP requests.
+
+Some things HTTP Core does do:
+
+@itemize
+@item Sending HTTP requests.
+@item Provides both sync and async interfaces.
+@item Supports HTTP/1.1 and HTTP/2.
+@item Async backend support for asyncio and trio.
+@item Automatic connection pooling.
+@item HTTP(S) proxy support.
+@end itemize")
+ (license license:bsd-3)))
+
(define-public python-websockets
(package
(name "python-websockets")
than 326,000 known user-agents. Users can pick a random one, or select one
based on filters.")
(license license:expat)))
+
+(define-public python-flask-restx
+ (package
+ (name "python-flask-restx")
+ (version "0.2.0")
+ (source
+ ;; We fetch from the Git repo because there are no tests in the PyPI
+ ;; archive.
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/python-restx/flask-restx")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0xf2vkmdngp9cv9klznizai4byxjcf0iqh1pr4b83nann0jxqwy7"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-aniso8601" ,python-aniso8601)
+ ("python-flask" ,python-flask)
+ ("python-jsonschema" ,python-jsonschema)
+ ("python-pytz" ,python-pytz)))
+ (native-inputs
+ `(("python-blinker" ,python-blinker)
+ ("python-faker" ,python-faker)
+ ("python-pytest" ,python-pytest)
+ ("python-pytest-benchmark"
+ ,python-pytest-benchmark)
+ ("python-pytest-flask" ,python-pytest-flask)
+ ("python-pytest-mock" ,python-pytest-mock)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ (invoke "pytest" "--benchmark-skip" "-k"
+ ;; Those tests need internet access
+ "not test_check and not test_valid_value_check"))))))
+ (home-page "https://github.com/python-restx/flask-restx")
+ (synopsis
+ "Framework for fast, easy and documented API development with Flask")
+ (description
+ "Flask-RESTX is an extension for Flask that adds support for quickly building
+REST APIs. Flask-RESTX encourages best practices with minimal setup. If you are familiar
+ with Flask, Flask-RESTX should be easy to pick up. It provides a coherent collection of
+decorators and tools to describe your API and expose its documentation properly using
+Swagger.")
+ (license license:bsd-3)))
+
+(define-public python-manuel
+ (package
+ (name "python-manuel")
+ (version "1.10.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "manuel" version))
+ (sha256
+ (base32
+ "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-six" ,python-six)))
+ (native-inputs
+ `(("python-zope-testing" ,python-zope-testing)))
+ (home-page "https://pypi.org/project/manuel/")
+ (synopsis "Build tested documentation")
+ (description
+ "Manuel lets you mix and match traditional doctests with custom test syntax.")
+ (license license:asl2.0)))
+
+(define-public python-persistent
+ (package
+ (name "python-persistent")
+ (version "4.6.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "persistent" version))
+ (sha256
+ (base32
+ "0imm9ji03lhkpcfmhid7x5209ix8g2rlgki9ik1qxks4b8sm8gzq"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-cffi" ,python-cffi)
+ ("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-manuel" ,python-manuel)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/persistent/")
+ (synopsis "Translucent persistent objects")
+ (description "This package contains a generic persistence implementation for
+Python. It forms the core protocol for making objects interact
+\"transparently\" with a database such as the ZODB.")
+ (license license:zpl2.1)))
+
+(define-public python-btrees
+ (package
+ (name "python-btrees")
+ (version "4.7.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "BTrees" version))
+ (sha256
+ (base32
+ "0iiq0g9k1g6qgqq84q9h6639vlvzznk1rgdm0rfcnnqkbkmsbr3w"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-persistent" ,python-persistent)
+ ("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-persistent" ,python-persistent)
+ ("python-transaction" ,python-transaction)
+ ("python-zope-testrunner" ,python-zope-testrunner)))
+ (home-page "https://github.com/zopefoundation/BTrees")
+ (synopsis "Scalable persistent object containers")
+ (description
+ "This package contains a set of persistent object containers built around a
+modified BTree data structure. The trees are optimized for use inside ZODB's
+\"optimistic concurrency\" paradigm, and include explicit resolution of
+conflicts detected by that mechanism.")
+ (license license:zpl2.1)))
+
+(define-public python-transaction
+ (package
+ (name "python-transaction")
+ (version "3.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "transaction" version))
+ (sha256
+ (base32
+ "0bdaks31bgfh78wnj3sij24bfysmqk25crsis6amz8kzrc0d82iv"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-zope-interface" ,python-zope-interface)))
+ (native-inputs
+ `(("python-coverage" ,python-coverage)
+ ("python-mock" ,python-mock)
+ ("python-nose" ,python-nose)))
+ (home-page "https://github.com/zopefoundation/transaction")
+ (synopsis "Transaction management for Python")
+ (description "This package contains a generic transaction implementation
+for Python. It is mainly used by the ZODB.")
+ (license license:zpl2.1)))
+
+(define-public python-robot-detection
+ (package
+ (name "python-robot-detection")
+ (version "0.4")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "robot-detection" version))
+ (sha256
+ (base32
+ "1xd2jm3yn31bnk1kqzggils2rxj26ylxsfz3ap7bhr3ilhnbg3rx"))))
+ (build-system python-build-system)
+ (arguments '(#:tests? #f)) ; Tests not shipped in pypi release.
+ (propagated-inputs `(("python-six" ,python-six)))
+ (home-page "https://github.com/rory/robot-detection")
+ (synopsis "Detect web crawlers")
+ (description
+ "@code{robot_detection} is a python module to detect if a given HTTP User
+Agent is a web crawler. It uses the list of registered robots from
+@url{http://www.robotstxt.org}.")
+ (license license:gpl3+)))
+
+(define-public python-pysolr
+ (package
+ (name "python-pysolr")
+ (version "3.9.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "pysolr" version))
+ (sha256
+ (base32
+ "1rj5jmscvxjwcmlfi6hmkj44l4x6n3ln5p7d8d18j566hzmmzw3f"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f)) ; Tests require network access.
+ (propagated-inputs
+ `(("python-requests" ,python-requests)))
+ (native-inputs
+ `(("python-setuptools-scm" ,python-setuptools-scm)))
+ (home-page "https://github.com/django-haystack/pysolr/")
+ (synopsis "Lightweight python wrapper for Apache Solr")
+ (description
+ "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)))