;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
-;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2018 Vagrant Cascadian <vagrant@debian.org>
+;;; Copyright © 2018 Nam Nguyen <namn@berkeley.edu>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2019 Clément Lassieur <clement@lassieur.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages protobuf)
#:use-module (gnu packages python)
+ #:use-module (gnu packages python-check)
#:use-module (gnu packages python-web)
+ #:use-module (gnu packages python-xyz)
#:use-module (gnu packages time)
#:use-module (gnu packages tls)
#:use-module ((guix licenses) #:prefix license:)
(define-public python-base58
(package
(name "python-base58")
- (version "1.0.0")
+ (version "1.0.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "base58" version))
(sha256
(base32
- "0lgnk7ycdxwhk2bkygl30nsks56bvrdj79ix76iv965pz808pzn5"))))
+ "0q1yr0n5jaf17xq98m7dma6z4rh8p19ch55l1s09gi3rk5ckqycs"))))
(build-system python-build-system)
(native-inputs
`(("python-pyhamcrest" ,python-pyhamcrest)))
(define-public python-bcrypt
(package
(name "python-bcrypt")
- (version "3.1.4")
+ (version "3.1.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "bcrypt" version))
(sha256
- (base32
- "13cyrnqwkhc70rs6dg65z4yrrr3dc42fhk11804fqmci9hvimvb7"))))
+ (base32 "0hhywhxx301cxivgxrpslrangbfpccc8y83qbwn1f57cab3nj00b"))))
(build-system python-build-system)
(native-inputs
`(("python-pycparser" ,python-pycparser)
(define-public python-passlib
(package
(name "python-passlib")
- (version "1.7.1")
+ (version "1.7.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "passlib" version))
(sha256
- (base32
- "1q2khqpj9rlcgdmkypjdq1kswvhjf72bq0zk2cv669cc2dj8z51x"))))
+ (base32 "1a5ngap7kq0b4azq8nlfg6xg5bcl1i0v1sbynhmbr631jgpnqrld"))))
(build-system python-build-system)
(native-inputs
`(("python-nose" ,python-nose)))
;; some tests require access to "$HOME/.cython"
(lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
(home-page "https://bitbucket.org/ecollins/passlib")
- (synopsis
- "Comprehensive password hashing framework")
+ (synopsis "Comprehensive password hashing framework")
(description
"Passlib is a password hashing library for Python 2 & 3, which provides
cross-platform implementations of over 30 password hashing algorithms, as well
(source
(origin
(method url-fetch)
- (uri (string-append
- "https://pypi.python.org/packages/source/p/py-bcrypt/py-bcrypt-"
- version
- ".tar.gz"))
+ (uri (pypi-uri "py-bcrypt" version))
(sha256
(base32
"0y6smdggwi5s72v6p1nn53dg6w05hna3d264cq6kas0lap73p8az"))))
system hashes passwords using a version of Bruce Schneier's Blowfish block
cipher with modifications designed to raise the cost of off-line password
cracking and frustrate fast hardware implementation. The computation cost of
-the algorithm is parametised, so it can be increased as computers get faster.
+the algorithm is parametrised, so it can be increased as computers get faster.
The intent is to make a compromise of a password database less likely to
result in an attacker gaining knowledge of the plaintext passwords (e.g. using
John the Ripper).")
(define-public python-ecdsa
(package
(name "python-ecdsa")
- (version "0.13")
+ (version "0.14.1")
(source
(origin
(method url-fetch)
- (uri (string-append
- "https://pypi.python.org/packages/source/e/ecdsa/ecdsa-"
- version
- ".tar.gz"))
+ (uri (pypi-uri "ecdsa" version))
(sha256
- (base32
- "1yj31j0asmrx4an9xvsaj2icdmzy6pw0glfpqrrkrphwdpi1xkv4"))))
+ (base32 "13nx5cbfxc0gnax5zwdmp9xc40qd1llk62mv85jyrvqkbw017ik4"))))
(build-system python-build-system)
- (inputs
- `(("openssl" ,openssl)))
- (home-page
- "https://github.com/warner/python-ecdsa")
- (synopsis
- "ECDSA cryptographic signature library (pure python)")
+ (arguments
+ '(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _ (invoke "pytest"))))))
+ (propagated-inputs
+ `(("python-six" ,python-six)))
+ (native-inputs
+ `(("openssl" ,openssl)
+ ("python-pytest" ,python-pytest)))
+ (home-page "https://github.com/warner/python-ecdsa")
+ (synopsis "ECDSA cryptographic signature library (pure python)")
(description
"This is an easy-to-use implementation of ECDSA cryptography (Elliptic
Curve Digital Signature Algorithm), implemented purely in Python. With this
(add-before 'build 'set-build-env
;; pycrypto runs an autoconf configure script behind the scenes
(lambda _ (setenv "CONFIG_SHELL" (which "bash")) #t)))))
- (home-page "http://www.pycrypto.org/")
+ (home-page "https://www.dlitz.net/software/pycrypto/")
(synopsis "Cryptographic modules for Python")
(description
"Pycrypto is a collection of both secure hash functions (such as SHA256
(define-public python-keyring
(package
(name "python-keyring")
- (version "8.7")
+ (version "21.0.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "keyring" version))
(sha256
(base32
- "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
+ "1k0w3yh3fz0qp0cvkxdiinq9jzbrnc6bd88qpjz34x3cgcr94psz"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; https://github.com/jaraco/keyring/issues/414
+ '(begin (substitute* "tests/test_packaging.py"
+ (("ep, =") "(ep,) =")) #t))))
(build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'check
+ (lambda _
+ ;; Not clear why this test fails.
+ (delete-file "tests/test_packaging.py")
+ (substitute* "pytest.ini"
+ (("--black ") ""))
+ (invoke "pytest"))))))
(native-inputs
- `(("python-setuptools-scm" ,python-setuptools-scm)))
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-checkdocs" ,python-pytest-checkdocs)
+ ("python-pytest-cov" ,python-pytest-cov)
+ ("python-pytest-flake8" ,python-pytest-flake8)
+ ("python-setuptools-scm" ,python-setuptools-scm)))
(propagated-inputs
- `(("python-pycrypto" ,python-pycrypto)))
- (arguments
- `(#:tests? #f)) ;TODO: tests require pytest
+ `(("python-importlib-metadata" ,python-importlib-metadata)
+ ("python-secretstorage" ,python-secretstorage)))
(home-page "https://github.com/jaraco/keyring")
(synopsis "Store and access your passwords safely")
(description
service from python. It can be used in any application that needs safe
password storage.")
;; "MIT" and PSF dual license
+ (properties `((python2-variant . ,(delay python2-keyring))))
(license license:x11)))
(define-public python2-keyring
- (package-with-python2 python-keyring))
+ (let ((keyring (package-with-python2
+ (strip-python2-variant python-keyring))))
+ (package
+ (inherit keyring)
+ (name "python2-keyring")
+ (version "8.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "keyring" version))
+ (sha256
+ (base32
+ "0482rmi2x6p78wl2kz8qzyq21xz1sbbfwnv5x7dggar4vkwxhzfx"))))
+ (arguments
+ `(#:python ,python-2))
+ (native-inputs
+ `(("python2-pytest" ,python2-pytest)
+ ("python2-pytest-runner" ,python2-pytest-runner)
+ ("python2-setuptools-scm" ,python2-setuptools-scm)))
+ (propagated-inputs
+ `(("python2-pycrypto" ,python2-pycrypto))))))
(define-public python-certifi
(package
(name "python-certifi")
- (version "2017.1.23")
+ (version "2019.3.9")
(source (origin
(method url-fetch)
(uri (pypi-uri "certifi" version))
(sha256
(base32
- "1klrzl3hgvcf2mjk00g0k3kk1p2z27vzwnxivwar4vhjmjvpz1w1"))))
+ "1bnpw7hrf9i1l9gfxjnzi45hkrvzz0pyn9ia8m4mw7sxhgb08qdj"))))
(build-system python-build-system)
(home-page "https://certifi.io/")
(synopsis "Python CA certificate bundle")
(define-public python-cryptography-vectors
(package
(name "python-cryptography-vectors")
- (version "2.3.1")
+ (version "2.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "cryptography_vectors" version))
(sha256
(base32
- "0ijdck30p7jv8a0zwv8b7d30ciqrmmps62lm63l4k776vihrnkdz"))))
+ "1g38zw90510azyfrj6mxbslx2gp9yrnv5dac0w2819k9ssdznbgi"))))
(build-system python-build-system)
(home-page "https://github.com/pyca/cryptography")
(synopsis "Test vectors for the cryptography package")
(define-public python-cryptography
(package
(name "python-cryptography")
- (version "2.3.1")
+ (version "2.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "cryptography" version))
(sha256
(base32
- "1mnzf168vlxirq7fw9dm9zbvma7z8phc9cl5bffw5916m0y1244d"))))
+ "1inlnr36kl36551c9rcad99jmhk81v33by3glkadwdcgmi17fd76"))))
(build-system python-build-system)
(inputs
`(("openssl" ,openssl)))
(define-public python-pyopenssl
(package
(name "python-pyopenssl")
- (version "18.0.0")
+ (version "19.0.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pyOpenSSL" version))
(sha256
(base32
- "1055rb456nvrjcij3sqj6c6l3kmh5cqqay0nsmx3pxq07d1g3234"))))
+ "007j40y7x3k8xj54dy2qnij9lldfp71k9mkflhd9vqbdiwrndjmf"))))
(build-system python-build-system)
(arguments
'(#:phases
(add-after 'install 'check
(lambda* (#:key inputs outputs #:allow-other-keys)
(add-installed-pythonpath inputs outputs)
- (zero? (system* "py.test" "-v" "-k"
- (string-append
- ;; This test tries to look up certificates from
- ;; the compiled-in default path in OpenSSL, which
- ;; does not exist in the build environment.
- "not test_fallback_default_verify_paths "
- ;; This test attempts to make a connection to
- ;; an external web service.
- "and not test_set_default_verify_paths"))))))))
+ (invoke "py.test" "-v" "-k"
+ (string-append
+ ;; This test tries to look up certificates from
+ ;; the compiled-in default path in OpenSSL, which
+ ;; does not exist in the build environment.
+ "not test_fallback_default_verify_paths "
+ ;; This test attempts to make a connection to
+ ;; an external web service.
+ "and not test_set_default_verify_paths")))))))
(propagated-inputs
`(("python-cryptography" ,python-cryptography)
("python-six" ,python-six)))
(version "0.1.39")
(source
(origin
- (method url-fetch)
- (uri (string-append
- "https://github.com/tgalal/python-axolotl/archive/"
- version ".tar.gz"))
- (file-name (string-append name "-" version ".tar.gz"))
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/tgalal/python-axolotl")
+ (commit version)))
+ (file-name (git-file-name name version))
(patches (search-patches "python-axolotl-AES-fix.patch"))
(sha256
- (base32 "0badsgkgz0ir3hqynxzsfjgacppi874syvvmgccc6j164053x6zm"))))
+ (base32 "0xm9qgcwf6fq7rhzfcviwhbzcbj4i7wkxkab2z55fy1x82lya9g6"))))
(build-system python-build-system)
(arguments
`(#:phases
(define-public python-pynacl
(package
(name "python-pynacl")
- (version "1.2.1")
+ (version "1.3.0")
(source
(origin
(method url-fetch)
#t))
(sha256
(base32
- "1ada3qr83cliap6dk897vnvjkynij1kjqbwizdbgarazlyh8zlz0"))))
+ "0330wyvggm19xhmwmz9rrr97lzbv3siwfy50gmax3vvgs7nh0q8c"))))
(build-system python-build-system)
(arguments
`(#:phases
(define-public python-ecpy
(package
(name "python-ecpy")
- (version "0.8.2")
+ (version "0.10.0")
(source
(origin
(method url-fetch)
(uri (pypi-uri "ECPy" version))
(sha256
(base32
- "090fqnj8z0xm44jrfpll7j45r68m6kp7mjr7yxzg93j42h3sj285"))))
+ "1gc3i5s93zq6x1nkaxkq1dvmsc12vmrw0hns9f5s1hcb78ni52c8"))))
(build-system python-build-system)
(propagated-inputs
`(("python-future" ,python-future)))
(define-public python-pycryptodome
(package
(name "python-pycryptodome")
- (version "3.5.1")
+ (version "3.7.3")
(source
(origin
(method url-fetch)
(uri (pypi-uri "pycryptodome" version))
(sha256
(base32
- "15mc1h5ij1b6hcqvb048kb4k0ip64n2ky0zz0rml2s78ylv7g5dp"))))
+ "0dh6ky5ngxayyn5f6n7gdamjl49g3khz6pdx9sdnag1zwi8248hs"))))
(build-system python-build-system)
(home-page "https://www.pycryptodome.org")
(synopsis "Cryptographic library for Python")
(define-public python-m2crypto
(package
(name "python-m2crypto")
- (version "0.30.1")
+ (version "0.35.2")
(source
(origin
(method url-fetch)
(uri (pypi-uri "M2Crypto" version))
(sha256
- (base32 "1iizrpkn4c2n70nvcjqlmnk6fz3vddkrjmwavz1zlsnwv8f7bcm1"))))
+ (base32 "09yirf3w77w6f49q6nxhrjm9c3a4y9s30s1k09chqrw8zdgx8sjc"))))
(build-system python-build-system)
(inputs `(("openssl" ,openssl)))
(home-page "https://gitlab.com/m2crypto/m2crypto")
(define-public python-scrypt
(package
(name "python-scrypt")
- (version "0.8.6")
+ (version "0.8.7")
(source
(origin
(method url-fetch)
(uri (pypi-uri "scrypt" version))
(sha256
(base32
- "0b9nw10hfdl0jflm3b62q485ssc3f3f33lpg4yy407gs8wnrn8zq"))))
+ "0hjk71k3mgnl8siikm9lii9im8kv0rb7inkjzx78rnancra48xxr"))))
(build-system python-build-system)
(inputs
`(("openssl" ,openssl)))
(description "This is a set of Python bindings for the scrypt key
derivation function.")
(license license:bsd-2)))
+
+(define-public python-service-identity
+ (package
+ (name "python-service-identity")
+ (version "18.1.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "service_identity" version))
+ (sha256
+ (base32
+ "0b9f5qiqjy8ralzgwjgkhx82h6h8sa7532psmb8mkd65md5aan08"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-attrs" ,python-attrs)
+ ("python-pyasn1" ,python-pyasn1)
+ ("python-pyasn1-modules" ,python-pyasn1-modules)
+ ("python-pyopenssl" ,python-pyopenssl)))
+ (home-page "https://service-identity.readthedocs.io/")
+ (synopsis "Service identity verification for PyOpenSSL")
+ (description
+ "@code{service_identity} aspires to give you all the tools you need
+for verifying whether a certificate is valid for the intended purposes.
+In the simplest case, this means host name verification. However,
+service_identity implements RFC 6125 fully and plans to add other
+relevant RFCs too.")
+ (license license:expat)))
+
+(define-public python2-service-identity
+ (package-with-python2 python-service-identity))
+
+(define-public python-hkdf
+ (package
+ (name "python-hkdf")
+ (version "0.0.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "hkdf" version))
+ (sha256
+ (base32
+ "1jhxk5vhxmxxjp3zj526ry521v9inzzl8jqaaf0ma65w6k332ak2"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-nose" ,python-nose)))
+ (home-page "https://github.com/casebeer/python-hkdf")
+ (synopsis "HMAC-based Extract-and-Expand Key Derivation Function (HKDF)")
+ (description "This package provides a Python implementation of the HMAC Key
+Derivation function (HKDF) defined in RFC 5869.")
+ (license license:bsd-2)))
+
+(define-public python-spake2
+ (package
+ (name "python-spake2")
+ (version "0.8")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "spake2" version))
+ (sha256
+ (base32
+ "1x16r7lrbklvfzbacb66qv9iiih6liq1y612dqh2chgf555n2yn1"))))
+ (build-system python-build-system)
+ (propagated-inputs
+ `(("python-hkdf" ,python-hkdf)))
+ (home-page "https://github.com/warner/python-spake2")
+ (synopsis "SPAKE2 password-authenticated key exchange in Python")
+ (description "This package provides a Python implementation of the SPAKE2
+Password-Authenticated Key Exchange algorithm.")
+ (license license:expat)))
+
+(define-public python-txtorcon
+ (package
+ (name "python-txtorcon")
+ (version "19.0.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "txtorcon" version))
+ (sha256
+ (base32
+ "0fxzhsc62bhmr730vj9pzallmw56gz6iykvl28a5agrycm0bfc9p"))))
+ (build-system python-build-system)
+ (arguments
+ ;; The tests fail immediately due to a missing file. Reported upstream:
+ ;; <https://github.com/meejah/txtorcon/issues/330>
+ `(#:tests? #f))
+ (propagated-inputs
+ `(("python-automat" ,python-automat)
+ ("python-idna" ,python-idna)
+ ("python-incremental" ,python-incremental)
+ ("python-ipaddress" ,python-ipaddress)
+ ("python-service-identity" ,python-service-identity)
+ ("python-twisted" ,python-twisted)
+ ("python-zope-interface" ,python-zope-interface)))
+ (home-page "https://github.com/meejah/txtorcon")
+ (synopsis "Twisted-based Tor controller client")
+ (description "This package provides a Twisted-based Tor controller client,
+with state-tracking and configuration abstractions.")
+ (license license:expat)))
+
+(define-public python-keyutils
+ (package
+ (name "python-keyutils")
+ (version "0.6")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "keyutils" version))
+ (sha256
+ (base32
+ "0lipygpzhwzzsq2k5imb1jgkmj8y4khxdwhzadjs3bd56g6bmkx9"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-pytest" ,python-pytest)
+ ("python-pytest-runner" ,python-pytest-runner)))
+ (inputs
+ `(("keyutils" ,keyutils)))
+ (arguments
+ '(#:tests? #f))
+ (home-page "https://github.com/sassoftware/python-keyutils")
+ (synopsis "Python bindings for keyutils")
+ (description
+ "This is a set of python bindings for keyutils, a key management suite
+that leverages the infrastructure provided by the Linux kernel for safely
+storing and retrieving sensitive information in your programs.")
+ (license license:asl2.0)))
+
+(define-public python-mcuboot-imgtool
+ (package
+ (name "python-mcuboot-imgtool")
+ (version "1.4.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuulLabs-OSS/mcuboot")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1m1csyvzq4jx81zg635ssy1n7sc0z539z0myh872ll3nwqx7wa0q"))))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-broken-test
+ (lambda _
+ (substitute* "scripts/imgtool/keys/ed25519_test.py"
+ (("raw_sign") "sign_digest"))
+ #t))
+ (add-before 'build 'change-directory
+ (lambda _
+ (chdir "scripts")
+ #t)))))
+ (propagated-inputs
+ `(("python-click" ,python-click)
+ ("python-intelhex" ,python-intelhex)
+ ("python-cryptography" ,python-cryptography)))
+ (home-page "https://mcuboot.com")
+ (synopsis "Tool to securely sign firmware images for booting by MCUboot")
+ (description "MCUboot is a secure bootloader for 32-bit MCUs. This
+package provides a tool to securely sign firmware images for booting by
+MCUboot.")
+ (license license:expat)))
+
+(define-public python-secretstorage
+ (package
+ (name "python-secretstorage")
+ (version "3.1.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "SecretStorage" version))
+ (sha256
+ (base32
+ "1xmzr0j3066s220bss4nkgqbiwb5k4kkp2rkpqlqwjb5kfc8mnhm"))))
+ (build-system python-build-system)
+ (arguments
+ '(#:tests? #f)) ; Tests require a running dbus service.
+ (propagated-inputs
+ `(("python-cryptography" ,python-cryptography)
+ ("python-jeepney" ,python-jeepney)))
+ (home-page "https://github.com/mitya57/secretstorage")
+ (synopsis "Python bindings to FreeDesktop.org Secret Service API")
+ (description
+ "@code{python-secretstorage} provides a way for securely storing passwords
+and other secrets. It uses D-Bus Secret Service API that is supported by GNOME
+Keyring (since version 2.30) and KSecretsService. SecretStorage supports most
+of the functions provided by Secret Service, including creating and deleting
+items and collections, editing items, locking and unlocking collections
+(asynchronous unlocking is also supported).")
+ (license license:bsd-3)))
+
+(define-public python-jeepney
+ (package
+ (name "python-jeepney")
+ (version "0.4.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (pypi-uri "jeepney" version))
+ (sha256
+ (base32
+ "1fz9lb5fl831sijg2j0sbki698j2z6awbblas7mz3gp9jz2xi9hb"))))
+ (build-system python-build-system)
+ (native-inputs
+ `(("python-testpath" ,python-testpath)
+ ("python-tornado" ,python-tornado)
+ ("python-pytest" ,python-pytest)))
+ (home-page "https://gitlab.com/takluyver/jeepney")
+ (synopsis "Low-level, pure Python DBus protocol wrapper")
+ (description
+ "This is a low-level, pure Python DBus protocol client. It has an
+I/O-free core, and integration modules for different event loops.")
+ (license license:expat)))