summary refs log tree commit diff
path: root/gnu/packages/python-xyz.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/python-xyz.scm')
-rw-r--r--gnu/packages/python-xyz.scm804
1 files changed, 600 insertions, 204 deletions
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 82ff4cd95c..0b63b3b3d7 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -7,14 +7,14 @@
 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2020 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016 Erik Edrosa <erik.edrosa@gmail.com>
-;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2017, 2020 Kyle Meyer <kyle@kyleam.com>
 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
@@ -26,12 +26,12 @@
 ;;; Copyright © 2016, 2017 Nikita <nikita@n0.is>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017, 2018, 2020 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
@@ -50,7 +50,7 @@
 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2018, 2019, 2020, 2021 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018, 2019 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018, 2019, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
@@ -93,6 +93,9 @@
 ;;; Copyright © 2020 Diego N. Barbato <dnbarbato@posteo.de>
 ;;; Copyright © 2020 Leo Prikler <leo.prikler@student.tugraz.at>
 ;;; Copyright © 2019 Kristian Trandem <kristian@devup.no>
+;;; Copyright © 2020, 2021 Zheng Junjie <873216071@qq.com>
+;;; Copyright © 2021 Morgan Smith <Morgan.J.Smith@outlook.com>
+;;; Copyright © 2020 EuAndreh <eu@euandre.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -144,6 +147,7 @@
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libffi)
@@ -151,6 +155,7 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages markup)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages monitoring)
   #:use-module (gnu packages multiprecision)
@@ -158,10 +163,12 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages openstack)
   #:use-module (gnu packages pcre)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-build)
   #:use-module (gnu packages python-check)
   #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
@@ -175,6 +182,7 @@
   #:use-module (gnu packages shells)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu packages swig)
   #:use-module (gnu packages terminals)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages texinfo)
@@ -469,6 +477,30 @@ EasyGUI is NOT event-driven.  Instead, all GUI interactions are invoked by
 simple function calls.")
     (license license:bsd-3)))
 
+(define-public python-pymd4c
+  (package
+    (name "python-pymd4c")
+    (version "0.4.6.0b1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pymd4c" version))
+       (sha256
+        (base32 "07s3arn85ri92im6x3ipljdmrxmpik7irs06i6lm17j1x6j9841d"))))
+    (build-system python-build-system)
+    (inputs
+     `(("md4c" ,md4c)))
+    (native-inputs
+     `(("python-flake8" ,python-flake8)
+       ("python-pkgconfig" ,python-pkgconfig)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/dominickpastore/pymd4c")
+    (synopsis "Python bindings for MD4C")
+    (description
+     "PyMD4C provides Python bindings for MD4c, a C Markdown parser, compliant
+to CommonMark.")
+    (license license:expat)))
+
 (define-public python-pymediainfo
   (package
     (name "python-pymediainfo")
@@ -1025,9 +1057,6 @@ conventions and aliases in the same expression.")
 API for locking files.")
     (license license:expat)))
 
-(define-public python2-lockfile
-  (package-with-python2 python-lockfile))
-
 (define-public python-filelock
   (package
     (name "python-filelock")
@@ -1051,17 +1080,15 @@ inter-process communication.")
 (define-public python-semantic-version
   (package
     (name "python-semantic-version")
-    (version "2.6.0")
+    (version "2.8.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "semantic_version" version))
        (sha256
         (base32
-         "1h2l9xyg1zzsda6kjcmfcgycbvrafwci283vcr1v5sbk01l2hhra"))))
+         "0m4avx8zdkzc7qglv5zlr54g8yna5vl098drg5396ql7aph2vjyj"))))
     (build-system python-build-system)
-    (arguments
-     `(#:tests? #f))                    ; PyPI tarball lacks tests
     (home-page "https://github.com/rbarrois/python-semanticversion")
     (synopsis "Semantic versioning module for Python")
     (description
@@ -1114,14 +1141,14 @@ other machines, such as over the network.")
 (define-public python-setuptools
   (package
     (name "python-setuptools")
-    (version "41.0.1")
+    (version "52.0.0")
     (source
      (origin
       (method url-fetch)
-      (uri (pypi-uri "setuptools" version ".zip"))
+      (uri (pypi-uri "setuptools" version))
       (sha256
        (base32
-        "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
+        "15ibjdjhkwgj6qbmpsxikkqdfsb1550z46fly7dm15ah4bk1wfpv"))
       (modules '((guix build utils)))
       (snippet
        '(begin
@@ -1152,10 +1179,54 @@ Python 3 support.")
     (license (list license:psfl        ; setuptools itself
                    license:expat       ; six, appdirs, pyparsing
                    license:asl2.0      ; packaging is dual ASL2/BSD-2
-                   license:bsd-2))))
+                   license:bsd-2))
+    (properties `((python2-variant . ,(delay python2-setuptools))))))
 
