guix_mirror_bot pushed a commit to branch master
in repository guix.

commit 2d7ba3c7339b57080fa08eee4b703f6667c66b8c
Author: Sharlatan Hellseher <[email protected]>
AuthorDate: Mon Oct 13 09:56:58 2025 +0100

    gnu: packages/python-xyz: Sort python-u*.
    
    * gnu/packages/python-xyz.scm (python-ua-parser, python-ubelt,
    python-uc-micro-py, python-ujson, python-ukkonen,
    python-ukpostcodeparser, python-uncertainties, python-unicodedata2,
    python-unidecode, python-unique-log-filter, python-uniseg,
    python-unpaddedbase64, python-update-checker, python-uri-template,
    python-urwid, python-urwid-2, python-urwid-3,
    python-urwid-for-zulip-term, python-urwid-readline, python-urwidgets,
    python-urwidtrees, python-user-agents, python-userpath,
    python-userspacefs, python-utils): Sort variables alphabetically.
    
    Change-Id: I756f8f8af046cb9fbdf6be647cb0695eada284f5
---
 gnu/packages/python-xyz.scm | 1274 +++++++++++++++++++++----------------------
 1 file changed, 637 insertions(+), 637 deletions(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 790eefed47..e609233cee 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -2142,47 +2142,6 @@ library’s logging module.  It was designed with both 
complex and simple
 applications in mind and the idea to make logging fun.")
     (license license:bsd-3)))
 
-(define-public python-ubelt
-  (package
-    (name "python-ubelt")
-    (version "1.3.6")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/Erotemic/ubelt";)
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      ;; The builder user home doesn't match HOME, which causes this test to
-      ;; fail.
-      #:test-flags #~(list "-k" "not userhome")
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-before 'check 'pre-check
-            (lambda _
-              (setenv "HOME" "/tmp")))))) ;else the test suite hangs
-    (native-inputs
-     (list python-pytest
-           python-requests
-           python-setuptools
-           python-wheel
-           python-xdoctest))
-    (propagated-inputs
-     (list python-ordered-set))
-    (home-page "https://github.com/Erotemic/ubelt";)
-    (synopsis "Python library for hashing, caching, timing and more")
-    (description
-     "Ubelt is a small library of simple functions that extend the Python
-standard library.  It includes an @acronym{API, Application Programming
-Interface} to simplify common problems such as caching, timing, computing
-progress, among other things.")
-    (license license:asl2.0)))
-
 (define-public python-databind-core
   (package
     (name "python-databind-core")
@@ -5387,36 +5346,6 @@ other machines, such as over the network.")
 @code{setup.cfg}.")
     (license license:asl2.0)))
 
-(define-public python-uniseg
-  (package
-    (name "python-uniseg")
-    (version "0.10.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "uniseg" version))
-       (sha256
-        (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest
-           python-setuptools
-           python-setuptools-scm))
-    (home-page "https://bitbucket.org/emptypage/uniseg-python";)
-    (synopsis "Python library to determine Unicode text segmentations")
-    (description
-     "Uniseg is a Python package used to determine Unicode text segmentations.
-Supported segmentations include:
-@enumerate
-@item @dfn{Code point} (any value in the Unicode codespace)
-@item @dfn{Grapheme cluster} (user-perceived character made of a single or
-multiple Unicode code points, e.g. \"G\" + acute-accent)
-@item Word break
-@item Sentence break
-@item Line break
-@end enumerate")
-    (license license:expat)))
-
 (define-public python-humanfriendly
   (package
     (name "python-humanfriendly")
@@ -7948,29 +7877,6 @@ Capabilities include:
 @end itemize")
     (license license:expat)))
 
-(define-public python-unidecode
-  (package
-    (name "python-unidecode")
-    (version "1.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "Unidecode" version))
-       (sha256
-        (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest python-setuptools))
-    (home-page "https://pypi.org/project/Unidecode/";)
-    (synopsis "ASCII transliterations of Unicode text")
-    (description
-     "Unidecode provides ASCII transliterations of Unicode text.  Unidecode is
-useful when integrating with legacy code that doesn't support Unicode, or for
-ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
-machine identifiers from human-readable Unicode strings that should still be
-somewhat intelligible.")
-    (license license:gpl2+)))
-
 (define-public python-text-unidecode
   (package
     (name "python-text-unidecode")
@@ -8168,27 +8074,6 @@ modules.  It creates a special virtual environment such 
that @command{pip} or
 work on your part.")
     (license license:expat)))
 
-(define-public python-uc-micro-py
-  (package
-    (name "python-uc-micro-py")
-    (version "1.0.1")
-    (source (origin
-              (method git-fetch)        ;for tests
-              (uri (git-reference
-                    (url "https://github.com/tsutsu3/uc.micro-py";)
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
-    (build-system pyproject-build-system)
-    (native-inputs (list python-pytest python-setuptools python-wheel))
-    (home-page "https://github.com/tsutsu3/uc.micro-py";)
-    (synopsis "Unicode data files for linkify-it-py projects")
-    (description "This package contains a micro subset of Unicode data files
-for linkify-it-py projects.")
-    (license license:expat)))
-
 (define-public python-linkify-it-py
   (package
     (name "python-linkify-it-py")
@@ -15138,154 +15023,6 @@ computing.")
 code.")
     (license license:bsd-3)))
 
-(define-public python-uri-template
-  (package
-    (name "python-uri-template")
-    (version "1.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "uri-template" version))
-       (sha256
-        (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      #:phases
-      '(modify-phases %standard-phases
-         (replace 'check
-           (lambda* (#:key tests? #:allow-other-keys)
-             (when tests?
-               (invoke "python3" "test.py")))))))
-    (native-inputs
-     (list python-setuptools
-           python-setuptools-scm
-           python-wheel))
-    (home-page "https://gitlab.linss.com/open-source/python/uri-template";)
-    (synopsis "RFC 6570 URI Template Processor")
-    (description "This package implements URI Template expansion in strict
-adherence to RFC 6570, but adds a few extensions.")
-    (license license:expat)))
-
-(define-public python-urwid
-  (package
-    (name "python-urwid")
-    (version "3.0.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urwid" version))
-       (sha256
-        (base32
-         "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      #:test-flags
-      #~(list "tests"
-              ;; According to Debian these tests are cursed.
-              ;; 
https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
-               "--ignore=tests/test_vterm.py")))
-    (native-inputs
-     (list python-pytest
-           python-pytest-cov
-           python-setuptools
-           python-setuptools-scm))
-    (propagated-inputs
-     (list python-wcwidth
-           ;; [optional]
-           python-pygobject
-           python-pyzmq
-           python-tornado
-           python-pyserial
-           python-twisted))
-    (home-page "https://urwid.org";)
-    (synopsis "Console user interface library for Python")
-    (description
-     "Urwid is a curses-based UI/widget library for Python.  It includes many
-features useful for text console applications.")
-    (license license:lgpl2.1+)))
-
-(define-public python-urwid-for-zulip-term
-  ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
-  ;; to pass, remove when no longer required.
-  (hidden-package
-   (package
-     (inherit python-urwid)
-     (version "2.1.2")
-     (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "urwid" version))
-        (sha256
-         (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
-     (arguments
-      (list #:tests? #f)))))
-
-(define-public python-urwid-2
-  (package
-    (inherit python-urwid)
-    (name "python-urwid")
-    (version "2.6.16")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urwid" version))
-       (sha256
-        (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
-
-(define-deprecated/public-alias python-urwid-3
-  python-urwid)            ;may be removed after 2025-11-12
-
-(define-public python-urwid-readline
-  (package
-    (name "python-urwid-readline")
-    (version "0.15.1")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              (url "https://github.com/rr-/urwid_readline";)
-              (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest
-           python-setuptools))
-    (propagated-inputs
-     (list python-urwid))
-    (home-page "https://github.com/rr-/urwid_readline";)
-    (synopsis "Text input widget for urwid that supports readline shortcuts")
-    (description
-     "This package provides a textbox edit widget for @code{python-urwid} that
-supports @code{readline} shortcuts.")
-    (license license:expat)))
-
-(define-public python-urwidgets
-  (package
-    (name "python-urwidgets")
-    (version "0.2.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "urwidgets" version))
-       (sha256
-        (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list #:tests? #f)) ;no tests
-    (native-inputs
-     (list python-setuptools))
-    (propagated-inputs
-     (list python-urwid-2))
-    (home-page "https://github.com/AnonymouX47/urwidgets";)
-    (synopsis "Collection of widgets for urwid")
-    (description
-     "This package provides a collection of widgets for urwid.")
-    (license license:expat)))
-
 (define-public python-textdistance
   (package
     (name "python-textdistance")
@@ -15324,83 +15061,6 @@ supports @code{readline} shortcuts.")
 distance between two or more sequences by many algorithms.")
     (license license:expat)))
 
-(define-public python-urwidtrees
-  (package
-    (name "python-urwidtrees")
-    (version "1.0.4")
-    (source
-      (origin
-        (method git-fetch)
-        ;; package author intends on distributing via github rather than pypi:
-        ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
-        (uri (git-reference
-               (url "https://github.com/pazz/urwidtrees";)
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-          (base32
-           "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
-    (build-system pyproject-build-system)
-    (arguments
-     '(#:tests? #f)) ; no tests
-    (propagated-inputs (list python-urwid))
-    (native-inputs (list python-mock python-setuptools python-wheel))
-    (home-page "https://github.com/pazz/urwidtrees";)
-    (synopsis "Tree widgets for urwid")
-    (description "Urwidtrees is a Widget Container API for the @code{urwid}
-toolkit.  Use it to build trees of widgets.")
-    (license license:gpl3+)))
-
-(define-public python-ua-parser
-  (package
-    (name "python-ua-parser")
-    (version "0.10.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "ua-parser" version))
-       (sha256
-        (base32
-         "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
-    (build-system pyproject-build-system)
-    (arguments
-     `(#:tests? #f))                    ;no test suite in release
-    (native-inputs
-     (list python-pyyaml
-           python-setuptools))
-    (home-page "https://github.com/ua-parser/uap-python";)
-    (synopsis "User agent parser")
-    (description
-     "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
-    (license license:asl2.0)))
-
-(define-public python-user-agents
-  (package
-    (name "python-user-agents")
-    (version "2.2.0")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/selwin/python-user-agents";)
-               (commit (string-append "v" version))))
-        (file-name (git-file-name name version))
-        (sha256
-          (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list #:test-backend #~'unittest))
-    (native-inputs
-     (list python-setuptools))
-    (propagated-inputs
-     (list python-ua-parser))
-    (home-page "https://github.com/selwin/python-user-agents";)
-    (synopsis "User Agent strings parsing library")
-  (description
-   "A library to identify devices (phones, tablets) and their capabilities by
-parsing (browser/HTTP) user agent strings.")
-  (license license:expat)))
-
 (define-public python-pydbus
   (package
     (name "python-pydbus")
@@ -20678,49 +20338,6 @@ document.")
 manipulation library.")
     (license license:expat)))
 
-(define-public python-uncertainties
-  (package
-    (name "python-uncertainties")
-    (version "3.2.3")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "uncertainties" version))
-       (sha256
-        (base32
-         "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest python-setuptools python-setuptools-scm python-wheel))
-    (propagated-inputs (list python-numpy))
-    (home-page "https://uncertainties.readthedocs.io/en/latest/";)
-    (synopsis "Calculations with uncertainties")
-    (description
-     "The uncertainties package transparently handles calculations with
-numbers with uncertainties.  It can also yield the derivatives of any
-expression.")
-    (license license:bsd-3)))
-
-(define-public python-unicodedata2
-  (package
-    (name "python-unicodedata2")
-    (version "16.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "unicodedata2" version))
-       (sha256
-        (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest
-           python-setuptools))
-    (home-page "https://github.com/fonttools/unicodedata2";)
-    (synopsis "Python unicodedata backport")
-    (description "This package corresponds to the latest @code{unicodedata}
-standard Python module.")
-    (license license:asl2.0)))
-
 (define-public python-asteval
   (package
     (name "python-asteval")
@@ -23496,39 +23113,6 @@ simple, lightweight implementation.")
      "This library validates email address syntax and deliverability.")
     (license license:cc0)))
 
-(define-public python-ukpostcodeparser
-  (package
-    (name "python-ukpostcodeparser")
-    (version "1.1.2")
-    (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "UkPostcodeParser" version))
-              (sha256
-               (base32
-                "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      #:test-flags
-      #~(list
-         ;; Tests for lowercase postcodes fail.
-         "-k" (string-join
-               (list "not test_091 "
-                     "test_097 "
-                     "test_098 "
-                     "test_125 "
-                     "test_131")
-               " and not ")
-         "ukpostcodeparser/test/parser.py")))
-    (native-inputs
-     (list python-pytest python-setuptools))
-    (home-page "https://github.com/hamstah/ukpostcodeparser";)
-    (synopsis "UK Postcode parser for Python")
-    (description
-     "This library provides the @code{parse_uk_postcode} function for
-parsing UK postcodes.")
-    (license license:expat)))
-
 (define-public python-faker
   (package
     (name "python-faker")
@@ -25832,40 +25416,6 @@ of x and y values, kneed will return the knee point of 
the function.  The knee
 point is the point of maximum curvature.")
     (license license:bsd-3)))
 
-(define-public python-utils
-  (package
-    (name "python-utils")
-    (version "3.9.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "python_utils" version))
-       (sha256
-        (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'fix-pytest-config
-            (lambda _
-              ;; Drop test coverage requirements.
-              (substitute* "pytest.ini"
-                ((".*--cov.*") "")))))))
-    (native-inputs
-     (list python-pytest
-           python-pytest-asyncio
-           python-setuptools))
-    (propagated-inputs
-     (list python-loguru
-           python-typing-extensions))
-    (home-page "https://github.com/WoLpH/python-utils";)
-    (synopsis "Convenient utilities not included with the standard Python 
install")
-    (description
-     "Python Utils is a collection of small Python functions and classes
-which make common patterns shorter and easier.")
-    (license license:bsd-2)))
-
 (define-public python-diff-cover
   (package
     (name "python-diff-cover")
@@ -28646,53 +28196,6 @@ interface to FUSE on various operating systems.  It's 
just one file and is
 implemented using @code{ctypes}.")
     (license license:isc)))
 
-(define-public python-update-checker
-  (package
-    (name "python-update-checker")
-    (version "0.18.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "update-checker" version))
-       (sha256
-        (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
-    (build-system pyproject-build-system)
-    (native-inputs
-     (list python-pytest
-           python-setuptools))
-    (propagated-inputs
-     (list python-requests))
-    (home-page "https://github.com/bboe/update_checker";)
-    (synopsis "Python module that will check for package updates")
-    (description "This package provides a Python module that will check for
-package updates.")
-    (license license:bsd-2)))
-
-(define-public python-userspacefs
-  (package
-    (name "python-userspacefs")
-    (version "2.0.5")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "userspacefs" version))
-        (sha256
-         (base32
-          "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list #:tests? #f)) ;no tests
-    (native-inputs
-     (list python-setuptools))
-    (propagated-inputs
-     (list python-fusepyng))
-    (home-page "https://thelig.ht/code/userspacefs/readme.html";)
-    (synopsis "User-space file systems for Python")
-    (description
-     "@code{userspacefs} is a library that allows you to easily write
-user-space file systems in Python.")
-    (license license:gpl3+)))
-
 (define-public python-stone
   (package
     (name "python-stone")
@@ -28910,29 +28413,6 @@ and corruption checks.")
 library to allow local file system access via @code{file://} URLs.")
     (license license:asl2.0)))
 
-(define-public python-ukkonen
-  (package
-    (name "python-ukkonen")
-    (version "1.0.1")
-    (source
-     (origin
-       ;; There are no tests in the PyPI tarball.
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/asottile/ukkonen";)
-             (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
-    (build-system pyproject-build-system)
-    (native-inputs (list python-pytest python-setuptools python-wheel))
-    (propagated-inputs (list python-cffi))
-    (home-page "https://github.com/asottile/ukkonen";)
-    (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
-    (description "This package is an implementation of of bounded Levenshtein
-distance (Ukkonen).")
-    (license license:expat)))
-
 (define-public python-identify
   (package
     (name "python-identify")
@@ -31023,48 +30503,6 @@ to and from JSON.  Common data types are implemented 
and it is easy to
 register custom encoders and decoders.")
     (license license:expat)))
 
-(define-public python-ujson
-  (package
-    (name "python-ujson")
-    (version "5.10.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (pypi-uri "ujson" version))
-        (sha256
-         (base32
-          "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
-        (modules '((guix build utils)))
-        (snippet
-         #~(begin (delete-file-recursively "deps")))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list
-      #:phases
-      #~(modify-phases %standard-phases
-          (add-after 'unpack 'link-to-system-double-conversion
-            (lambda* (#:key inputs #:allow-other-keys)
-              (let ((d-c (assoc-ref inputs "double-conversion")))
-                (substitute* "setup.py"
-                  (("./deps/double-conversion/double-conversion\"")
-                   (string-append d-c "/include/double-conversion\""))
-                  (("-lstdc++" stdc)
-                   (string-append "-L" d-c "/lib\","
-                                  " \"-ldouble-conversion\","
-                                  " \"" stdc)))))))))
-    (native-inputs
-     (list double-conversion
-           python-pytest
-           python-setuptools
-           python-setuptools-scm
-           python-wheel))
-    (home-page "https://github.com/ultrajson/ultrajson";)
-    (synopsis "Ultra fast JSON encoder and decoder for Python")
-    (description
-     "UltraJSON is an ultra fast JSON encoder and decoder written in pure C 
with
-bindings for Python 3.")
-    (license license:bsd-3)))
-
 ;; XXX: See: <https://codeberg.org/guix/guix/issues/3054>.
 (define-public python-iocapture
   ;; The latest release is more than a year older than this commit.
@@ -31792,32 +31230,6 @@ as JSON objects.  With JSON we can make our logs more 
readable by machines and
 we can stop writing custom parsers for syslog-type records.")
     (license license:bsd-3)))
 
-(define-public python-unique-log-filter
-  (package
-    (name "python-unique-log-filter")
-    (version "0.1.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              (url "https://github.com/twizmwazin/unique_log_filter";)
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
-    (build-system pyproject-build-system)
-    (arguments
-     (list #:test-backend #~'custom
-           #:test-flags #~(list "test_unique_log_filter.py")))
-    (native-inputs (list python-flit-core))
-    (home-page "https://github.com/twizmwazin/unique_log_filter";)
-    (synopsis "Log filter that removes duplicate log messages")
-    (description
-     "This library provides a filter for the @code{logging} module
-from the Python standard library which allows removing duplicate log
-messages.")
-    (license license:bsd-2)))
-
 (define-public python-daiquiri
   (package
     (name "python-daiquiri")
@@ -31992,32 +31404,6 @@ implements the complete mapping interface.  It can be 
used as a drop-in
 replacement for dictionaries where immutability is desired.")
     (license license:expat)))
 
-(define-public python-unpaddedbase64
-  (package
-    (name "python-unpaddedbase64")
-    (version "2.1.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-              (url "https://github.com/matrix-org/python-unpaddedbase64";)
-              (commit (string-append "v" version))))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
-    (build-system pyproject-build-system)
-    (native-inputs (list python-poetry-core
-                         python-pytest
-                         python-setuptools
-                         python-wheel))
-    (home-page "https://github.com/matrix-org/python-unpaddedbase64";)
-    (synopsis "Encode and decode Base64 without “=” padding")
-    (description
-     "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
-using “=” characters.  However this conveys no benefit so many protocols
-choose to use Base64 without the “=” padding.")
-    (license license:asl2.0)))
-
 (define-public python-py-cpuinfo
   (package
     (name "python-py-cpuinfo")
@@ -33390,29 +32776,6 @@ a console.  It provides a collection of ‘print’ 
functions that allow you to
 cleanly print different types of messages.")
     (license license:gpl3+)))
 
-(define-public python-userpath
-  (package
-    (name "python-userpath")
-    (version "1.9.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "userpath" version))
-       (sha256
-        (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
-    (build-system pyproject-build-system)
-    (arguments
-     ;; See https://github.com/ofek/userpath/issues/43.
-     ;; In Guix, tests try to find the temporary build directory in PATH, but
-     ;; only the store output is present.
-     (list #:tests? #f))
-    (native-inputs (list python-hatchling python-pytest))
-    (propagated-inputs (list python-click))
-    (home-page "https://github.com/ofek/userpath";)
-    (synopsis "Add locations to the user's PATH")
-    (description "This package provides a tool for modifying a user's PATH.")
-    (license license:expat)))
-
 (define-public hatch
   (package
     (name "hatch")
@@ -38900,6 +38263,643 @@ instance in spelling correction, predictive typing, 
to help disabled people
 write text fast, and for various text generation, statistics, and modeling 
tasks.")
     (license license:expat)))
 
+(define-public python-ua-parser
+  (package
+    (name "python-ua-parser")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "ua-parser" version))
+       (sha256
+        (base32
+         "0csh307zfz666kkk5idrw3crj1x8q8vsqgwqil0r1n1hs4p7ica7"))))
+    (build-system pyproject-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no test suite in release
+    (native-inputs
+     (list python-pyyaml
+           python-setuptools))
+    (home-page "https://github.com/ua-parser/uap-python";)
+    (synopsis "User agent parser")
+    (description
+     "@code{ua-parser} is a Python port of Browserscope's user agent parser.")
+    (license license:asl2.0)))
+
+(define-public python-ubelt
+  (package
+    (name "python-ubelt")
+    (version "1.3.6")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Erotemic/ubelt";)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1v2kf9lbdfaf9nppdq45rfanz4bdd2v6x59iajcznwgc4jmhj2na"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      ;; The builder user home doesn't match HOME, which causes this test to
+      ;; fail.
+      #:test-flags #~(list "-k" "not userhome")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'check 'pre-check
+            (lambda _
+              (setenv "HOME" "/tmp")))))) ;else the test suite hangs
+    (native-inputs
+     (list python-pytest
+           python-requests
+           python-setuptools
+           python-wheel
+           python-xdoctest))
+    (propagated-inputs
+     (list python-ordered-set))
+    (home-page "https://github.com/Erotemic/ubelt";)
+    (synopsis "Python library for hashing, caching, timing and more")
+    (description
+     "Ubelt is a small library of simple functions that extend the Python
+standard library.  It includes an @acronym{API, Application Programming
+Interface} to simplify common problems such as caching, timing, computing
+progress, among other things.")
+    (license license:asl2.0)))
+
+(define-public python-uc-micro-py
+  (package
+    (name "python-uc-micro-py")
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/tsutsu3/uc.micro-py";)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "17f55gi55rg47nm88fn3f8851ph03dgykdp011lxr3j6hk18lyfv"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest python-setuptools python-wheel))
+    (home-page "https://github.com/tsutsu3/uc.micro-py";)
+    (synopsis "Unicode data files for linkify-it-py projects")
+    (description "This package contains a micro subset of Unicode data files
+for linkify-it-py projects.")
+    (license license:expat)))
+
+(define-public python-ujson
+  (package
+    (name "python-ujson")
+    (version "5.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "ujson" version))
+        (sha256
+         (base32
+          "1habmn3bmmv2ym4ldiijcavdkdzp8h28h60hgwjkhxwcbly8zkdk"))
+        (modules '((guix build utils)))
+        (snippet
+         #~(begin (delete-file-recursively "deps")))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'link-to-system-double-conversion
+            (lambda* (#:key inputs #:allow-other-keys)
+              (let ((d-c (assoc-ref inputs "double-conversion")))
+                (substitute* "setup.py"
+                  (("./deps/double-conversion/double-conversion\"")
+                   (string-append d-c "/include/double-conversion\""))
+                  (("-lstdc++" stdc)
+                   (string-append "-L" d-c "/lib\","
+                                  " \"-ldouble-conversion\","
+                                  " \"" stdc)))))))))
+    (native-inputs
+     (list double-conversion
+           python-pytest
+           python-setuptools
+           python-setuptools-scm
+           python-wheel))
+    (home-page "https://github.com/ultrajson/ultrajson";)
+    (synopsis "Ultra fast JSON encoder and decoder for Python")
+    (description
+     "UltraJSON is an ultra fast JSON encoder and decoder written in pure C 
with
+bindings for Python 3.")
+    (license license:bsd-3)))
+
+(define-public python-ukkonen
+  (package
+    (name "python-ukkonen")
+    (version "1.0.1")
+    (source
+     (origin
+       ;; There are no tests in the PyPI tarball.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/asottile/ukkonen";)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "17gspl2dsykg000275svvyam4k7wz9ypi9xrfrmsgcgryczravlc"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest python-setuptools python-wheel))
+    (propagated-inputs (list python-cffi))
+    (home-page "https://github.com/asottile/ukkonen";)
+    (synopsis "Implementation of bounded Levenshtein distance (Ukkonen)")
+    (description "This package is an implementation of of bounded Levenshtein
+distance (Ukkonen).")
+    (license license:expat)))
+
+(define-public python-ukpostcodeparser
+  (package
+    (name "python-ukpostcodeparser")
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "UkPostcodeParser" version))
+              (sha256
+               (base32
+                "03jkf1ygbwq3akzbcjyjk1akc1hv2sfgx90306pq1nwklbpn80lk"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      #~(list
+         ;; Tests for lowercase postcodes fail.
+         "-k" (string-join
+               (list "not test_091 "
+                     "test_097 "
+                     "test_098 "
+                     "test_125 "
+                     "test_131")
+               " and not ")
+         "ukpostcodeparser/test/parser.py")))
+    (native-inputs
+     (list python-pytest python-setuptools))
+    (home-page "https://github.com/hamstah/ukpostcodeparser";)
+    (synopsis "UK Postcode parser for Python")
+    (description
+     "This library provides the @code{parse_uk_postcode} function for
+parsing UK postcodes.")
+    (license license:expat)))
+
+(define-public python-uncertainties
+  (package
+    (name "python-uncertainties")
+    (version "3.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "uncertainties" version))
+       (sha256
+        (base32
+         "0c9hl35jvld1a1vinh9mdcpfgz4ykqinlm1dj917lqbgd0z6b9bn"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest python-setuptools python-setuptools-scm python-wheel))
+    (propagated-inputs (list python-numpy))
+    (home-page "https://uncertainties.readthedocs.io/en/latest/";)
+    (synopsis "Calculations with uncertainties")
+    (description
+     "The uncertainties package transparently handles calculations with
+numbers with uncertainties.  It can also yield the derivatives of any
+expression.")
+    (license license:bsd-3)))
+
+(define-public python-unicodedata2
+  (package
+    (name "python-unicodedata2")
+    (version "16.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "unicodedata2" version))
+       (sha256
+        (base32 "1z3llixb4cd6cc6nmyps5vv2sss14n3x6dzcc65xg75mj9jqsj05"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest
+           python-setuptools))
+    (home-page "https://github.com/fonttools/unicodedata2";)
+    (synopsis "Python unicodedata backport")
+    (description "This package corresponds to the latest @code{unicodedata}
+standard Python module.")
+    (license license:asl2.0)))
+
+(define-public python-unidecode
+  (package
+    (name "python-unidecode")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Unidecode" version))
+       (sha256
+        (base32 "08rbx8vxsnj06cvrdxy80zrn9hk25lwcqfh2fdjng2rk1189hdff"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest python-setuptools))
+    (home-page "https://pypi.org/project/Unidecode/";)
+    (synopsis "ASCII transliterations of Unicode text")
+    (description
+     "Unidecode provides ASCII transliterations of Unicode text.  Unidecode is
+useful when integrating with legacy code that doesn't support Unicode, or for
+ease of entry of non-Roman names on a US keyboard, or when constructing ASCII
+machine identifiers from human-readable Unicode strings that should still be
+somewhat intelligible.")
+    (license license:gpl2+)))
+
+(define-public python-unique-log-filter
+  (package
+    (name "python-unique-log-filter")
+    (version "0.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/twizmwazin/unique_log_filter";)
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "036mh6nqskck2fa1q2inasqxb9wcz2p09qcpldnnffzcy1a6kzba"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:test-backend #~'custom
+           #:test-flags #~(list "test_unique_log_filter.py")))
+    (native-inputs (list python-flit-core))
+    (home-page "https://github.com/twizmwazin/unique_log_filter";)
+    (synopsis "Log filter that removes duplicate log messages")
+    (description
+     "This library provides a filter for the @code{logging} module
+from the Python standard library which allows removing duplicate log
+messages.")
+    (license license:bsd-2)))
+
+(define-public python-uniseg
+  (package
+    (name "python-uniseg")
+    (version "0.10.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "uniseg" version))
+       (sha256
+        (base32 "18sj1i7xlssrsfwlr95bd4x78mfhq0v6irfx3b7fkgr17a5jbsmm"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest
+           python-setuptools
+           python-setuptools-scm))
+    (home-page "https://bitbucket.org/emptypage/uniseg-python";)
+    (synopsis "Python library to determine Unicode text segmentations")
+    (description
+     "Uniseg is a Python package used to determine Unicode text segmentations.
+Supported segmentations include:
+@enumerate
+@item @dfn{Code point} (any value in the Unicode codespace)
+@item @dfn{Grapheme cluster} (user-perceived character made of a single or
+multiple Unicode code points, e.g. \"G\" + acute-accent)
+@item Word break
+@item Sentence break
+@item Line break
+@end enumerate")
+    (license license:expat)))
+
+(define-public python-unpaddedbase64
+  (package
+    (name "python-unpaddedbase64")
+    (version "2.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/matrix-org/python-unpaddedbase64";)
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1n6har8pxv0mqb96lanzihp1xf76aa17jw3977drb1fgz947pnmz"))))
+    (build-system pyproject-build-system)
+    (native-inputs (list python-poetry-core
+                         python-pytest
+                         python-setuptools
+                         python-wheel))
+    (home-page "https://github.com/matrix-org/python-unpaddedbase64";)
+    (synopsis "Encode and decode Base64 without “=” padding")
+    (description
+     "RFC 4648 specifies that Base64 should be padded to a multiple of 4 bytes
+using “=” characters.  However this conveys no benefit so many protocols
+choose to use Base64 without the “=” padding.")
+    (license license:asl2.0)))
+
+(define-public python-update-checker
+  (package
+    (name "python-update-checker")
+    (version "0.18.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "update-checker" version))
+       (sha256
+        (base32 "04yb5a9mi45ax50m2m0ih6gdvkk1j7gfmy83dd58i1f59axlabba"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest
+           python-setuptools))
+    (propagated-inputs
+     (list python-requests))
+    (home-page "https://github.com/bboe/update_checker";)
+    (synopsis "Python module that will check for package updates")
+    (description "This package provides a Python module that will check for
+package updates.")
+    (license license:bsd-2)))
+
+(define-public python-uri-template
+  (package
+    (name "python-uri-template")
+    (version "1.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "uri-template" version))
+       (sha256
+        (base32 "1ixczlgnsjv2850r6w0cb2npwcwzdqri8njr1pi7v371cpmzh00f"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      '(modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key tests? #:allow-other-keys)
+             (when tests?
+               (invoke "python3" "test.py")))))))
+    (native-inputs
+     (list python-setuptools
+           python-setuptools-scm
+           python-wheel))
+    (home-page "https://gitlab.linss.com/open-source/python/uri-template";)
+    (synopsis "RFC 6570 URI Template Processor")
+    (description "This package implements URI Template expansion in strict
+adherence to RFC 6570, but adds a few extensions.")
+    (license license:expat)))
+
+(define-public python-urwid
+  (package
+    (name "python-urwid")
+    (version "3.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "urwid" version))
+       (sha256
+        (base32
+         "16zdji1fdr5jbry9h01dxwnadrygs1xj415jqnhmmnlcavfh821h"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      #~(list "tests"
+              ;; According to Debian these tests are cursed.
+              ;; 
https://salsa.debian.org/python-team/packages/urwid/-/blob/debian/2.1.2-2/debian/changelog#L141
+               "--ignore=tests/test_vterm.py")))
+    (native-inputs
+     (list python-pytest
+           python-pytest-cov
+           python-setuptools
+           python-setuptools-scm))
+    (propagated-inputs
+     (list python-wcwidth
+           ;; [optional]
+           python-pygobject
+           python-pyzmq
+           python-tornado
+           python-pyserial
+           python-twisted))
+    (home-page "https://urwid.org";)
+    (synopsis "Console user interface library for Python")
+    (description
+     "Urwid is a curses-based UI/widget library for Python.  It includes many
+features useful for text console applications.")
+    (license license:lgpl2.1+)))
+
+(define-public python-urwid-2
+  (package
+    (inherit python-urwid)
+    (name "python-urwid")
+    (version "2.6.16")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "urwid" version))
+       (sha256
+        (base32 "18ijvgf1l7jvmg45x1cysn3c9rdrg1w0405acig3hk7476cj7bck"))))))
+
+(define-deprecated/public-alias python-urwid-3
+  python-urwid)            ;may be removed after 2025-11-12
+
+(define-public python-urwid-for-zulip-term
+  ;; [email protected] requires exact 2.1.2 version otherewise some tests fail
+  ;; to pass, remove when no longer required.
+  (hidden-package
+   (package
+     (inherit python-urwid)
+     (version "2.1.2")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "urwid" version))
+        (sha256
+         (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq"))))
+     (arguments
+      (list #:tests? #f)))))
+
+(define-public python-urwid-readline
+  (package
+    (name "python-urwid-readline")
+    (version "0.15.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/rr-/urwid_readline";)
+              (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0zhpx86gvpkziclb7bcqn73fadkzn805rjqy7lzhrza46lphq8qy"))))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list python-pytest
+           python-setuptools))
+    (propagated-inputs
+     (list python-urwid))
+    (home-page "https://github.com/rr-/urwid_readline";)
+    (synopsis "Text input widget for urwid that supports readline shortcuts")
+    (description
+     "This package provides a textbox edit widget for @code{python-urwid} that
+supports @code{readline} shortcuts.")
+    (license license:expat)))
+
+(define-public python-urwidgets
+  (package
+    (name "python-urwidgets")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "urwidgets" version))
+       (sha256
+        (base32 "1vrydw9h8c5gi89dnv12a9cdyyxaffvxl1kq51f118cxjk9brwpr"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:tests? #f)) ;no tests
+    (native-inputs
+     (list python-setuptools))
+    (propagated-inputs
+     (list python-urwid-2))
+    (home-page "https://github.com/AnonymouX47/urwidgets";)
+    (synopsis "Collection of widgets for urwid")
+    (description
+     "This package provides a collection of widgets for urwid.")
+    (license license:expat)))
+
+(define-public python-urwidtrees
+  (package
+    (name "python-urwidtrees")
+    (version "1.0.4")
+    (source
+      (origin
+        (method git-fetch)
+        ;; package author intends on distributing via github rather than pypi:
+        ;; https://github.com/pazz/alot/issues/877#issuecomment-230173331
+        (uri (git-reference
+               (url "https://github.com/pazz/urwidtrees";)
+               (commit version)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32
+           "17k0gx8i7wrzw6skzdjh9b8v3n6lb5zvg9jrybc3d09p8ipvc31i"))))
+    (build-system pyproject-build-system)
+    (arguments
+     '(#:tests? #f)) ; no tests
+    (propagated-inputs (list python-urwid))
+    (native-inputs (list python-mock python-setuptools python-wheel))
+    (home-page "https://github.com/pazz/urwidtrees";)
+    (synopsis "Tree widgets for urwid")
+    (description "Urwidtrees is a Widget Container API for the @code{urwid}
+toolkit.  Use it to build trees of widgets.")
+    (license license:gpl3+)))
+
+(define-public python-user-agents
+  (package
+    (name "python-user-agents")
+    (version "2.2.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/selwin/python-user-agents";)
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0pcbjqj21c2ixhl414bh2h8khi8y1igzfpkyqwan1pakix0lq45a"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:test-backend #~'unittest))
+    (native-inputs
+     (list python-setuptools))
+    (propagated-inputs
+     (list python-ua-parser))
+    (home-page "https://github.com/selwin/python-user-agents";)
+    (synopsis "User Agent strings parsing library")
+  (description
+   "A library to identify devices (phones, tablets) and their capabilities by
+parsing (browser/HTTP) user agent strings.")
+  (license license:expat)))
+
+(define-public python-userpath
+  (package
+    (name "python-userpath")
+    (version "1.9.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "userpath" version))
+       (sha256
+        (base32 "05fqxzdi27vqm5lywxs6bm2j4d8k91fx2ihqhg65g4h6mf6jhlkc"))))
+    (build-system pyproject-build-system)
+    (arguments
+     ;; See https://github.com/ofek/userpath/issues/43.
+     ;; In Guix, tests try to find the temporary build directory in PATH, but
+     ;; only the store output is present.
+     (list #:tests? #f))
+    (native-inputs (list python-hatchling python-pytest))
+    (propagated-inputs (list python-click))
+    (home-page "https://github.com/ofek/userpath";)
+    (synopsis "Add locations to the user's PATH")
+    (description "This package provides a tool for modifying a user's PATH.")
+    (license license:expat)))
+
+(define-public python-userspacefs
+  (package
+    (name "python-userspacefs")
+    (version "2.0.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "userspacefs" version))
+        (sha256
+         (base32
+          "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:tests? #f)) ;no tests
+    (native-inputs
+     (list python-setuptools))
+    (propagated-inputs
+     (list python-fusepyng))
+    (home-page "https://thelig.ht/code/userspacefs/readme.html";)
+    (synopsis "User-space file systems for Python")
+    (description
+     "@code{userspacefs} is a library that allows you to easily write
+user-space file systems in Python.")
+    (license license:gpl3+)))
+
+(define-public python-utils
+  (package
+    (name "python-utils")
+    (version "3.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python_utils" version))
+       (sha256
+        (base32 "18292j4p1bvlpbrfj2cgkdby6dpgnl5gbjwly0qb4pj1j914nmzb"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-pytest-config
+            (lambda _
+              ;; Drop test coverage requirements.
+              (substitute* "pytest.ini"
+                ((".*--cov.*") "")))))))
+    (native-inputs
+     (list python-pytest
+           python-pytest-asyncio
+           python-setuptools))
+    (propagated-inputs
+     (list python-loguru
+           python-typing-extensions))
+    (home-page "https://github.com/WoLpH/python-utils";)
+    (synopsis "Convenient utilities not included with the standard Python 
install")
+    (description
+     "Python Utils is a collection of small Python functions and classes
+which make common patterns shorter and easier.")
+    (license license:bsd-2)))
+
 (define-public python-validate-email
   (package
     (name "python-validate-email")

Reply via email to