+;; Newer versions of setuptools no longer support Python 2.
 (define-public python2-setuptools
-  (package-with-python2 python-setuptools))
+  (package
+    (name "python2-setuptools")
+    (version "41.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "setuptools" version ".zip"))
+       (sha256
+        (base32
+         "04sns22y2hhsrwfy1mha2lgslvpjsjsz8xws7h2rh5a7ylkd28m2"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove included binaries which are used to build self-extracting
+           ;; installers for Windows.
+           ;; TODO: Find some way to build them ourself so we can include them.
+           (for-each delete-file (find-files "setuptools" "^(cli|gui).*\\.exe$"))
+           #t))))
+    (build-system python-build-system)
+    ;; FIXME: Tests require pytest, which itself relies on setuptools.
+    ;; One could bootstrap with an internal untested setuptools.
+    (arguments
+     `(#:tests? #f))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "https://pypi.org/project/setuptools/")
+    (synopsis
+     "Library designed to facilitate packaging Python projects")
+    (description
+     "Setuptools is a fully-featured, stable library designed to facilitate
+packaging Python projects, where packaging includes:
+Python package and module definitions,
+distribution package metadata,
+test hooks,
+project installation,
+platform-specific details,
+Python 3 support.")
+    ;; TODO: setuptools now bundles the following libraries:
+    ;; packaging, pyparsing, six and appdirs. How to unbundle?
+    (license (list license:psfl         ; setuptools itself
+                   license:expat        ; six, appdirs, pyparsing
+                   license:asl2.0       ; packaging is dual ASL2/BSD-2
+                   license:bsd-2))))
 
 ;; The setuptools provided by Python 3.7.4 is too new for Tensorflow.
 (define-public python-setuptools-for-tensorflow
@@ -1348,6 +1419,46 @@ abstractions to different hardware devices, and a suite of utilities for
 sending and receiving messages on a CAN bus.")
     (license license:lgpl3+)))
 
+(define-public python-caniusepython3
+  (package
+    (name "python-caniusepython3")
+    (version "7.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "caniusepython3" version))
+        (sha256
+          (base32
+            "0a755444ln38j8d7xb3yw0wzpd0mjrzfn6zqvsh06nw1vdaq4l28"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'relax-requirements
+                    (lambda _
+                      (substitute* "setup.py"
+                        ;; These are for compatibility with Python 2.
+                        ((".*'argparse', 'backports.functools_lru_cache',.*")
+                         ""))
+                      (substitute* "dev_requirements.txt"
+                        ((".*pylint.*") "")) ;not actually required
+                      #t))
+                  (replace 'check
+                    (lambda _
+                      (invoke "py.test" "-k" "not NetworkTests"))))))
+    (propagated-inputs
+      `(("python-distlib" ,python-distlib)
+        ("python-packaging" ,python-packaging)
+        ("python-requests" ,python-requests)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/brettcannon/caniusepython3")
+    (synopsis "Check for Python 3-incompatible Python libraries")
+    (description "The @command{caniusepython3} command scans your project and
+reports the Python 3-incompatible libraries it found.  It can also be used as
+a library.")
+    (license license:asl2.0)))
+
 (define-public python-diskcache
   (package
     (name "python-diskcache")
@@ -2182,13 +2293,13 @@ syntax.")
 (define-public python-polib
   (package
     (name "python-polib")
-    (version "1.0.8")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "polib" version))
                (sha256
                 (base32
-                  "1pq2hbm3m2q0cjdszk8mc4qa1vl3wcblh5nfyirlfnzb2pcy7zss"))))
+                  "0aikb8gcarhifn3sadrbbs5czagih9hjv250gsrgy9v1d49pvn7s"))))
     (build-system python-build-system)
     (home-page "https://bitbucket.org/izi/polib/wiki/Home")
     (synopsis "Manipulate, create and modify gettext files")
@@ -2472,9 +2583,6 @@ code introspection, and logging.")
      "Used only for bootstrapping python2-pbr, you should not need this.")
     (license license:asl2.0)))
 
-(define-public python2-pbr-minimal
-  (package-with-python2 python-pbr-minimal))
-
 (define-public python-pbr
   (package
     (inherit python-pbr-minimal)
@@ -2502,9 +2610,6 @@ versions, process requirements files and generate AUTHORS and ChangeLog file
 from git information.
 ")))
 
-(define-public python2-pbr
-  (package-with-python2 python-pbr))
-
 (define-public python-pyrsistent
   (package
     (name "python-pyrsistent")
@@ -2671,38 +2776,6 @@ with sensible defaults out of the box.")
         (base32 "0njsm0wn31l21bi118g5825ma5sa3rwn7v2x4wjd7yiiahkri337"))))
     (arguments `())))
 
-(define-public python-wheel
-  (package
-    (name "python-wheel")
-    (version "0.33.6")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "wheel" version))
-        (sha256
-         (base32
-          "0ii6f34rvpjg3nmw4bc2h7fhdsy38y1h93hghncfs5akfrldmj8h"))))
-    (build-system python-build-system)
-    (arguments
-     ;; FIXME: The test suite runs "python setup.py bdist_wheel", which in turn
-     ;; fails to find the newly-built bdist_wheel library, even though it is
-     ;; available on PYTHONPATH.  What search path is consulted by setup.py?
-     '(#:tests? #f))
-    (home-page "https://bitbucket.org/pypa/wheel/")
-    (synopsis "Format for built Python packages")
-    (description
-     "A wheel is a ZIP-format archive with a specially formatted filename and
-the @code{.whl} extension.  It is designed to contain all the files for a PEP
-376 compatible install in a way that is very close to the on-disk format.  Many
-packages will be properly installed with only the @code{Unpack} step and the
-unpacked archive preserves enough information to @code{Spread} (copy data and
-scripts to their final locations) at any later time.  Wheel files can be
-installed with a newer @code{pip} or with wheel's own command line utility.")
-    (license license:expat)))
-
-(define-public python2-wheel
-  (package-with-python2 python-wheel))
-
 (define-public python-vcversioner
   (package
     (name "python-vcversioner")
@@ -3183,40 +3256,8 @@ e.g. filters, callbacks and errbacks can all be promises.")
     (synopsis "Virtual Python environment builder")
     (description
      "Virtualenv is a tool to create isolated Python environments.")
-    (properties `((python2-variant . ,(delay python2-virtualenv))))
     (license license:expat)))
 
-(define-public python2-virtualenv
-  (let ((base (package-with-python2 (strip-python2-variant python-virtualenv))))
-    (package
-      (inherit base)
-      (arguments
-       `(#:python ,python-2
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'set-paths 'adjust-PYTHONPATH
-             (lambda* (#:key inputs #:allow-other-keys)
-               (let* ((python (assoc-ref inputs "python"))
-                      (python-sitedir (string-append python "/lib/python2.7"
-                                                     "/site-packages")))
-                 ;; XXX: 'python2' always comes first on PYTHONPATH
-                 ;; and shadows the 'setuptools' input.  Move python2
-                 ;; last: this should be fixed in python-build-system
-                 ;; in a future rebuild cycle.
-                 (setenv "PYTHONPATH"
-                         (string-append (string-join (delete python-sitedir
-                                                             (string-split
-                                                              (getenv "PYTHONPATH")
-                                                              #\:))
-                                                     ":")
-                                        ":" python-sitedir))
-                 (format #t "environment variable `PYTHONPATH' changed to `~a'~%"
-                         (getenv "PYTHONPATH"))
-                 #t))))))
-      (propagated-inputs
-       `(("python-contextlib2" ,python2-contextlib2)
-         ,@(package-propagated-inputs base))))))
-
 (define-public python-markupsafe
   (package
     (name "python-markupsafe")
@@ -3610,6 +3651,29 @@ text styles of documentation.")
                  (base32
                   "1zmhnswy0wxfn0xprs9aqsvx2c3kmzfn2wx14q8cv3vpkxdamj4q")))))))
 
+(define-public python-bump2version
+  (package
+    (name "python-bump2version")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "bump2version" version))
+       (sha256
+        (base32 "1rinm4gv1fyh7xjv3v6r1p3zh5kl4ry2qifz5f7frx31mnzv4b3n"))))
+    (build-system python-build-system)
+    (arguments
+     ;; XXX: Tests fail with "bumpversion: error: the following arguments are
+     ;; required: --new-version".
+     `(#:tests? #false))
+    (home-page "https://github.com/c4urself/bump2version")
+    (synopsis "Version-bump your software with a single command!")
+    (description
+     "This package provides a small command line tool to simplify releasing
+software by updating all version strings in your source code by the correct
+increment.  It also creates commits and tags.")
+    (license license:expat)))
+
 (define-public python-bumpversion
   (package
     (name "python-bumpversion")
@@ -4013,27 +4077,6 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
 (define-public python2-feedgenerator
   (package-with-python2 python-feedgenerator))
 
-(define-public python-toml
-  (package
-    (name "python-toml")
-    (version "0.10.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "toml" version))
-       (sha256
-        (base32
-         "03wbqm5cn685cwx2664hjdpz370njl7lf0yal8s0dkp5w4mn2swj"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:tests? #f))                     ;no tests suite in release
-    (home-page "https://github.com/uiri/toml")
-    (synopsis "Library for TOML")
-    (description
-     "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
-Language (TOML) configuration files.")
-    (license license:expat)))
-
 (define-public python-jsonrpc-server
   (package
     (name "python-jsonrpc-server")
@@ -4855,6 +4898,25 @@ algorithm.  Patiencediff provides a good balance of performance, nice output for
 humans, and implementation simplicity.")
     (license license:gpl2)))
 
+(define-public python-pdftotext
+  (package
+    (name "python-pdftotext")
+    (version "2.1.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pdftotext" version))
+       (sha256
+        (base32
+         "19la1cw1hmkcr8big04gm2dd5fw0y0z97g930aiy29s1gaqbiblq"))))
+    (build-system python-build-system)
+    (inputs
+     `(("poppler" ,poppler)))
+    (home-page "https://github.com/jalan/pdftotext")
+    (synopsis "Simple PDF text extraction")
+    (description "Pdftotext is a Python library of PDF text extraction.")
+    (license license:expat)))
+
 (define-public python-pyparsing
   (package
     (name "python-pyparsing")
@@ -4931,10 +4993,17 @@ that client code uses to construct the grammar directly in Python code.")
      "Numpy's Sphinx extensions")
     (description
      "Sphinx extension to support docstrings in Numpy format.")
-    (license license:bsd-2)))
+    (license license:bsd-2)
+    (properties `((python2-variant . ,(delay python2-numpydoc))))))
 
 (define-public python2-numpydoc
-  (package-with-python2 python-numpydoc))
+  (let ((base (package-with-python2
+               (strip-python2-variant python-numpydoc))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       `(("python2-jinja2" ,python2-jinja2)
+         ,@(package-propagated-inputs base))))))
 
 (define-public python-numexpr
   (package
@@ -5196,7 +5265,10 @@ toolkits.")
          ("python2-subprocess32" ,python2-subprocess32)
          ("python2-tkinter" ,python-2 "tk")
          ,@(fold alist-delete (package-propagated-inputs matplotlib)
-                 '("python-pycairo" "python-pygobject" "python-tkinter")))))))
+                 '("python-cairocffi"
+                   "python-pycairo"
+                   "python-pygobject"
+                   "python-tkinter")))))))
 
 (define-public python-matplotlib-documentation
   (package
@@ -5706,6 +5778,37 @@ the OleFileIO module from PIL, the Python Image Library.")
 (define-public python2-olefile
   (package-with-python2 python-olefile))
 
+(define-public python-pikepdf
+  (package
+    (name "python-pikepdf")
+    (version "2.5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pikepdf" version))
+       (sha256
+        (base32 "1wwfspm912388a61lailbpjpqihq9ha8yz05mjqx9yys4ixykhwg"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #false))                ;require python-xmp-toolkit
+    (native-inputs
+     `(("pybind11" ,pybind11)
+       ("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm/next)
+       ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive)
+       ("python-toml" ,python-toml)
+       ("python-wheel" ,python-wheel)))
+    (inputs
+     `(("qpdf" ,qpdf)))
+    (propagated-inputs
+     `(("python-lxml" ,python-lxml)
+       ("python-pillow" ,python-pillow)))
+    (home-page "https://github.com/pikepdf/pikepdf")
+    (synopsis "Read and write PDFs with Python")
+    (description
+     "pikepdf is a Python library for reading and writing PDF files.")
+    (license license:mpl2.0)))
+
 (define-public python-pillow
   (package
     (name "python-pillow")
@@ -6010,6 +6113,38 @@ similar to Fourier transforms, the difference being that Fourier transforms are
 localized only in frequency instead of in time and frequency.")
     (license license:expat)))
 
+(define-public python-pywal
+  (package
+    (name "python-pywal")
+    (version "3.3.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dylanaraps/pywal")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "039m7dch479hlwddynacdrr0klz6a5bdly5swqbs94hfimficiyf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-home-directory
+           (lambda _
+             ;; Tests fail with "Permission denied: '/homeless-shelter'".
+             (setenv "HOME" "/tmp")
+             #t)))))
+    (inputs
+     `(("imagemagick" ,imagemagick)))
+    (home-page "https://github.com/dylanaraps/pywal")
+    (synopsis "Color palette generator and applicator")
+    (description
+     "Pywal is a tool that generates a color palette from the dominant colors
+in an image.  It then applies the colors system-wide and on-the-fly in all of
+your favourite programs.")
+    (license license:expat)))
+
 (define-public python-pywinrm
   (package
     (name "python-pywinrm")
@@ -6391,9 +6526,6 @@ The output of all running processes is collected by honcho and
 displayed.")
     (license license:expat)))
 
-(define-public python2-honcho
-  (package-with-python2 python-honcho))
-
 (define-public python-pexpect
   (package
     (name "python-pexpect")
@@ -6465,6 +6597,18 @@ child application and control it as if a human were typing commands.")
 them as the version argument or in a SCM managed file.")
     (license license:expat)))
 
+;; TODO: Merge with 'python-setuptools-scm' on the next rebuild cycle.
+(define-public python-setuptools-scm/next
+  (package
+    (inherit python-setuptools-scm)
+    (version "5.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "setuptools_scm" version))
+       (sha256
+        (base32 "0ahlrxxkx2xhmxskx57gc96w3bdndflxx30304ihvm7ds136nny8"))))))
+
 (define-public python2-setuptools-scm
   (package-with-python2 python-setuptools-scm))
 
@@ -6658,6 +6802,27 @@ need to use the older and less efficient @code{pkg_resources} package.")
 finding unresolved symbols in Python code and their corresponding imports.")
     (license license:bsd-3)))
 
+(define-public python-inotify-simple
+  (package
+    (name "python-inotify-simple")
+    (version "1.3.5")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/chrisjbillington/inotify_simple")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1dv9svrcz31acyq9smjlnw75xv3x5wpn5h6s8j8h0vrqyl3d7l05"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/chrisjbillington/inotify_simple")
+    (synopsis "Simple wrapper around inotify library")
+    (description
+     "@code{inotify-simple} is a simple wrapper around inotify library.")
+    (license license:bsd-3)))
+
 (define-public python-jaraco-packaging
   (package
     (name "python-jaraco-packaging")
@@ -6738,9 +6903,6 @@ releases.")
 common operations on files to be invoked on those path objects directly.")
     (license license:expat)))
 
-(define-public python2-pathpy
-  (package-with-python2 python-pathpy))
-
 (define-public python-simplegeneric
   (package
     (name "python-simplegeneric")
@@ -7890,13 +8052,13 @@ multiprecision arithmetic.")
 (define-public python-sympy
   (package
     (name "python-sympy")
-    (version "1.6.2")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sympy" version))
        (sha256
-        (base32 "0247skhkxanczpqqdz6n9k1axgpwl665b25hyn9vgr060p4dryhw"))))
+        (base32 "0bkb4jf24yv5i4kjpsmg1xjjccfhqyi0syv0p0xvhdbmx5hr5pm3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -7953,7 +8115,7 @@ falling into the Python interpreter.")
 (define-public python-xlib
   (package
     (name "python-xlib")
-    (version "0.27")
+    (version "0.29")
     (source
      (origin
        (method git-fetch)
@@ -7962,7 +8124,7 @@ falling into the Python interpreter.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "09kimic8rhprx3q8nzalc4aggg42ahqm4v5qcj8dm68yvxfdk986"))))
+        (base32 "17cwd2knqm2vwrii3kqii9abwsnydhpg4byqx1vy7rjs6i1vbqfc"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -7978,8 +8140,9 @@ falling into the Python interpreter.")
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-setuptools-scm" ,python-setuptools-scm)
-       ("python-six" ,python-six)
        ("xorg-server" ,xorg-server)))
+    (propagated-inputs
+     `(("python-six" ,python-six)))
     (home-page "https://github.com/python-xlib/python-xlib")
     (synopsis "Python X11 client library")
     (description
@@ -8197,16 +8360,8 @@ PEP 8.")
 
 (define-public python-pep517
   (package
+    (inherit python-pep517-bootstrap)
     (name "python-pep517")
-    (version "0.8.2")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "pep517" version))
-        (sha256
-         (base32
-          "17m2bcabx3sr5wjalgzppfx5xahqrwm12zq58h68mm482b7rjqcf"))))
-    (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -8222,15 +8377,7 @@ PEP 8.")
      `(("python-mock" ,python-mock)
        ("python-pytest" ,python-pytest)
        ("python-testpath" ,python-testpath)))
-    (propagated-inputs
-     `(("python-toml" ,python-toml)
-       ("python-wheel" ,python-wheel)))
-    (home-page "https://github.com/pypa/pep517")
-    (synopsis "Wrappers to build Python packages using PEP 517 hooks")
-    (description
-     "Wrappers to build Python packages using PEP 517 hooks.")
-    (properties `((python2-variant . ,(delay python2-pep517))))
-    (license license:expat)))
+    (properties `((python2-variant . ,(delay python2-pep517))))))
 
 ;; Skip the tests so we don't create a cyclical dependency with pytest.
 (define-public python2-pep517
@@ -8373,6 +8520,31 @@ design problems in your program.  It contains warnings that don't belong
 in pyflakes and pycodestyle.")
     (license license:expat)))
 
+(define-public python-flake8-implicit-str-concat
+  (package
+    (name "python-flake8-implicit-str-concat")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flake8_implicit_str_concat" version))
+       (sha256
+        (base32 "1v0y29xlmbr2q12a4nnpm1dm9aw1mjiys1x8jif4z8c90d63cqm6"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-attrs" ,python-attrs)
+       ("python-more-itertools" ,python-more-itertools)))
+    (home-page "https://github.com/keisheiled/flake8-implicit-str-concat")
+    (synopsis "Flake8 plugin to encourage correct string literal concatenation")
+    (description
+     "This is a plugin for the Python code checking tool Flake8 to encourage
+correct string literal concatenation.
+
+It looks for style problems like implicitly concatenated string literals on
+the same line (which can be introduced by the code formating tool Black), or
+unnecessary plus operators for explicit string literal concatenation.")
+    (license license:expat)))
+
 (define-public python-flake8-polyfill
   (package
     (name "python-flake8-polyfill")
@@ -8416,6 +8588,28 @@ plugins that intend to support Flake8 2.x and 3.x simultaneously.")
 (define-public python2-flake8-polyfill
   (package-with-python2 python-flake8-polyfill))
 
+(define-public python-flake8-print
+  (package
+    (name "python-flake8-print")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flake8-print" version))
+       (sha256
+        (base32 "05k5kkvyk6fdmvnacxfzypk74vbl3pmva13dqg1aljfwnxsc7yjs"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-flake8" ,python-flake8)
+       ("python-pycodestyle" ,python-pycodestyle)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/jbkahn/flake8-print")
+    (synopsis "Print statement checker plugin for Flake8")
+    (description
+     "This plugin for Flake8 checks for @code{print} statements in Python
+files.")
+    (license license:expat)))
+
 (define-public python-flake8-pyi
   (package
     (name "python-flake8-pyi")
@@ -11151,9 +11345,6 @@ supported environment, or act as a frontend to continuous integration
 servers.")
     (license license:expat)))
 
-(define-public python2-tox
-  (package-with-python2 python-tox))
-
 (define-public python-jmespath
   (package
    (name "python-jmespath")
@@ -11782,6 +11973,28 @@ programmatically interfacing with your system's $EDITOR.")
 (define-public python2-editor
   (package-with-python2 python-editor))
 
+(define-public python-multiprocessing-logging
+  (package
+    (name "python-multiprocessing-logging")
+    (version "0.3.1")
+    (home-page "https://github.com/jruere/multiprocessing-logging")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1625wy3djlr3b2fpd3vi822f8gw6b75mnls5a4318dbi9za5pf0y"))))
+    (build-system python-build-system)
+    (synopsis "Manage logs from multiple processes")
+    (description
+     "This Python module implements a multiprocessing-aware @code{Handler}
+that, when set on the root @code{Logger}, will tunnel log records to the
+main process so that they are handled correctly.")
+    (license license:lgpl3+)))
+
 (define-public python-vobject
   (package
     (name "python-vobject")
@@ -13111,26 +13324,6 @@ powerful API: thread-safety; decorator syntax; support for memcached, redis,
 database, file, dict stores.  Cachy supports python versions 2.7+ and 3.2+.")
     (license license:expat)))
 
-(define-public python-poetry-core
-  (package
-    (name "python-poetry-core")
-    (version "1.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "poetry-core" version))
-       (sha256
-        (base32 "1mgv276h1iphn5fqhp2sgkgd5d0c39hs33vgaf157x5ri7rlyrka"))))
-    (build-system python-build-system)
-    (home-page "https://github.com/python-poetry/poetry-core")
-    (synopsis "Poetry PEP 517 build back-end")
-    (description
-     "The @code{poetry-core} module provides a PEP 517 build back-end
-implementation developed for Poetry.  This project is intended to be
-a light weight, fully compliant, self-contained package allowing PEP 517
-compatible build front-ends to build Poetry managed projects.")
-    (license license:expat)))
-
 (define-public poetry
   (package
     (name "poetry")
@@ -13533,13 +13726,13 @@ collections of data.")
 (define-public python-prompt-toolkit
   (package
     (name "python-prompt-toolkit")
-    (version "3.0.7")
+    (version "3.0.9")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "prompt_toolkit" version))
        (sha256
-        (base32 "12a4pyrpnm3vcrvx7lb4cglp220lbvi336mhn2k2nzcgy82lcbw2"))))
+        (base32 "0bvjp62cs6aj9lrh7njzxdjgg8pjfw3qgmr551243d9ivmcapvn5"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -13556,8 +13749,7 @@ collections of data.")
      `(("python-wcwidth" ,python-wcwidth)))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
-    (home-page
-     "https://github.com/prompt-toolkit/python-prompt-toolkit")
+    (home-page "https://github.com/prompt-toolkit/python-prompt-toolkit")
     (synopsis "Library for building command line interfaces in Python")
     (description
      "Prompt-Toolkit is a library for building interactive command line
@@ -14098,14 +14290,14 @@ monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
 (define-public python-graphql-core
   (package
     (name "python-graphql-core")
-    (version "0.5.3")
+    (version "3.1.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "graphql-core" version))
         (sha256
          (base32
-          "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
+          "0fjv5w2wvgdr8gb27v241bavliipyir9fdz48rsgc3xapm644mn0"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; Tests require the unpackaged pytest-benchmark.
@@ -14516,10 +14708,23 @@ of arguments and options for Python scripts using @code{argparse}.  It's
 particularly useful for programs with many options or sub-parsers that can
 dynamically suggest completions; for example, when browsing resources over the
 network.")
-    (license license:asl2.0)))
+    (license license:asl2.0)
+    (properties `((python2-variant . ,(delay python2-argcomplete))))))
 
 (define-public python2-argcomplete
-  (package-with-python2 python-argcomplete))
+  (let ((variant (package-with-python2
+                  (strip-python2-variant python-argcomplete))))
+    (package
+      (inherit variant)
+      (arguments
+       (substitute-keyword-arguments (package-arguments variant)
+         ((#:phases phases '%standard-phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'set-my-HOME
+               (lambda _ (setenv "HOME" "/tmp")))))))
+      (native-inputs
+       `(("python2-importlib-metadata" ,python2-importlib-metadata)
+         ,@(package-native-inputs variant))))))
 
 (define-public python-csscompressor
   (package
@@ -15697,9 +15902,6 @@ exception message with a traceback that points to the culprit.")
     (description "This package provides a MediaWiki API client.")
     (license license:expat)))
 
-(define-public python2-mwclient
-  (package-with-python2 python-mwclient))
-
 (define-public python-utils
   (package
     (name "python-utils")
@@ -16758,9 +16960,6 @@ class ShellOutSSHClientTests"))
 many of the popular cloud service providers using a unified API.")
     (license license:asl2.0)))
 
-(define-public python2-apache-libcloud
-  (package-with-python2 python-apache-libcloud))
-
 (define-public python-smmap
   (package
     (name "python-smmap")
@@ -16964,9 +17163,6 @@ will fail (i.e.  it will exit with a non-zero exit code) when any of these
 requirements is not met.")
     (license license:expat)))
 
-(define-public python2-xenon
-  (package-with-python2 python-xenon))
-
 (define-public python-pysocks
   (package
     (name "python-pysocks")
@@ -17760,6 +17956,29 @@ user's @file{~/Trash} directory.")
      "@code{pyfavicon} is an async favicon fetcher.")
     (license license:expat)))
 
+(define-public python-yamllint
+  (package
+    (name "python-yamllint")
+    (version "1.26.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "yamllint" version))
+       (sha256
+        (base32 "11qhs1jk9pwvyk5k3q5blh9sq42dh1ywdf1f3i2zixf7hncwir5h"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pathspec" ,python-pathspec)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/adrienverge/yamllint")
+    (synopsis "Linter for YAML files")
+    (description
+     "Yamllint is a linter for YAML files.  yamllint does not only check for
+syntax validity, but for weirdnesses like key repetition and cosmetic problems
+such as lines length, trailing spaces, indentation, etc.")
+    (license license:gpl3+)))
+
 (define-public python-yapf
   (package
     (name "python-yapf")
@@ -18105,6 +18324,61 @@ based on the CPython 2.7 and 3.7 parsers.")
                    license:asl2.0
                    license:expat))))    ;ast27/Parser/spark.py
 
+(define-public python-typer
+  (package
+    (name "python-typer")
+    (version "0.3.2")
+    (source
+     (origin
+       ;; Building `python-typer` from the git repository requires the `flit-core`
+       ;; Python package that is not installed by `python-flit`.
+       (method url-fetch)
+       (uri (pypi-uri "typer" version))
+       (sha256
+        (base32 "00v3h63dq8yxahp9vg3yb9r27l2niwv8gv0dbds9dzrc298dfmal"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'disable-failing-tests
+           (lambda _
+             (substitute* "tests/test_completion/test_completion.py"
+               (("def test_show_completion")
+                "def _test_show_completion")
+               (("def test_install_completion")
+                "def _test_install_completion"))
+             (substitute* "tests/test_completion/test_completion_install.py"
+               (("def test_completion_install_bash")
+                "def _test_completion_install_bash")
+               (("def test_completion_install_zsh")
+                "def _test_completion_install_zsh")
+               (("def test_completion_install_fish")
+                "def _test_completion_install_fish")
+               (("def test_completion_install_powershell")
+                "def _test_completion_install_powershell"))
+             #t))
+         (replace 'check
+           (lambda _
+             (setenv "PYTHONPATH"
+                     (string-append (getcwd) ":"
+                                    (getenv "PYTHONPATH")))
+             (invoke "python" "-m" "pytest" "tests/")
+             #t)))))
+    (propagated-inputs
+     `(("python-click" ,python-click)))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-shellingham" ,python-shellingham)))
+    (home-page "https://github.com/tiangolo/typer")
+    (synopsis
+      "Typer builds CLI based on Python type hints")
+    (description
+      "Typer is a library for building CLI applications.  It's based on
+Python 3.6+ type hints.")
+    ;; MIT license
+    (license license:expat)))
+
 (define-public python-typing
   (package
     (name "python-typing")
@@ -18169,13 +18443,13 @@ Included are implementations of:
 (define-public bpython
   (package
     (name "bpython")
-    (version "0.18")
+    (version "0.20.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bpython" version))
        (sha256
-        (base32 "1hl6frgvr2lqaxqczl8amg9xih32b3gzv429vs0qrjb8wpdj1k2n"))))
+        (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -18198,11 +18472,14 @@ Included are implementations of:
     (propagated-inputs
      `(("python-pygments" ,python-pygments)
        ("python-requests" ,python-requests)
-       ("python-babel" ,python-babel)   ; optional, for internationalization
-       ("python-curtsies" ,python-curtsies) ; >= 0.1.18
+       ("python-curtsies" ,python-curtsies)
        ("python-greenlet" ,python-greenlet)
+       ("python-six" ,python-six)
+       ("python-wcwidth" ,python-wcwidth)
+       ;; optional dependencies
        ("python-urwid" ,python-urwid)   ; for bpython-urwid only
-       ("python-six" ,python-six)))
+       ("python-watchdog" ,python-watchdog)
+       ("python-jedi" ,python-jedi)))
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ("python-mock" ,python-mock)))
@@ -18698,14 +18975,14 @@ implemented using @code{ctypes}.")
 (define-public python-userspacefs
   (package
     (name "python-userspacefs")
-    (version "2.0.2")
+    (version "2.0.3")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "userspacefs" version))
         (sha256
          (base32
-          "0ayfcz9pjwq7h3ws0qas71842s1wm7dxlmg8dccxl2j6yavpv83f"))))
+          "1v6saf62ml3j63adalvlkj4iavxjbsbapl20b21mn73p7kvn4ayf"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-fusepyng" ,python-fusepyng)))
@@ -18769,7 +19046,7 @@ user-space file systems in Python.")
 (define-public pybind11
   (package
     (name "pybind11")
-    (version "2.4.3")
+    (version "2.6.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -18777,7 +19054,7 @@ user-space file systems in Python.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0k89w4bsfbpzw963ykg1cyszi3h3nk393qd31m6y46pcfxkqh4rd"))
+                "1wh5b1xnywzxwxkyac2wvyqwzmy1qxs341jjk820r7b825wn6yad"))
               (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (native-inputs
@@ -18843,17 +19120,8 @@ inferring type information using compile-time introspection.")
 @item Inter-process locks
 @item Generic helpers
 @end itemize\n")
-    (properties `((python2-variant . ,(delay python2-fasteners))))
     (license license:asl2.0)))
 
-(define-public python2-fasteners
-  (let ((base (package-with-python2 (strip-python2-variant python-fasteners))))
-    (package
-      (inherit base)
-      (propagated-inputs
-       `(("python2-futures" ,python2-futures)
-         ,@(package-propagated-inputs base))))))
-
 (define-public python-requests-file
   (package
     (name "python-requests-file")
@@ -19756,6 +20024,37 @@ Features:
 @end itemize")
     (license license:asl2.0)))
 
+(define-public python-pre-commit
+  (package
+    (name "python-pre-commit")
+    (version "2.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pre_commit" version))
+       (sha256
+        (base32 "1ycf6wpxrhxhdzz0vpryhbdxlwik5khgcvp3hxwvfr447a6k84zl"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Tests fail with "AttributeError: module 'pre_commit.resources' has no
+     ;; attribute 'empty_template_setup'".
+     `(#:tests? #false))
+    (propagated-inputs
+     `(("python-cfgv" ,python-cfgv)
+       ("python-identify" ,python-identify)
+       ("python-importlib-metadata" ,python-importlib-metadata)
+       ("python-importlib-resources" ,python-importlib-resources)
+       ("python-nodeenv" ,python-nodeenv)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-toml" ,python-toml)
+       ("python-virtualenv" ,python-virtualenv)))
+    (home-page "https://github.com/pre-commit/pre-commit")
+    (synopsis "Framework for managing multi-language pre-commit hooks")
+    (description
+     "This package provides a framework for managing and maintaining
+multi-language pre-commit hooks.")
+    (license license:expat)))
+
 (define-public python-precis-i18n
   (package
     (name "python-precis-i18n")
@@ -20356,13 +20655,18 @@ time-or-computationally-expensive properties quick and easy and works in Python
 (define-public python-folium
   (package
     (name "python-folium")
-    (version "0.11.0")
+    (version "0.12.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (pypi-uri "folium" version))
+       ;; PyPI has a ".whl" file but not a proper source release.
+       ;; Thus, fetch code from Git.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/python-visualization/folium")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "19sclsq3xcjfa7bavzjpyn6rl9b15jbc76n5aag4cwhqqamqj1sl"))))
+        (base32 "0yi5y9pfpbc4bc4ibr8cblif8ls1wf3k0zawyx86r2qwxxkkyd6k"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-branca" ,python-branca)
@@ -23337,3 +23641,95 @@ Qt applications.")
      "Bitstring is a library for simple construction, analysis and modification
  of binary data.")
     (license license:expat)))
+
+(define-public python-confuse
+  (package
+    (name "python-confuse")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "confuse" version))
+       (sha256
+        (base32
+         "0r74djc8r6lfx6ldsqnhpvfsn256gsfzbl33qcm77hp2qr8h9z4j"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pathlib" ,python-pathlib)
+       ("python-pyyaml" ,python-pyyaml)))
+    (home-page "https://github.com/beetbox/confuse")
+    (synopsis "Painless YAML configuration.")
+    (description "Confuse is a configuration library for Python that uses
+YAML.  It takes care of defaults, overrides, type checking, command-line
+integration, human-readable errors, and standard OS-specific locations.")
+    (license license:expat)))
+
+(define-public python-reflink
+  (package
+    (name "python-reflink")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "reflink" version))
+       (sha256
+        (base32
+         "0fkf3sd958g9hvr3jwlhnhqqzrwxljrc3grsf3yknh94vf13a9f9"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #false)) ; almost all tests want to run mkfs.btrfs
+    (propagated-inputs
+     `(("python-cffi" ,python-cffi)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://gitlab.com/rubdos/pyreflink")
+    (synopsis "Python wrapper around reflink system call")
+    (description
+     "Python reflink wraps around platform specific @code{reflink}
+implementations.")
+    (license license:expat)))
+
+(define-public python-pivy
+  (package
+    (name "python-pivy")
+    (version "0.6.5")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/coin3d/pivy")
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0vids7sxk8w5vr73xdnf8xdci71a7syl6cd35aiisppbqyyfmykx"))))
+    (build-system python-build-system)
+    (arguments
+      `(;; The test suite fails due to an import cycle between 'pivy' and '_coin'
+        #:tests? #f
+        #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'patch-cmake-include-dirs
+           (lambda _
+             ;; Patch buildsystem to respect Coin3D include directory
+             (substitute* "CMakeLists.txt"
+                          (("\\$\\{SoQt_INCLUDE_DIRS}")
+                           "${Coin_INCLUDE_DIR};${SoQt_INCLUDE_DIRS}"))
+             #t)))))
+    (native-inputs
+      `(("cmake" ,cmake)
+        ("swig" ,swig)))
+    (inputs
+      `(("python-wrapper" ,python-wrapper)
+        ("qtbase" ,qtbase)
+        ("libxi" ,libxi)
+        ("libice" ,libice)
+        ("soqt" ,soqt)
+        ("glew" ,glew)
+        ("coin3D" ,coin3D-4)))
+    (home-page "https://github.com/coin3d/pivy")
+    (synopsis "Python bindings to Coin3D")
+    (description
+      "Pivy provides python bindings for Coin, a 3D graphics library with an
+Application Programming Interface based on the Open Inventor 2.1 API.")
+    (license license:isc)))