diff options
Diffstat (limited to 'gnu/packages/python-xyz.scm')
-rw-r--r-- | gnu/packages/python-xyz.scm | 2806 |
1 files changed, 1392 insertions, 1414 deletions
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index b3a350aca4..f52a1fed74 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -37,7 +37,7 @@ ;;; Copyright © 2017 Frederick M. Muriithi <[email protected]> ;;; Copyright © 2017, 2018 Adriano Peluso <[email protected]> ;;; Copyright © 2017 Ben Sturmfels <[email protected]> -;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <[email protected]> +;;; Copyright © 2017, 2018, 2019, 2021 Mathieu Othacehe <[email protected]> ;;; Copyright © 2017 José Miguel Sánchez García <[email protected]> ;;; Copyright © 2017, 2020, 2021 Roel Janssen <[email protected]> ;;; Copyright © 2017, 2018, 2019 Kei Kebreau <[email protected]> @@ -149,6 +149,7 @@ #:use-module (gnu packages enchant) #:use-module (gnu packages file) #:use-module (gnu packages fontutils) + #:use-module (gnu packages freedesktop) #:use-module (gnu packages gcc) #:use-module (gnu packages geo) #:use-module (gnu packages ghostscript) @@ -226,6 +227,7 @@ #:use-module (guix download) #:use-module (guix git-download) #:use-module (guix hg-download) + #:use-module (guix gexp) #:use-module (guix utils) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) @@ -777,12 +779,7 @@ implementation for the Telegram Bot API.") `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - ;; Extend PYTHONPATH so the built package will be found. - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-p" "no:logging") - #t))))) + (invoke "pytest" "-p" "no:logging")))))) (home-page "https://github.com/borntyping/python-colorlog") (synopsis "Log formatting with colors for python") (description "The @code{colorlog.ColoredFormatter} is a formatter for use @@ -964,25 +961,22 @@ to CommonMark.") (lambda _ (substitute* "pymediainfo/__init__.py" (("libmediainfo.so.0") - (string-append (assoc-ref %build-inputs "libmediainfo") - "/lib/libmediainfo.so.0"))) - #t)) + (search-input-file %build-inputs + "/lib/libmediainfo.so.0"))))) (replace 'check - (lambda* (#:key tests? #:allow-other-keys) + (lambda* (#:key tests? inputs outputs #:allow-other-keys) (when tests? - ;; Extend PYTHONPATH so the built package will be found. - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) - ;; Skip the only failing test "test_parse_url" + (add-installed-pythonpath inputs outputs) + ;; Skip the only failing test "test_parse_url" because it tries + ;; to access the internet. (invoke "pytest" "-vv" "-k" "not test_parse_url"))))))) (home-page "https://github.com/sbraz/pymediainfo") (synopsis "Python wrapper for the mediainfo library") (description - "Python wrapper for the mediainfo library to access the technical and tag -data for video and audio files.") + "This package provides a Python wrapper for the mediainfo library to +access the technical and tag data for video and audio files.") (license license:expat))) (define-public python-psutil @@ -1156,15 +1150,16 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.") (version "2.9.0") (source (origin - (method url-fetch) - (uri (pypi-uri "Babel" version)) - (sha256 - (base32 - "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys")))) + (method url-fetch) + (uri (pypi-uri "Babel" version)) + (sha256 + (base32 + "018yg7g2pa6vjixx1nx41cfispgfi0azzp0a1chlycbj8jsil0ys")))) (build-system python-build-system) (native-inputs `(("python-freezegun" ,python-freezegun) - ("python-pytest" ,python-pytest))) + ("python-pytest" ,python-pytest) + ("tzdata" ,tzdata-for-tests))) (propagated-inputs `(("python-pytz" ,python-pytz))) (arguments @@ -1172,7 +1167,7 @@ by @code{binstar}, @code{binstar-build}, and @code{chalmers}.") (replace 'check (lambda _ (invoke "pytest" "-vv")))))) - (home-page "http://babel.pocoo.org/") + (home-page "https://babel.pocoo.org/") (synopsis "Tools for internationalizing Python applications") (description @@ -1224,7 +1219,7 @@ and verifies that it matches the intended target hostname.") (build-system python-build-system) (native-inputs `(("python-coverage" ,python-coverage) - ("python-hypothesis" ,python-hypothesis-5.23) ; use_true_random=... from >=5.19.0 + ("python-hypothesis" ,python-hypothesis) ("python-pre-commit" ,python-pre-commit) ("python-py" ,python-py) ("python-pytest" ,python-pytest) @@ -1324,14 +1319,6 @@ Expressions are constructed from parsed strings or directly in Python.") (modify-phases %standard-phases (replace 'check (lambda _ - ;; The 'runexamples' script sets PYTHONPATH to CWD, then goes - ;; on to import numpy. Somehow this works on their CI system. - ;; Let's just manage PYTHONPATH here instead. - (substitute* "runexamples.sh" - (("export PYTHONPATH=.*") "")) - (setenv "PYTHONPATH" - (string-append (getcwd) ":" - (getenv "PYTHONPATH"))) (invoke "./runexamples.sh") (invoke "nosetests" "-v")))))) (home-page "https://github.com/fhs/python-hdf4") @@ -1994,9 +1981,6 @@ language. It aims to be fast.") `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (format #t "current working dir ~s~%" (getcwd)) - (setenv "PYTHONPATH" - (string-append ".:" (getenv "PYTHONPATH"))) ;; We must run the test suite module directly, as it ;; fails to define the 'tempdir' variable in scope for ;; the tests otherwise @@ -2466,27 +2450,47 @@ standard.") (sha256 (base32 "1qzjj8nwj4dn0mhq1j64f136afiqqb81lvqiikipz3g1g0b80lqx")))) - (arguments '(#:tests? #f))))) ; No test suite. + (arguments + `(#:python ,python-2 + #:tests? #f))))) ; No test suite. (define-public python-eventlet (package (name "python-eventlet") - (version "0.25.1") + (version "0.33.0") (source (origin (method url-fetch) (uri (pypi-uri "eventlet" version)) (sha256 (base32 - "1hgz8jq19wlz8vwqj900ry8cjv578nz4scc91mlc8944yid6573c")))) + "07qlyhcm0f28sxdizawvdf3d50m3hnbzz5kg3fjp7chvki44y540")))) (build-system python-build-system) (propagated-inputs `(("python-dnspython" ,python-dnspython) ("python-greenlet" ,python-greenlet) - ("python-monotonic" ,python-monotonic))) + ("python-monotonic" ,python-monotonic) + ("python-six" ,python-six))) + (native-inputs + `(("python-nose" ,python-nose))) (arguments - ;; TODO: Requires unpackaged 'enum-compat'. - '(#:tests? #f)) + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'avoid-OSError + (lambda _ + ;; If eventlet tries to load greendns, an OSError is thrown when + ;; getprotobyname is called. Thankfully there is an environment + ;; variable to disable the greendns import, so use it: + (setenv "EVENTLET_NO_GREENDNS" "yes"))) + (add-after 'unpack 'delete-broken-tests + (lambda _ + (delete-file "tests/greendns_test.py") + (delete-file "tests/socket_test.py"))) + ;; See https://github.com/eventlet/eventlet/issues/562#issuecomment-714183009 + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "nosetests" "-v" "tests/"))))))) (home-page "https://eventlet.net") (synopsis "Concurrent networking library for Python") (description @@ -2497,7 +2501,7 @@ Coroutines ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O. The event dispatch is implicit, which means you can easily use @code{Eventlet} from the Python interpreter, or as a small part of a larger application.") - (license license:expat))) + (license license:expat))) (define-public python-sinfo (package @@ -2519,48 +2523,20 @@ in the current session, Python, and the OS.") (license license:bsd-3))) (define-public python-six - (package + (package/inherit python-six-bootstrap (name "python-six") - (version "1.14.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "six" version)) - (sha256 - (base32 - "02lw67hprv57hyg3cfy02y3ixjk3nzwc0dx3c4ynlvkfwkfdnsr3")))) - (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (invoke "py.test" "-v")))))) + (invoke "pytest" "-v")))))) (native-inputs - `(("python-pytest" ,python-pytest-bootstrap))) - (home-page "https://pypi.org/project/six/") - (synopsis "Python 2 and 3 compatibility utilities") - (description - "Six is a Python 2 and 3 compatibility library. It provides utility -functions for smoothing over the differences between the Python versions with -the goal of writing Python code that is compatible on both Python versions. -Six supports every Python version since 2.5. It is contained in only one -Python file, so it can be easily copied into your project.") - (license license:x11))) + `(("python-pytest" ,python-pytest-bootstrap))))) (define-public python2-six (package-with-python2 python-six)) -(define-public python-six-bootstrap - (package - (inherit python-six) - (name "python-six-bootstrap") - (native-inputs `()) - (arguments `(#:tests? #f)))) - -(define-public python2-six-bootstrap - (package-with-python2 python-six-bootstrap)) - (define-public python-schedule (package (name "python-schedule") @@ -2666,16 +2642,18 @@ audio playback capability for Python 3 on OSX, Windows, and Linux.") (define-public python-simplejson (package (name "python-simplejson") - (version "3.17.0") + (version "3.17.2") (source (origin (method url-fetch) (uri (pypi-uri "simplejson" version)) (sha256 (base32 - "108yf3252fy4ndqab7h46raksxfhcn113bzy2yd8369vidrjnjrb")))) + "0hc8nqwdlll4a9cr1k9msn5kmb6kmbjirpgvhjh254nr4sgwgv3m")))) (build-system python-build-system) - (home-page "http://simplejson.readthedocs.org/en/latest/") + (native-inputs + `(("python-toml" ,python-toml))) + (home-page "https://simplejson.readthedocs.io/en/latest") (synopsis "Json library for Python") (description @@ -2698,14 +2676,14 @@ Python 3.3+.") (define-public python-pyicu (package (name "python-pyicu") - (version "2.4.3") + (version "2.7.4") (source (origin (method url-fetch) (uri (pypi-uri "PyICU" version)) (sha256 (base32 - "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0")))) + "0mkz1673qxldxs4mrqg9882xgmz5fhpia17yrsd6z8dfw8156rf0")))) (build-system python-build-system) (inputs `(("icu4c" ,icu4c))) @@ -3229,14 +3207,14 @@ server.") (define-public python-py (package (name "python-py") - (version "1.8.1") + (version "1.10.0") (source (origin (method url-fetch) (uri (pypi-uri "py" version)) (sha256 (base32 - "1ajjazg3913n0sp3vjyva9c2qh5anx8ziryng935f89604a0h9sy")))) + "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11")))) (build-system python-build-system) (arguments ;; FIXME: "ImportError: 'test' module incorrectly imported from @@ -3253,18 +3231,6 @@ server.") code introspection, and logging.") (license license:expat))) -(define-public python-py-next - (package - (inherit python-py) - (version "1.10.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "py" version)) - (sha256 - (base32 - "1lqvkqk3b440g9z82gqbzlzas84wrm6ir8kplzhzavmn2pd1pf11")))))) - (define-public python2-py (package-with-python2 python-py)) @@ -3459,11 +3425,9 @@ interfaces.") "cross-libc" "libc")))) (substitute* "src/click/_unicodefun.py" (("'locale'") - (string-append "'" glibc "/bin/locale'")))) - #t)) + (string-append "'" glibc "/bin/locale'")))))) (replace 'check (lambda _ - (setenv "PYTHONPATH" (string-append "./src:" (getenv "PYTHONPATH"))) (invoke "python" "-m" "pytest")))))) (native-inputs `(("python-pytest" ,python-pytest))) @@ -3602,16 +3566,15 @@ compare, diff, and patch JSON and JSON-like structures in Python.") '(#:phases (modify-phases %standard-phases (replace 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - (add-installed-pythonpath inputs outputs) - (setenv "PYTHONPATH" (string-append ".:" (getenv "PYTHONPATH"))) - (invoke "trial" "jsonschema")))))) + (lambda* (#:key inputs outputs tests? #:allow-other-keys) + (when tests? + (setenv "JSON_SCHEMA_TEST_SUITE" "json") + (invoke "trial" "jsonschema"))))))) (native-inputs `(("python-setuptools_scm" ,python-setuptools-scm) ("python-twisted" ,python-twisted))) (propagated-inputs `(("python-attrs" ,python-attrs) - ("python-importlib-metadata" ,python-importlib-metadata) ;; python < 3.8 ("python-pyrsistent" ,python-pyrsistent) ("python-six" ,python-six))) (home-page "https://github.com/Julian/jsonschema") @@ -3746,9 +3709,6 @@ somewhat intelligible.") '(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (setenv "PYTHONPATH" - (string-append "./build/lib:" - (getenv "PYTHONPATH"))) (invoke "pytest" "-vv")))))) (native-inputs `(("python-pytest" ,python-pytest))) @@ -3844,13 +3804,13 @@ JavaScript-like message boxes. Types of dialog boxes include: (package (name "python-pympler") (home-page "https://pythonhosted.org/Pympler/") - (version "0.8") + (version "0.9") (source (origin (method url-fetch) (uri (pypi-uri "Pympler" version)) (sha256 (base32 - "08mrpnb6cv2nvfncvr8a9a8bpwhnasa924anapnjvnaw5jcd4k7p")))) + "0ivfw2k86nbw9ck9swidl4422w7bhjldxwj90a4sy5r1cbgygjzj")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -3879,14 +3839,14 @@ visualisation and class tracker statistics.") (define-public python-itsdangerous (package (name "python-itsdangerous") - (version "1.1.0") + (version "2.0.1") (source (origin (method url-fetch) (uri (pypi-uri "itsdangerous" version)) (sha256 (base32 - "068zpbksq5q2z4dckh2k1zbcq43ay74ylqn77rni797j0wyh66rj")))) + "1w6gfb2zhbcmrfj6digwzw1z68w6zg1q87rm6la2m412zil4swly")))) (build-system python-build-system) (home-page "https://palletsprojects.com/p/itsdangerous/") (synopsis "Python library for passing data to/from untrusted environments") @@ -3895,9 +3855,6 @@ visualisation and class tracker statistics.") environments and back.") (license license:bsd-3))) -(define-public python2-itsdangerous - (package-with-python2 python-itsdangerous)) - (define-public python-pyyaml (package (name "python-pyyaml") @@ -3911,7 +3868,8 @@ environments and back.") "0pm440pmpvgv5rbbnm8hk4qga5a292kvlm1bh3x2nwr8pb5p8xv0")))) (build-system python-build-system) (inputs - `(("libyaml" ,libyaml))) + `(("libyaml" ,libyaml) + ("python-cython" ,python-cython))) (home-page "https://pyyaml.org") (synopsis "YAML parser and emitter for Python") (description @@ -3951,64 +3909,56 @@ e.g. filters, callbacks and errbacks can all be promises.") (define-public python-virtualenv (package (name "python-virtualenv") - (version "20.2.1") + (version "20.3.1") (source (origin (method url-fetch) (uri (pypi-uri "virtualenv" version)) (sha256 (base32 - "1rd6wmymsgv0cdsn50jwybcvbbslzym3mzffcjbl42l8br9cgap0")))) + "1nbhnpzswcf3lmzn5xabmfdd7ki8r2w2i37y6wml54di6qi1l48c")))) (build-system python-build-system) (native-inputs `(("python-mock" ,python-mock) ("python-pytest" ,python-pytest) - ;; NOTE: guix lint remarks that "python-setuptools should probably not - ;; be an input at all". However, removing the input makes the build error: - ;; File "setup.py", line 4, in <module> - ;; raise RuntimeError("setuptools >= 41 required to build") - ("python-setuptools" ,python-setuptools) ("python-setuptools-scm" ,python-setuptools-scm))) (propagated-inputs `(("python-appdirs" ,python-appdirs) - ("python-distlib" ,python-distlib/next) + ("python-distlib" ,python-distlib) ("python-filelock" ,python-filelock) - ("python-six" ,python-six) - ("python-importlib-metadata" ,python-importlib-metadata))) + ("python-six" ,python-six))) (home-page "https://virtualenv.pypa.io/") (synopsis "Virtual Python environment builder") (description "Virtualenv is a tool to create isolated Python environments.") (license license:expat))) +(define-public python2-virtualenv + (let ((base (package-with-python2 (strip-python2-variant python-virtualenv)))) + (package + (inherit base) + (propagated-inputs + `(("python-contextlib2" ,python2-contextlib2) + ,@(package-propagated-inputs base)))))) + (define-public python-markupsafe (package (name "python-markupsafe") - (version "1.1.1") + (version "2.0.1") (source (origin (method url-fetch) (uri (pypi-uri "MarkupSafe" version)) (sha256 (base32 - "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9")))) + "02k2ynmqvvd0z0gakkf8s4idyb606r7zgga41jrkhqmigy06fk2r")))) (build-system python-build-system) (arguments - `(#:modules ((ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26) - (guix build utils) - (guix build python-build-system)) - #:phases (modify-phases %standard-phases + `(#:phases (modify-phases %standard-phases (replace 'check - (lambda _ - (let ((cwd (getcwd)) - (libdir (find (cut string-prefix? "lib." <>) - (scandir "build")))) - (setenv "PYTHONPATH" - (string-append cwd "/build/" libdir ":" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-vv"))))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "pytest" "-vv"))))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://github.com/mitsuhiko/markupsafe") @@ -4016,35 +3966,42 @@ e.g. filters, callbacks and errbacks can all be promises.") (description "Markupsafe provides an XML/HTML/XHTML markup safe string implementation for Python.") - (license license:bsd-3))) + (license license:bsd-3) + (properties `((python2-variant . ,(delay python2-markupsafe)))))) +;; Version 1.1.1 is the last to support Python 2. (define-public python2-markupsafe - (package-with-python2 python-markupsafe)) + (package + (inherit (package-with-python2 + (strip-python2-variant python-markupsafe))) + (version "1.1.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "MarkupSafe" version)) + (sha256 + (base32 + "0sqipg4fk7xbixqd8kq6rlkxj664d157bdwbh93farcphf92x1r9")))))) (define-public python-jinja2 (package (name "python-jinja2") - (version "2.11.2") + (version "3.0.1") (source (origin (method url-fetch) (uri (pypi-uri "Jinja2" version)) (sha256 (base32 - "1c1v3djnr0ymp5xpy1h3h60abcaqxdlm4wsqmls9rxby88av5al9")))) + "197ms1wimxql650245v63wkv04n8bicj549wfhp51bx68x5lhgvh")))) (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases (replace 'check (lambda* (#:key tests? #:allow-other-keys) (if tests? - (begin - (setenv "PYTHONPATH" - (string-append "./build/lib:" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-vv")) - (format #t "test suite not run~%")) - #t))))) + (invoke "pytest" "-vv") + (format #t "test suite not run~%"))))))) (native-inputs `(("python-pytest" ,python-pytest))) (propagated-inputs @@ -4054,10 +4011,22 @@ for Python.") (description "Jinja2 is a small but fast and easy to use stand-alone template engine written in pure Python.") - (license license:bsd-3))) + (license license:bsd-3) + (properties `((python2-variant . ,(delay python2-jinja2)))))) +;; Version 2.11.3 is the last to support Python 2. (define-public python2-jinja2 - (package-with-python2 python-jinja2)) + (package + (inherit (package-with-python2 + (strip-python2-variant python-jinja2))) + (version "2.11.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "Jinja2" version)) + (sha256 + (base32 + "1iiklf3wns67y5lfcacxma5vxfpb7h2a67xbghs01s0avqrq9md6")))))) (define-public python-jinja2-time (package @@ -4119,19 +4088,24 @@ logic-free templating system Mustache.") (define-public python-joblib (package (name "python-joblib") - (version "0.14.1") + (version "1.1.0") (source (origin (method url-fetch) (uri (pypi-uri "joblib" version)) (sha256 (base32 - "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06")))) + "0d8ypyhsw1bjr96zan9ms8wbvnzbjqxniq4vcszghcrps7ngqn21")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'check - (lambda _ (invoke "pytest" "-v" "joblib")))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (setenv "JOBLIB_MULTIPROCESSING" "0") + (invoke "pytest" "-v" "joblib" + ;; We disable this test to avoid having to depend on ipython/jupyter + "-k" "not test_parallel_call_cached_function_defined_in_jupyter"))))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://joblib.readthedocs.io/") @@ -4143,8 +4117,17 @@ and lazy re-evaluation (memoize pattern), easy simple parallel computing logging and tracing of the execution.") (license license:bsd-3))) +;; Newer versions of joblib don't support Python 2. (define-public python2-joblib - (package-with-python2 python-joblib)) + (package + (inherit (package-with-python2 python-joblib)) + (version "0.14.1") + (source (origin + (method url-fetch) + (uri (pypi-uri "joblib" version)) + (sha256 + (base32 + "1j464w137w6s367gl697j1l63g52akydrxgv4czlck36ynjfwc06")))))) (define-public python-daemon (package @@ -4226,14 +4209,14 @@ structure for Python.") (define-public python-docutils (package (name "python-docutils") - (version "0.16") + (version "0.17.1") (source (origin (method url-fetch) (uri (pypi-uri "docutils" version)) (sha256 (base32 - "1z3qliszqca9m719q3qhdkh0ghh90g500avzdgi7pl77x5h3mpn2")))) + "09gii36lp1bs26cpxqyfd20xahnpbrbjzcnba2xq08y3wk97frb8")))) (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases @@ -4259,6 +4242,20 @@ via commands such as @command{rst2man}, as well as supporting Python code.") (define-public python2-docutils (package-with-python2 python-docutils)) +;; awscli refuses to be built with docutils < 0.16. +(define-public python-docutils-0.15 + (package + (inherit python-docutils) + (version "0.15") + (source (origin + (method url-fetch) + (uri (pypi-uri "docutils" version)) + (sha256 + (base32 + "0ja8q6mdj6xv62jjw3phv8j5nfqi5x8hnfy4pqfcjcgz4b34k8sl")))) + ;; tests contain Python 2 syntax. + (arguments '(#:tests? #false)))) + ;; python2-sphinx fails its test suite with newer versions. (define-public python2-docutils-0.14 (package @@ -4345,15 +4342,14 @@ text styles of documentation.") (define-public python-pygments (package (name "python-pygments") - (version "2.7.3") + (version "2.8.1") (source (origin (method url-fetch) (uri (pypi-uri "Pygments" version)) (sha256 (base32 - "05mps9r966r3dpqw6zrs1nlwjdf5y4960hl9m7abwb3qyfnarwyc")))) - (replacement python-pygments/fixed) + "153zyxigm879sk2n71lfv03y2pgxb7dl0dlsbwkz9aydxnkf2mi6")))) (build-system python-build-system) (arguments ;; FIXME: Tests require sphinx, which depends on this. @@ -4365,18 +4361,6 @@ text styles of documentation.") (license license:bsd-2) (properties `((python2-variant . ,(delay python2-pygments)))))) -(define python-pygments/fixed - (package - (inherit python-pygments) - (version "2.7.4") - (source - (origin - (method url-fetch) - (uri (pypi-uri "Pygments" version)) - (sha256 - (base32 - "0dy35ry5qa8dpklk4fkj9kfpw2qb4mh5ha9866kw30wf96dx0jfz")))))) - ;; Pygments 2.6 and later does not support Python 2. (define-public python2-pygments (let ((base (package-with-python2 (strip-python2-variant python-pygments)))) @@ -4576,18 +4560,17 @@ ecosystem, but can naturally be used also by other projects.") (copy-recursively "doc/libraries" (string-append doc "/libraries"))))) (replace 'check - (lambda* (#:key inputs tests? #:allow-other-keys) - (when tests? - ;; Some tests require timezone data. Otherwise, they - ;; look up /etc/localtime, which doesn't exist, and - ;; fail with: - ;; - ;; OverflowError: mktime argument out of range - (setenv "TZDIR" - (string-append (assoc-ref inputs "tzdata") - "/share/zoneinfo")) - (setenv "TZ" "Europe/Paris") - (invoke "python" "utest/run.py"))))))) + (lambda* (#:key inputs #:allow-other-keys) + ;; Some tests require timezone data. Otherwise, they + ;; look up /etc/localtime, which doesn't exist, and fail + ;; with: + ;; + ;; OverflowError: mktime argument out of range + (setenv "TZDIR" + (search-input-directory inputs "share/zoneinfo")) + (setenv "TZ" "Europe/Paris") + + (invoke "python" "utest/run.py")))))) (native-inputs `(("python-docutils" ,python-docutils) ("python-jsonschema" ,python-jsonschema) @@ -5147,7 +5130,14 @@ matching of file paths.") (substitute* "tests/test_black.py" (("( *)def test_python38" match indent) (string-append indent "@unittest.skip(\"guix\")\n" match))) - #t))))) + #t)) + ;; Remove blackd, because it depends on python-aiohttp and + ;; python-aiohttp-cors. + (add-after 'unpack 'remove-entrypoint + (lambda _ + (substitute* "setup.py" + (("\\s*\"blackd=blackd:patched_main \\[d\\]\",\n") "") + (("\"blackd\", ") ""))))))) (propagated-inputs `(("python-click" ,python-click) ("python-attrs" ,python-attrs) @@ -5280,13 +5270,13 @@ provides additional functionality on the produced Mallard documents.") (define-public python-cython (package (name "python-cython") - (version "0.29.22") + (version "0.29.24") (source (origin (method url-fetch) (uri (pypi-uri "Cython" version)) (sha256 - (base32 "01jl3544qwsi8lp6anbl55566xqkjd53x452i7m6gnfilv3q6syz")))) + (base32 "0hw4gs18rh4slij1fg252argxhraypld9apbqbl60230qc3lvw6d")))) (build-system python-build-system) ;; we need the full python package and not just the python-wrapper ;; because we need libpython3.3m.so @@ -5297,21 +5287,24 @@ provides additional functionality on the produced Mallard documents.") (modify-phases %standard-phases (add-before 'check 'set-HOME ;; some tests require access to "$HOME/.cython" - (lambda _ (setenv "HOME" "/tmp") #t)) + (lambda _ (setenv "HOME" "/tmp"))) (replace 'check - (lambda _ + (lambda* (#:key tests? #:allow-other-keys) ;; Disable compiler optimizations to greatly reduce the running ;; time of the test suite. (setenv "CFLAGS" "-O0") - (invoke "python" "runtests.py" "-vv" - "-j" (number->string (parallel-job-count)) - ;; XXX: On 32-bit architectures, running the parallel tests - ;; fails on many-core systems, see - ;; <https://github.com/cython/cython/issues/2807>. - ,@(if (not (target-64bit?)) - '("-x" "run.parallel") - '()))))))) + (when tests? + (invoke "python" "runtests.py" "-vv" + "-j" (number->string (parallel-job-count)) + ;; XXX: On 32-bit architectures, running the parallel tests + ;; fails on many-core systems, see + ;; <https://github.com/cython/cython/issues/2807>. + ,@(if (not (target-64bit?)) + '("-x" "run.parallel") + '()) + ;; This test fails when running on 24 cores. + "-x" "cpp_stl_conversion"))))))) (home-page "https://cython.org/") (synopsis "C extensions for Python") (description "Cython is an optimising static compiler for both the Python @@ -5356,10 +5349,10 @@ writing C extensions for Python as easy as Python itself.") ;; NOTE: when upgrading numpy please make sure that python-pandas and ;; python-scipy still build, as these three packages are often used together. -(define-public python-numpy +(define-public python-numpy-next (package (name "python-numpy") - (version "1.17.3") + (version "1.21.3") (source (origin (method url-fetch) @@ -5368,38 +5361,32 @@ writing C extensions for Python as easy as Python itself.") version "/numpy-" version ".tar.gz")) (sha256 (base32 - "1ak9dmjja0q90a7fsxli51ypcwssh8c4pb6f8wkrsnf2xgdk6dy9")))) + "0s6hy8828yr7fcjiwnym4l8lrknr21gqfkaiawsf86n0hd0a5fyh")))) (build-system python-build-system) (inputs `(("openblas" ,openblas))) (native-inputs `(("python-cython" ,python-cython) + ("python-hypothesis" ,python-hypothesis) ("python-pytest" ,python-pytest) + ("python-pytest-xdist" ,python-pytest-xdist) ("gfortran" ,gfortran))) (arguments `(#:phases (modify-phases %standard-phases - (add-before 'build 'configure-blas-lapack + (add-before 'build 'configure-blas (lambda* (#:key inputs #:allow-other-keys) (call-with-output-file "site.cfg" (lambda (port) (format port - "[openblas] + "\ +[openblas] libraries = openblas library_dirs = ~a/lib include_dirs = ~a/include - -# backslash-n to make emacs happy -\n[lapack] -lapack_libs = lapack -library_dirs = ~a/lib -include_dirs = ~a/include " (assoc-ref inputs "openblas") - (assoc-ref inputs "openblas") - (assoc-ref inputs "lapack") - (assoc-ref inputs "lapack")))) - #t)) + (assoc-ref inputs "openblas")))))) (add-before 'build 'fix-executable-paths (lambda* (#:key inputs #:allow-other-keys) ;; Make /gnu/store/...-bash-.../bin/sh the default shell, @@ -5410,21 +5397,17 @@ include_dirs = ~a/include ;; Use "gcc" executable, not "cc". (substitute* "numpy/distutils/system_info.py" (("c = distutils\\.ccompiler\\.new_compiler\\(\\)") - "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')")) - #t)) - ;; Tests can only be run after the library has been installed and not - ;; within the source directory. - (delete 'check) - (add-after 'install 'check - (lambda* (#:key outputs inputs #:allow-other-keys) - ;; Make installed package available for running the tests - (add-installed-pythonpath inputs outputs) - ;; Make sure "f2py" etc is found. - (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin" - ":" (getenv "PATH"))) - (with-directory-excursion "/tmp" - (invoke "python" "-c" - "import numpy; numpy.test(verbose=2)"))))))) + "c = distutils.ccompiler.new_compiler(); c.set_executables(compiler='gcc',compiler_so='gcc',linker_exe='gcc',linker_so='gcc -shared')")))) + (replace 'check + (lambda* (#:key tests? outputs inputs #:allow-other-keys) + (when tests? + ;; Make installed package available for running the tests. + (add-installed-pythonpath inputs outputs) + ;; Make sure "f2py" etc is found. + (setenv "PATH" (string-append (assoc-ref outputs "out") "/bin" + ":" (getenv "PATH"))) + (invoke "./runtests.py" + "-j" (number->string (parallel-job-count))))))))) (home-page "https://numpy.org") (synopsis "Fundamental package for scientific computing with Python") (description "NumPy is the fundamental package for scientific computing @@ -5438,7 +5421,7 @@ capabilities.") ;; Numpy 1.16.x are the last versions that support Python 2. (define-public python2-numpy (let ((numpy (package-with-python2 - (strip-python2-variant python-numpy)))) + (strip-python2-variant python-numpy-next)))) (package (inherit numpy) (version "1.16.5") @@ -5449,7 +5432,42 @@ capabilities.") version "/numpy-" version ".tar.gz")) (sha256 (base32 - "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb"))))))) + "0lg1cycxzi4rvvrd5zxinpdz0ni792fpx6xjd75z1923zcac8qrb")))) + (arguments + (substitute-keyword-arguments (package-arguments numpy) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'delete-failing-test + (lambda _ + ;; There's just one failing test here. + (delete-file "numpy/linalg/tests/test_linalg.py") + ;; ...and this one depends on the previous one. + (delete-file "numpy/matrixlib/tests/test_matrix_linalg.py"))))))) + (native-inputs + `(("python-cython" ,python2-cython) + ("python-pytest" ,python2-pytest) + ("gfortran" ,gfortran)))))) + +;; Needed by python-numba, see https://github.com/numba/numba/issues/7176 +(define-public python-numpy-1.20 + (package + (inherit python-numpy-next) + (version "1.20.3") + (source (origin + (method url-fetch) + (uri (string-append + "https://github.com/numpy/numpy/releases/download/v" + version "/numpy-" version ".tar.gz")) + (sha256 + (base32 + "140zq9snx0di4id4g97vaw9zz8x2rfla5lp3a70j666f5030yd5p")))) + ;; 92 tests fail, many of them because parts of the temp file name + ;; accidentally ends up in a comparison. + (arguments + (substitute-keyword-arguments (package-arguments python-numpy-next) + ((#:tests? _ #t) #f))))) + +(define-public python-numpy python-numpy-1.20) ;; NOTE: NumPy 1.8 is packaged only for Python 2 because it is of ;; interest only for legacy code going back to NumPy's predecessor @@ -5471,21 +5489,18 @@ capabilities.") (substitute-keyword-arguments (package-arguments python2-numpy) ((#:phases phases) `(modify-phases ,phases - (replace 'configure-blas-lapack + (replace 'configure-blas (lambda* (#:key inputs #:allow-other-keys) (call-with-output-file "site.cfg" (lambda (port) (format port "[openblas] -libraries = openblas,lapack -library_dirs = ~a/lib:~a/lib -include_dirs = ~a/include:~a/include +libraries = openblas +library_dirs = ~a/lib +include_dirs = ~a/include " (assoc-ref inputs "openblas") - (assoc-ref inputs "lapack") - (assoc-ref inputs "openblas") - (assoc-ref inputs "lapack")))) - #t)))))) + (assoc-ref inputs "openblas")))))))))) (native-inputs `(("python2-nose" ,python2-nose))) (description "NumPy is the fundamental package for scientific computing @@ -5539,20 +5554,17 @@ objects.") "This is a Python library for color math and conversions.") (license license:bsd-3))) -(define-public python2-colormath - (package-with-python2 python-colormath)) - (define-public python-sparse (package (name "python-sparse") - (version "0.12.0") + (version "0.13.0") (source (origin (method url-fetch) (uri (pypi-uri "sparse" version)) (sha256 (base32 - "05lmzckv69cvxavhdr36k803bgr5dl04cppglid1l880xswc759c")))) + "05ar1lhq1yy4nb78s7vpb1wz4ac4kj0r4lrd7yrf23kpmaacjpb8")))) (build-system python-build-system) (arguments `(#:phases @@ -5624,9 +5636,6 @@ color scales, and color space conversion easy. It has support for: @end enumerate\n") (license license:expat))) -(define-public python2-spectra - (package-with-python2 python-spectra)) - (define-public python-pyspnego (package (name "python-pyspnego") @@ -5675,16 +5684,16 @@ readable format.") ("pkg-config" ,pkg-config) ("python-sphinx" ,python-sphinx) ("python-numpydoc" ,python-numpydoc) - ("texlive" ,(texlive-union (list texlive-fonts-cm-super + ("texlive" ,(texlive-updmap.cfg (list texlive-cm-super texlive-fonts-ec - texlive-generic-ifxetex + texlive-generic-iftex texlive-pdftex - texlive-amsfonts/patched + texlive-amsfonts texlive-latex-capt-of texlive-latex-cmap texlive-latex-environ texlive-latex-eqparbox - texlive-latex-etoolbox + texlive-etoolbox texlive-latex-expdlist texlive-latex-fancyhdr texlive-latex-fancyvrb @@ -5693,11 +5702,11 @@ readable format.") texlive-latex-framed texlive-latex-geometry texlive-latex-graphics - texlive-latex-hyperref + texlive-hyperref texlive-latex-mdwtools texlive-latex-multirow texlive-latex-needspace - texlive-latex-oberdiek + texlive-oberdiek texlive-latex-parskip texlive-latex-preview texlive-latex-tabulary @@ -5706,7 +5715,7 @@ readable format.") texlive-latex-trimspaces texlive-latex-ucs texlive-latex-upquote - texlive-latex-url + texlive-url texlive-latex-varwidth texlive-latex-wrapfig))) ("texinfo" ,texinfo) @@ -5741,7 +5750,7 @@ readable format.") (sphinx-theme-checkout (assoc-ref inputs scipy-sphinx-theme)) (pyver ,(string-append "PYVER="))) - ;; FIXME: this is needed to for texlive-union to generate + ;; FIXME: this is needed to for texlive-updmap.cfg to generate ;; fonts, which are not found. (setenv "HOME" "/tmp") @@ -5778,13 +5787,13 @@ readable format.") (define-public python-pygit2 (package (name "python-pygit2") - (version "1.6.0") + (version "1.7.1") (source (origin (method url-fetch) (uri (pypi-uri "pygit2" version)) (sha256 - (base32 "0qjd5aqpmla64da4pb47vdnrmnqdbn7248a4fzs7f5q1ax7fmb3s")))) + (base32 "0p8n25bijirxh31cv99vd1mkdsvpcs6z6441wz1fqva3b2as5ynp")))) (build-system python-build-system) (arguments '(#:tests? #f)) ; tests don't run correctly in our environment @@ -5842,6 +5851,7 @@ humans, and implementation simplicity.") (("'wmctrl") (string-append "'" wmctrl "/bin/wmctrl"))))))))) (inputs `(("wmctrl" ,wmctrl))) + (propagated-inputs (list python-attrs)) (home-page "https://github.com/antocuni/wmctrl") (synopsis "Tool to programmatically control Xorg windows") (description "This package provides a library for programmatically @@ -6018,61 +6028,6 @@ parse and apply unified diffs. It has features such as: @end itemize") (license license:expat))) -(define-public python-pyparsing - (package - (name "python-pyparsing") - (version "2.4.6") - (source - (origin - (method url-fetch) - (uri (pypi-uri "pyparsing" version)) - (sha256 - (base32 "17wn5zlijc9m9zj26gy3f541y7smpj8rfhl51d025c2gm210b0sc")))) - (build-system python-build-system) - (outputs '("out" "doc")) - (arguments - `(#:tests? #f ; no test target - #:phases - (modify-phases %standard-phases - (add-after 'install 'install-doc - (lambda* (#:key outputs #:allow-other-keys) - (let* ((doc (string-append (assoc-ref outputs "doc") - "/share/doc/" ,name "-" ,version)) - (html-doc (string-append doc "/html")) - (examples (string-append doc "/examples"))) - (mkdir-p html-doc) - (mkdir-p examples) - (for-each - (lambda (dir tgt) - (map (lambda (file) - (install-file file tgt)) - (find-files dir ".*"))) - (list "docs" "htmldoc" "examples") - (list doc html-doc examples)) - #t)))))) - (home-page "https://github.com/pyparsing/pyparsing") - (synopsis "Python parsing class library") - (description - "The pyparsing module is an alternative approach to creating and -executing simple grammars, vs. the traditional lex/yacc approach, or the use -of regular expressions. The pyparsing module provides a library of classes -that client code uses to construct the grammar directly in Python code.") - (license license:expat))) - -(define-public python2-pyparsing - (package-with-python2 python-pyparsing)) - -(define-public python-pyparsing-2.4.7 - (package - (inherit python-pyparsing) - (version "2.4.7") - (source - (origin - (method url-fetch) - (uri (pypi-uri "pyparsing" version)) - (sha256 - (base32 "1hgc8qrbq1ymxbwfbjghv01fm3fbpjwpjwi0bcailxxzhf3yq0y2")))))) - (define-public python-numpydoc (package (name "python-numpydoc") @@ -6260,21 +6215,20 @@ comparison. (define-public python-matplotlib (package (name "python-matplotlib") - (version "3.1.2") + (version "3.4.3") (source (origin (method url-fetch) (uri (pypi-uri "matplotlib" version)) (sha256 - (base32 "1nmshfqh7wyg15i16hx1yiylcvzkws29ivn66n3i0wyqwcpjr3lf")) - (patches - (search-patches "python-matplotlib-run-under-wayland-gtk3.patch")))) + (base32 "06032j0ccjxldx4z9kf97qps2g36mfgvy1nap3b9n75kzmnm4kzw")))) (build-system python-build-system) (propagated-inputs ; the following packages are all needed at run time `(("python-cycler" ,python-cycler) ("python-kiwisolver" ,python-kiwisolver) ("python-pyparsing" ,python-pyparsing) ("python-pygobject" ,python-pygobject) + ("python-certifi" ,python-certifi) ("gobject-introspection" ,gobject-introspection) ("python-tkinter" ,python "tk") ("python-dateutil" ,python-dateutil) @@ -6291,6 +6245,7 @@ comparison. (inputs `(("libpng" ,libpng) ("freetype" ,freetype) + ("qhull" ,qhull) ("cairo" ,cairo) ("glib" ,glib) ;; FIXME: Add backends when available. @@ -6301,6 +6256,7 @@ comparison. `(("pkg-config" ,pkg-config) ("python-pytest" ,python-pytest) ("python-mock" ,python-mock) + ("python-wheel" ,python-wheel) ("unzip" ,unzip) ("jquery-ui" ,(origin @@ -6323,7 +6279,8 @@ comparison. "test_.*\\.py$")) (("^from matplotlib" match) (string-append "import pytest\n" match)) - (("( *)@image_comparison" match indent) + (("( *)@([^_]+_)*(image_comparison|check_figures_equal)" match + indent) (string-append indent "@pytest.mark.skip(reason=\"unknown minor image differences\")\n" match))) @@ -6332,7 +6289,9 @@ comparison. (for-each delete-file ;; test_normal_axes, test_get_tightbbox_polar '("lib/matplotlib/tests/test_axes.py" - ;; We don't use the webagg backend and this test forces it. + "lib/matplotlib/tests/test_polar.py" + ;; We don't use the webagg backend and this test + ;; forces it. "lib/matplotlib/tests/test_backend_webagg.py" ;; test_outward_ticks "lib/matplotlib/tests/test_tightlayout.py" @@ -6347,9 +6306,11 @@ comparison. (lambda* (#:key outputs inputs #:allow-other-keys) (let* ((python-version (python-version (assoc-ref inputs "python"))) - (dir (string-append (assoc-ref outputs "out") - "/lib/python" python-version "/site-packages" - "/matplotlib/backends/web_backend/"))) + (dir + (string-append (assoc-ref outputs "out") + "/lib/python" python-version + "/site-packages" + "/matplotlib/backends/web_backend/"))) (mkdir-p dir) (invoke "unzip" (assoc-ref inputs "jquery-ui") @@ -6372,7 +6333,10 @@ comparison. (setenv "CFLAGS" "-ffloat-store")) (call-with-output-file "setup.cfg" (lambda (port) - (format port "[directories]~% + (format port "[libs]~% +system_freetype = true +system_qhull = true +[directories]~% basedirlist = ~a,~a~% [packages]~% tests = True~%" @@ -6414,8 +6378,15 @@ toolkits.") (mkdir-p dir) (invoke "unzip" (assoc-ref inputs "jquery-ui") - "-d" dir)) - #t)) + "-d" dir)))) + ;; Without this file mpl_toolkits cannot be imported. + (add-after 'install 'create-init-file + (lambda* (#:key outputs #:allow-other-keys) + (with-output-to-file + (string-append + (assoc-ref outputs "out") + "/lib/python2.7/site-packages/mpl_toolkits/__init__.py") + (lambda _ (display ""))))) (delete 'fix-and-disable-failing-tests) (delete 'check))))) ; These tests weren't run the the past. ;; Make sure to use special packages for Python 2 instead @@ -6451,7 +6422,7 @@ toolkits.") ("python-ipykernel" ,python-ipykernel) ("python-mock" ,python-mock) ("graphviz" ,graphviz) - ("texlive" ,(texlive-union (list texlive-amsfonts/patched + ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts texlive-latex-amsmath texlive-latex-enumitem texlive-latex-expdlist @@ -6463,8 +6434,8 @@ toolkits.") texlive-pdftex texlive-fonts-ec - texlive-fonts-adobe-times - texlive-fonts-txfonts))) + texlive-times + texlive-txfonts))) ("texinfo" ,texinfo) ,@(package-native-inputs python-matplotlib))) (arguments @@ -6477,9 +6448,7 @@ toolkits.") (replace 'build (lambda _ (chdir "doc") - (setenv "PYTHONPATH" - (string-append (getenv "PYTHONPATH") - ":" (getcwd) "/../examples/units")) + (setenv "PYTHONPATH" "../examples/units") (substitute* "conf.py" ;; Don't use git. (("^SHA = check_output.*") @@ -6514,13 +6483,36 @@ toolkits.") "./matplotlib-figures") (invoke "makeinfo" "--no-split" "-o" "matplotlib.info" "matplotlib.texi")) - (install-file "build/texinfo/matplotlib.info" info)) - #t))))) + (install-file "build/texinfo/matplotlib.info" info))))))) (home-page (package-home-page python-matplotlib)) (synopsis "Documentation for the python-matplotlib package") (description (package-description python-matplotlib)) (license (package-license python-matplotlib)))) +(define-public python-matplotlib-inline + (package + (name "python-matplotlib-inline") + (version "0.1.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "matplotlib-inline" version)) + (sha256 + (base32 "1vilzwj3xp00mxprmmn1hlafm3p23vn56s46kx3ra4qd5signjx0")))) + (build-system python-build-system) + (propagated-inputs + `(("python-matplotlib" ,python-matplotlib) + ("python-traitlets" ,python-traitlets))) + (arguments + ;; Tests disabled because of a circular dependency with ipython. + `(#:tests? #f)) + (home-page "https://github.com/ipython/matplotlib-inline") + (synopsis "Inline Matplotlib backend for Jupyter") + (description + "This package provides a Matplotlib inline back-end for IPython and +Jupyter.") + (license license:bsd-3))) + (define-public python-matplotlib-venn (package (name "python-matplotlib-venn") @@ -6749,24 +6741,12 @@ Python code against some of the style conventions in "07ikq2c72kd263hpldw55y0px2l3g34hjk66ml9lryh1jv287qmf")))) (build-system python-build-system) (arguments - '(#:modules ((ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26) - (guix build utils) - (guix build python-build-system)) - #:phases (modify-phases %standard-phases + '(#:phases (modify-phases %standard-phases (replace 'check (lambda* (#:key tests? #:allow-other-keys) (if tests? - (begin - (let ((libdir (find (cut string-prefix? "lib." <>) - (scandir "build")))) - (setenv "PYTHONPATH" - (string-append "./build/" libdir ":" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-vv"))) - (format #t "test suite not run~%")) - #t))))) + (invoke "pytest" "-vv") + (format #t "test suite not run~%"))))))) (native-inputs `(("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov))) @@ -6833,14 +6813,14 @@ by pycodestyle.") (define-public python-distlib (package (name "python-distlib") - (version "0.3.0") + (version "0.3.1") (source (origin (method url-fetch) (uri (pypi-uri "distlib" version ".zip")) (sha256 (base32 - "08fyi2r246733vharl2yckw20rilci28r91mzrnnvcr638inw5if")))) + "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd")))) (build-system python-build-system) (arguments `(#:phases @@ -6864,19 +6844,6 @@ relate to packaging and distribution of Python software. It is intended to be used as the basis for third-party packaging tools.") (license license:psfl))) -;; TODO: Merge with 'python-distlib' on the next rebuild cycle. -(define-public python-distlib/next - (package - (inherit python-distlib) - (version "0.3.1") - (source - (origin - (method url-fetch) - (uri (pypi-uri "distlib" version ".zip")) - (sha256 - (base32 - "1wdzv7fsjhrkhh1wfkarlhcwa8m00mgcpdsvknmf2qy8f9l13xpd")))))) - (define-public python-distutils-extra (package (name "python-distutils-extra") @@ -6971,7 +6938,7 @@ the OleFileIO module from PIL, the Python Image Library.") (native-inputs `(("pybind11" ,pybind11) ("python-setuptools" ,python-setuptools) - ("python-setuptools-scm" ,python-setuptools-scm/next) + ("python-setuptools-scm" ,python-setuptools-scm) ("python-setuptools-scm-git-archive" ,python-setuptools-scm-git-archive) ("python-toml" ,python-toml) ("python-wheel" ,python-wheel))) @@ -7053,7 +7020,11 @@ a general image processing tool.") (uri (pypi-uri "Pillow" version)) (sha256 (base32 - "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv"))))))) + "0l5rv8jkdrb5q846v60v03mcq64yrhklidjkgwv6s1pda71g17yv")))) + (arguments + (substitute-keyword-arguments (package-arguments python-pillow) + ;; FIXME: One of the tests is failing. + ((#:tests? _ #f) #f)))))) (define-public python-pillow-2.9 (package @@ -7564,22 +7535,16 @@ support for Python 3 and PyPy. It is based on cffi.") (("filenames = \\(library_filename,\\) \\+ filenames") "pass") (("libcairo.so.2") - (string-append (assoc-ref inputs "cairo") - "/lib/libcairo.so.2"))) + (search-input-file inputs "/lib/libcairo.so.2"))) (substitute* "cairocffi/pixbuf.py" (("libgdk_pixbuf-2.0.so.0") - (string-append (assoc-ref inputs "gdk-pixbuf") - "/lib/libgdk_pixbuf-2.0.so.0")) + (search-input-file inputs "/lib/libgdk_pixbuf-2.0.so.0")) (("libgobject-2.0.so.0") - (string-append (assoc-ref inputs "glib") - "/lib/libgobject-2.0.so.0")) + (search-input-file inputs "/lib/libgobject-2.0.so.0")) (("libglib-2.0.so.0") - (string-append (assoc-ref inputs "glib") - "/lib/libglib-2.0.so.0")) + (search-input-file inputs "/lib/libglib-2.0.so.0")) (("libgdk-3.so.0") - (string-append (assoc-ref inputs "gtk+") - "/lib/libgdk-3.so.0"))) - #t)) + (search-input-file inputs "/lib/libgdk-3.so.0"))))) (add-after 'unpack 'disable-linters ;; Their check fails; none of our business. (lambda _ @@ -7912,36 +7877,37 @@ child application and control it as if a human were typing commands.") (define-public python-setuptools-scm (package (name "python-setuptools-scm") - (version "3.4.3") + (version "6.3.2") (source (origin (method url-fetch) (uri (pypi-uri "setuptools_scm" version)) (sha256 - (base32 - "083k93wi7mrmp1cn28hcbnr6sivbgls0y7zz2m5qzn1wg04a3f16")))) + (base32 "1wm0i27siyy1yqr9rv7lqvb65agay9051yi8jzmi8dgb3q4ai6m4")))) (build-system python-build-system) + (propagated-inputs + `(("python-packaging",python-packaging-bootstrap) + ("python-tomli" ,python-tomli))) (home-page "https://github.com/pypa/setuptools_scm/") (synopsis "Manage Python package versions in SCM metadata") (description "Setuptools_scm handles managing your Python package versions in @dfn{software configuration management} (SCM) metadata instead of declaring 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")))))) + (license license:expat) + (properties `((python2-variant . ,(delay python2-setuptools-scm)))))) (define-public python2-setuptools-scm - (package-with-python2 python-setuptools-scm)) + (let ((base (package-with-python2 + (strip-python2-variant python-setuptools-scm)))) + (package/inherit base + (version "5.0.2") ;no python 2 support in version 6 + (source (origin + (method url-fetch) + (uri (pypi-uri "setuptools_scm" version)) + (sha256 + (base32 + "1j75i8avp9fhrkpbabsa8vyvbi49kmxlq6l10xir9qs96kfwx843")))) + (propagated-inputs '())))) (define-public python-sexpdata (package @@ -7965,14 +7931,14 @@ functions like pickle, json or PyYAML module.") (define-public python-pathlib2 (package (name "python-pathlib2") - (version "2.3.3") + (version "2.3.6") (source (origin (method url-fetch) (uri (pypi-uri "pathlib2" version)) (sha256 (base32 - "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695")))) + "0psyg60vk8wca473djrh0v9gb853z8wcawi8im5dyg00amawp2vx")))) (build-system python-build-system) (propagated-inputs `(("python-scandir" ,python-scandir) @@ -8406,7 +8372,6 @@ cluster down and deletes the throwaway profile.") ("python-six" ,python-six))) (native-inputs `(("python-pytest" ,python-pytest))) - (properties `((python2-variant . ,(delay python2-traitlets)))) (home-page "https://ipython.org") (synopsis "Configuration system for Python applications") (description @@ -8418,13 +8383,6 @@ is a distinct layer on top of traitlets, so you can use traitlets in your code without using the configuration machinery.") (license license:bsd-3))) -(define-public python2-traitlets - (let ((traitlets (package-with-python2 (strip-python2-variant python-traitlets)))) - (package/inherit traitlets - (propagated-inputs - `(("python2-enum34" ,python2-enum34) - ,@(package-propagated-inputs traitlets)))))) - (define-public python-jupyter-core (package (name "python-jupyter-core") @@ -8451,12 +8409,12 @@ without using the configuration machinery.") (add-after 'unpack 'patch-testsuite (lambda _ ;; test_not_on_path() and test_path_priority() try to run a test - ;; that loads jupyter_core, so we need PYTHONPATH + ;; that loads jupyter_core, so we need GUIX_PYTHONPATH (substitute* "jupyter_core/tests/test_command.py" (("env = \\{'PATH': ''\\}") - "env = {'PATH': '', 'PYTHONPATH': os.environ['PYTHONPATH']}") + "env = {'PATH': '', 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}") (("env = \\{'PATH': str\\(b\\)\\}") - "env = {'PATH': str(b), 'PYTHONPATH': os.environ['PYTHONPATH']}")) + "env = {'PATH': str(b), 'PYTHONPATH': os.environ['GUIX_PYTHONPATH']}")) #t)) ;; Migration is running whenever etc/jupyter exists, but the ;; Guix-managed directory will never contain any migratable IPython @@ -8527,7 +8485,6 @@ without using the configuration machinery.") ("python-traitlets" ,python-traitlets))) (native-inputs `(("python-pytest" ,python-pytest) - ("python-pytest-asyncio" ,python-pytest-asyncio) ("python-pytest-timeout" ,python-pytest-timeout) ("python-async-generator" ,python-async-generator) ("python-mock" ,python-mock) @@ -8572,10 +8529,10 @@ installing @code{kernelspec}s for use with Jupyter frontends.") `(#:phases (modify-phases %standard-phases (replace 'check - (lambda _ - (setenv "HOME" "/tmp") - (invoke "pytest" "-v") - #t)) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (setenv "HOME" "/tmp") + (invoke "pytest" "-v")))) (add-after 'install 'set-python-file-name (lambda* (#:key outputs #:allow-other-keys) ;; Record the absolute file name of the 'python' executable in @@ -8665,13 +8622,13 @@ callback signature using a prototype function.") (define-public python-ipython (package (name "python-ipython") - (version "7.20.0") + (version "7.27.0") (source (origin (method url-fetch) (uri (pypi-uri "ipython" version ".tar.gz")) (sha256 - (base32 "17pzzyfh6z7il1j49fb32glad04pqppqjsymj67gb30ah80ay8qr")))) + (base32 "04xgymypnbfgf2q0d5b0hanjbjsp53f055sh1p8xlq52vyzmxdaq")))) (build-system python-build-system) (propagated-inputs `(("python-backcall" ,python-backcall) @@ -8679,6 +8636,7 @@ callback signature using a prototype function.") ("python-prompt-toolkit" ,python-prompt-toolkit-2) ("python-terminado" ,python-terminado) ("python-matplotlib" ,python-matplotlib) + ("python-matplotlib-inline" ,python-matplotlib-inline) ("python-numpy" ,python-numpy) ("python-numpydoc" ,python-numpydoc) ("python-jedi" ,python-jedi) @@ -8734,7 +8692,10 @@ callback signature using a prototype function.") ;; (which depends on ipython). (delete-file "IPython/core/tests/test_display.py") ;; AttributeError: module 'IPython.core' has no attribute 'formatters' - (delete-file "IPython/core/tests/test_interactiveshell.py")))))) + (delete-file "IPython/core/tests/test_interactiveshell.py") + ;; AttributeError: module 'matplotlib_inline' has no + ;; attribute 'backend_inline' + (delete-file "IPython/core/tests/test_pylabtools.py")))))) (home-page "https://ipython.org") (synopsis "IPython is a tool for interactive computing in Python") (description @@ -8789,15 +8750,15 @@ computing.") `(("python-sphinx" ,python-sphinx) ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme) ;; FIXME: It's possible that a smaller union would work just as well. - ("texlive" ,(texlive-union (list texlive-amsfonts/patched + ("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts texlive-fonts-ec - texlive-generic-ifxetex + texlive-generic-iftex texlive-pdftex texlive-latex-capt-of texlive-latex-cmap texlive-latex-environ texlive-latex-eqparbox - texlive-latex-etoolbox + texlive-etoolbox texlive-latex-expdlist texlive-latex-fancyhdr texlive-latex-fancyvrb @@ -8806,11 +8767,11 @@ computing.") texlive-latex-framed texlive-latex-geometry texlive-latex-graphics - texlive-latex-hyperref + texlive-hyperref texlive-latex-mdwtools texlive-latex-multirow texlive-latex-needspace - texlive-latex-oberdiek + texlive-oberdiek texlive-latex-parskip texlive-latex-preview texlive-latex-tabulary @@ -8819,7 +8780,7 @@ computing.") texlive-latex-trimspaces texlive-latex-ucs texlive-latex-upquote - texlive-latex-url + texlive-url texlive-latex-varwidth texlive-latex-wrapfig))) ("texinfo" ,texinfo))))) @@ -8836,6 +8797,15 @@ computing.") (base32 "1bky2bra6673xx8jy0826znw6cmxs89wcwwzda8d025j3jffx2sq")))) (build-system python-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'remove-vterm-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 + (lambda _ + (delete-file "urwid/tests/test_vterm.py")))))) (home-page "http://urwid.org") (synopsis "Console user interface library for Python") (description @@ -9012,14 +8982,14 @@ parsing (browser/HTTP) user agent strings.") (define-public python-dbus (package (name "python-dbus") - (version "1.2.16") + (version "1.2.18") (source (origin (method url-fetch) (uri (string-append "https://dbus.freedesktop.org/releases/dbus-python/" "dbus-python-" version ".tar.gz")) (sha256 - (base32 "196m5rk3qzw5nkmgzjl7wmq0v7vpwfhh8bz2sapdi5f9hqfqy8qi")))) + (base32 "0q3jrw515z98mqdk9x822nd95rky455zz9876f1nqna5igkd3gcj")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) @@ -9030,6 +9000,7 @@ parsing (browser/HTTP) user agent strings.") (description "python-dbus provides bindings for libdbus, the reference implementation of D-Bus.") (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/") + (properties `((python2-variant . ,(delay python2-dbus)))) (license license:expat))) (define-public python2-dbus @@ -9037,8 +9008,9 @@ implementation of D-Bus.") (name "python2-dbus") (inputs `(("python" ,python-2) ,@(alist-delete "python" - (package-inputs python-dbus) - equal?))))) + (package-inputs python-dbus)))) + (arguments + `(#:configure-flags '("PYTHON_VERSION=2"))))) (define-public python-dbus-next (package @@ -9078,7 +9050,7 @@ mobile environments.") "0z8rrv9rsg1r2qgh2dxj3dfj5xnki98kgi3w839kqby4a26i1yik")))) (build-system python-build-system) (arguments `(#:tests? #f)) ; tests depend on system state - (native-inputs + (propagated-inputs `(("python-dbus" ,python-dbus))) (home-page "https://bitbucket.org/takluyver/pynotify2") (synopsis "Python interface to D-Bus notifications") @@ -9149,10 +9121,15 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.") (base32 "1k70gpn2d3vgdyxbdy536dgm4kchcraxz6lmgsfg3324iy2789q5")))) (build-system python-build-system) - (arguments `(#:tests? #f)) - ;;XXX: 2 tests fail currently despite claming they were to be - ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we - ;;don't want to create a circular dependency. + (arguments + ;;XXX: 2 tests fail currently despite claming they were to be + ;;skipped. Also, beautifulsoup4 may depend on this in the future, so we + ;;don't want to create a circular dependency. + (list #:tests? #f + #:phases + #~(modify-phases %standard-phases + ;; Circular dependency with python-beautifulsoup4. + (delete 'sanity-check)))) (home-page "https://github.com/facelessuser/soupsieve") (synopsis "CSS selector library") (description @@ -9452,13 +9429,13 @@ SVG, EPS, PNG and terminal output.") (define-public python-seaborn (package (name "python-seaborn") - (version "0.11.1") + (version "0.11.2") (source (origin (method url-fetch) (uri (pypi-uri "seaborn" version)) (sha256 - (base32 "1b81p9s6li3b606ivgbynrh102fclwlw74m8qxzsii9pv6p8xrs4")) + (base32 "1xpl3zb945sihsiwm9q1yyx84sakk1phcg0fprj6i0j0dllfjifg")) (patches (search-patches "python-seaborn-kde-test.patch")))) (build-system python-build-system) (arguments @@ -9507,31 +9484,41 @@ and statistical routines from scipy and statsmodels.") (define-public python-mpmath (package - (name "python-mpmath") - (version "1.1.0") - (source (origin - (method url-fetch) - (uri (pypi-uri "mpmath" version)) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1xlrcja213jpfhw25q1jl5pl10w1a2cc68x1c4mkicxsbzhan5zw")))) - (build-system python-build-system) - (native-inputs - `(("python-pytest" ,python-pytest))) - (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - (invoke "python" "mpmath/tests/runtests.py" "-local")))))) - (home-page "https://mpmath.org") - (synopsis "Arbitrary-precision floating-point arithmetic in python") - (description - "@code{mpmath} can be used as an arbitrary-precision substitute for + (name "python-mpmath") + (version "1.2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/fredrik-johansson/mpmath") + (commit "c6a35f9ee7c294bcf4e0517bc76b268843db9499"))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0ifw59fjjls3mas104rh0frilvab2fhk1dkjraxlqni5n9l676im")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-before 'build 'set-version + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" ,version) + ;; ZIP does not support timestamps before 1980. + (setenv "SOURCE_DATE_EPOCH" "315532800"))) + (replace 'check + (lambda* (#:key tests? inputs outputs #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv"))))))) + (native-inputs + `(("python-pytest" ,python-pytest) + ("python-setuptools-scm" ,python-setuptools-scm))) + (home-page "https://mpmath.org") + (synopsis "Arbitrary-precision floating-point arithmetic in python") + (description + "@code{mpmath} can be used as an arbitrary-precision substitute for Python's float/complex types and math/cmath modules, but also does much more advanced mathematics.") - (license license:bsd-3))) + (license license:bsd-3))) (define-public python2-mpmath (package-with-python2 python-mpmath)) @@ -9731,7 +9718,14 @@ Python 2 and Python 3.") (license license:psfl))) (define-public python2-backports-csv - (package-with-python2 python-backports-csv)) + (package + (inherit (package-with-python2 python-backports-csv)) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; The sanity-check attempts attempts to import the non-existent + ;; module "backports". + (delete 'sanity-check)))))) (define-public python2-backports-shutil-get-terminal-size (package @@ -9751,8 +9745,6 @@ Python 2 and Python 3.") (modify-phases %standard-phases (replace 'check (lambda _ - (setenv "PYTHONPATH" (string-append "./build/lib:" - (getenv "PYTHONPATH"))) (invoke "py.test" "-v")))))) (native-inputs `(("python2-pytest" ,python2-pytest))) @@ -9979,11 +9971,10 @@ plugin for flake8 to check PEP-8 naming conventions.") (method url-fetch) (uri (pypi-uri "pyflakes" version)) (sha256 - (base32 - "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m")))) + (base32 + "1ny10364ciqh4ripasj4zzv4145l21l3s85m3qlrvfq5pk58xg7m")))) (build-system python-build-system) - (home-page - "https://github.com/pyflakes/pyflakes") + (home-page "https://github.com/PyCQA/pyflakes") (synopsis "Passive checker of Python programs") (description "Pyflakes statically checks Python source code for common errors.") @@ -10001,28 +9992,30 @@ plugin for flake8 to check PEP-8 naming conventions.") (uri (pypi-uri "pyflakes" version)) (sha256 (base32 - "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim")))))) + "1j3zqbiwkyicvww499bblq33x0bjpzdrxajhaysr7sk7x5gdgcim")) + (patches + (search-patches "python-pyflakes-test-location.patch")))))) (define-public python-mccabe (package (name "python-mccabe") (version "0.6.1") (source - (origin - (method url-fetch) - (uri (pypi-uri "mccabe" version)) - (sha256 - (base32 - "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx")))) + (origin + (method url-fetch) + (uri (pypi-uri "mccabe" version)) + (sha256 + (base32 + "07w3p1qm44hgxf3vvwz84kswpsx6s7kvaibzrsx5dzm0hli1i3fx")))) (build-system python-build-system) (native-inputs - `(("python-pytest" ,python-pytest-bootstrap) - ("python-pytest-runner" ,python-pytest-runner))) - (home-page "https://github.com/flintwork/mccabe") + `(("python-toml", python-toml) + ("python-pytest" ,python-pytest-bootstrap) + ("python-pytest-runner" ,python-pytest-runner))) + (home-page "https://github.com/PyCQA/mccabe") (synopsis "McCabe checker, plugin for flake8") - (description - "This package provides a Flake8 plug-in to compute the McCabe cyclomatic -complexity of Python source code.") + (description "This package provides a Flake8 plug-in to compute the McCabe +cyclomatic complexity of Python source code.") (license license:expat))) (define-public python2-mccabe @@ -10199,14 +10192,11 @@ unnecessary plus operators for explicit string literal concatenation.") (substitute* "setup.cfg" (("\\[pytest\\]") "[tool:pytest]")) - - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) (invoke "py.test" "-v")))))) + (propagated-inputs + `(("python-flake8" ,python-flake8))) (native-inputs - `(("python-flake8" ,python-flake8) - ("python-mock" ,python-mock) + `(("python-mock" ,python-mock) ("python-pep8" ,python-pep8) ("python-pycodestyle" ,python-pycodestyle) ("python-pytest" ,python-pytest))) @@ -10245,14 +10235,14 @@ files.") (define-public python-flake8-pyi (package (name "python-flake8-pyi") - (version "20.5.0") + (version "20.10.0") (source (origin (method url-fetch) (uri (pypi-uri "flake8-pyi" version)) (sha256 (base32 - "1zpq4s9kp8w95pccmhhyyx1ff2zhnidcf1zb3xs46lzcx9plvnzk")))) + "0b27n2pmrxcc7nva4wp2i7mrag0fnq0firvhg1ljq593a45b5qyf")))) (build-system python-build-system) (propagated-inputs `(("python-attrs" ,python-attrs) @@ -10378,6 +10368,20 @@ Python.") (define-public python2-mistune (package-with-python2 python-mistune)) +;; 2.0 is not released yet, but some packages have started using it. +(define-public python-mistune-next + (package + (inherit python-mistune) + (name "python-mistune-next") + (version "2.0.0rc1") + (source (origin + (method url-fetch) + (uri (pypi-uri "mistune" version)) + (sha256 + (base32 + "1nd7iav1ixh9hlj4hxn6lmpava88d86ys8rqm30wgvr7gjlxnas5")))) + (native-inputs (list python-nose)))) + (define-public python-markdown (package (name "python-markdown") @@ -10720,14 +10724,7 @@ third-party code.") (modify-phases %standard-phases (replace 'check (lambda _ - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-v" "test"))))))) + (invoke "pytest" "-v" "test")))))) (native-inputs `(("python-pytest" ,python-pytest))) (synopsis "MessagePack (de)serializer") @@ -11029,9 +11026,9 @@ Unicode-aware. It is not intended as an end-user tool.") (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? - (setenv "PYTHONPATH" + (setenv "GUIX_PYTHONPATH" (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) + (getenv "GUIX_PYTHONPATH"))) (invoke "nosetests" "-v"))))))) (native-inputs `(("nose" ,python-nose))) @@ -11586,6 +11583,7 @@ is binding LibSass.") (build-system python-build-system) (arguments `(#:tests? #f)) ;circular dependency with python-aiohttp + (propagated-inputs `(("python-idna" ,python-idna))) (home-page "https://github.com/aio-libs/idna-ssl") (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support") (description "Patch @code{ssl.match_hostname} for Unicode(idna) @@ -11902,7 +11900,7 @@ JSON Reference and JSON Pointer.") ("python-json-spec" ,python-json-spec) ("python-jsonschema" ,python-jsonschema) ("python-pylint" ,python-pylint) - ("python-pytest" ,python-pytest-6) + ("python-pytest" ,python-pytest) ("python-pytest-benchmark" ,python-pytest-benchmark) ("python-pytest-cache" ,python-pytest-cache) @@ -12168,31 +12166,33 @@ time.") ("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov) ("python-pytest-dependency" ,python-pytest-dependency) - ("texlive" ,(texlive-union (list texlive-adjustbox - texlive-amsfonts/patched + ("texlive" ,(texlive-updmap.cfg (list texlive-adjustbox + texlive-amsfonts texlive-booktabs texlive-caption texlive-eurosym texlive-fonts-rsfs texlive-generic-ulem - texlive-iftex + texlive-generic-iftex texlive-jknappen texlive-latex-amsmath texlive-latex-enumitem texlive-latex-fancyvrb texlive-latex-float - texlive-latex-fontspec + texlive-fontspec texlive-latex-geometry - texlive-latex-hyperref + texlive-grffile + texlive-hyperref texlive-latex-jknapltx texlive-latex-ms - texlive-latex-oberdiek + texlive-oberdiek texlive-latex-parskip texlive-latex-trimspaces texlive-latex-upquote texlive-latex-ucs texlive-lm texlive-mathpazo + texlive-stringenc texlive-tcolorbox texlive-titling texlive-tools @@ -12245,6 +12245,18 @@ convert an @code{.ipynb} notebook file into various static formats including: (arguments `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'use-our-home-for-tests + (lambda _ + ;; The 'get_patch_env' function in this file reads: + ;; 'HOME': cls.home_dir + ;; but for some reason, that definition of HOME is not what the + ;; GLib/GIO trash mechanism honors, which would cause test + ;; failures. Instead, set 'HOME' here to an existing directory + ;; and let the tests honor it. + (substitute* "notebook/tests/launchnotebook.py" + (("'HOME': .*," all) + (string-append "# " all "\n"))) + (setenv "HOME" (getcwd)))) (replace 'check (lambda* (#:key tests? inputs outputs #:allow-other-keys) ;; These tests require a browser @@ -12254,13 +12266,10 @@ convert an @code{.ipynb} notebook file into various static formats including: ;; Some tests do not expect all files to be installed in the ;; same directory, but JUPYTER_PATH contains multiple entries. (unsetenv "JUPYTER_PATH") - ;; Some tests need HOME - (setenv "HOME" "/tmp") - (with-directory-excursion "/tmp" - (invoke "pytest" "-vv" - ;; TODO: This tests fails because nbconvert does not - ;; list "python" as a format. - "-k" "not test_list_formats")))))))) + (invoke "pytest" "-vv" + ;; TODO: This tests fails because nbconvert does not + ;; list "python" as a format. + "-k" "not test_list_formats"))))))) (propagated-inputs `(("python-argon2-cffi" ,python-argon2-cffi) ("python-ipykernel" ,python-ipykernel) @@ -12344,14 +12353,14 @@ in the data.") (define-public python-jupyter-console (package (name "python-jupyter-console") - (version "6.1.0") + (version "6.4.0") (source (origin (method url-fetch) (uri (pypi-uri "jupyter_console" version)) (sha256 (base32 - "06s3kr5vx0l1y1b7fxb04dmrppscl7q69sl9yyfr0d057d1ssvkg")))) + "1iqrxhd8hvlyf8cqbc731ssnwm61wrycnbiczy5wsfahd3hlh8i4")))) (build-system python-build-system) (propagated-inputs `(("python-ipykernel" ,python-ipykernel) @@ -12359,7 +12368,8 @@ in the data.") ("python-prompt-toolkit" ,python-prompt-toolkit-2) ("python-pygments" ,python-pygments))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-nose" ,python-nose) + ("python-pytest" ,python-pytest))) (home-page "https://jupyter.org") (synopsis "Jupyter terminal console") (description "This package provides a terminal-based console frontend for @@ -12419,7 +12429,8 @@ Jupyter kernels such as IJulia and IRKernel.") #t))))) (propagated-inputs `(("python-ipykernel" ,python-ipykernel) - ("python-ipython" ,python-ipython))) + ("python-ipython" ,python-ipython) + ("python-pyqt" ,python-pyqt))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://jupyter.org") @@ -12559,7 +12570,8 @@ library provides codecs are supported.") (file-name (git-file-name name version)) (sha256 (base32 - "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0")))) + "0aad9gbswnnhssin2q0m5lmpm0ahyf80ahs2zjigbn5y7fvljnd0")) + (patches (search-patches "python-docopt-pytest6-compat.patch")))) (build-system python-build-system) (native-inputs `(("python-pytest" ,python-pytest))) @@ -12567,7 +12579,9 @@ library provides codecs are supported.") `(#:phases (modify-phases %standard-phases (replace 'check - (lambda _ (invoke "py.test")))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "py.test"))))))) (home-page "http://docopt.org") (synopsis "Command-line interface description language for Python") (description "This library allows the user to define a command-line @@ -12781,14 +12795,15 @@ tables.") (define-public python-atomicwrites (package (name "python-atomicwrites") - (version "1.3.0") + (version "1.4.0") (source (origin (method url-fetch) (uri (pypi-uri "atomicwrites" version)) (sha256 (base32 - "19ngcscdf3jsqmpcxn6zl5b6anmsajb6izp1smcd1n02midl9abm")))) + "0yla2svfhfqrcj8qbyqzx7wi4jy0dwcxvlkg0k3zjd54s5m3jw5f")))) (build-system python-build-system) + (arguments `(#:tests? #f)) ;avoid circular dependency with pytest (synopsis "Atomic file writes in Python") (description "Library for atomic file writes using platform dependent tools for atomic file system operations.") @@ -12980,6 +12995,11 @@ pure Python module that works on virtually all Python versions.") (replace 'check (lambda* (#:key inputs outputs tests? #:allow-other-keys) (when tests? + ;; Unset PYTHONDONTWRITEBYTECODE to match the + ;; expectations of a test in + ;; 'testing/test_gateway.py'. + (unsetenv "PYTHONDONTWRITEBYTECODE") + (add-installed-pythonpath inputs outputs) (invoke "pytest" "-vv"))))))) (native-inputs @@ -13350,6 +13370,18 @@ text.") (define-public python2-colorama (package-with-python2 python-colorama)) +;; awscli and botocore do not accept version 0.4.4 +(define-public python-colorama-for-awscli + (package + (inherit python-colorama) + (version "0.4.3") + (source + (origin + (method url-fetch) + (uri (pypi-uri "colorama" version)) + (sha256 + (base32 "189n8hpijy14jfan4ha9f5n06mnl33cxz7ay92wjqgkr639s0vg9")))))) + (define-public python-moto (package (name "python-moto") @@ -13366,9 +13398,7 @@ text.") (modify-phases %standard-phases (add-after 'unpack 'patch-hardcoded-executable-names (lambda* (#:key inputs #:allow-other-keys) - (let ((bash-exec (string-append - (assoc-ref inputs "bash") - "/bin/sh"))) + (let ((bash-exec (search-input-file inputs "/bin/sh"))) (substitute* "moto/batch/models.py" (("/bin/sh") bash-exec)) (substitute* (find-files "tests" "\\.py$") @@ -14305,15 +14335,20 @@ ISO 8859, etc.).") (lambda* (#:key inputs outputs #:allow-other-keys) (add-installed-pythonpath inputs outputs) (invoke "pytest" "-vv" "-k" - ;; These tests try to download online data. - (string-append "not test_PolyLineROI" - " and not test_getArrayRegion_axisorder" - " and not test_getArrayRegion" - " and not test_PlotCurveItem" - " and not test_NonUniformImage_colormap" - " and not test_NonUniformImage_lut" - " and not test_ImageItem_axisorder" - " and not test_ImageItem"))))))) + (string-append + ;; These tests try to download online data. + "not test_PolyLineROI" + " and not test_getArrayRegion_axisorder" + " and not test_getArrayRegion" + " and not test_PlotCurveItem" + " and not test_NonUniformImage_colormap" + " and not test_NonUniformImage_lut" + " and not test_ImageItem_axisorder" + " and not test_ImageItem" + ;; The test_reload test fails and suggests adding + ;; "--assert=plain" to the pytest command, but it + ;; doesn't solve the failure. + " and not test_reload"))))))) (native-inputs `(("python-pytest" ,python-pytest) ("python-pytest-cov" ,python-pytest-cov) @@ -14463,9 +14498,6 @@ algorithm (also called the Hungarian algorithm or the Kuhn-Munkres algorithm), useful for solving the Assignment Problem.") (license license:bsd-3))) -(define-public python2-munkres - (package-with-python2 python-munkres)) - (define-public python-whoosh (package (name "python-whoosh") @@ -14819,31 +14851,19 @@ syntax highlighting, markdown and more to the terminal.") (define-public python-magic (package (name "python-magic") - (version "0.4.15") + (version "0.4.24") + (home-page "https://github.com/ahupp/python-magic") (source (origin - (method url-fetch) - (uri (pypi-uri "python-magic" version)) + (method git-fetch) + (uri (git-reference (url home-page) (commit version))) + (file-name (git-file-name name version)) (sha256 (base32 - "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk")) - (file-name (string-append name "-" version "-checkout")))) + "17jalhjbfd600lzfz296m0nvgp6c7vx1mgz82jbzn8hgdzknf4w0")))) (build-system python-build-system) (arguments - ;; The tests are unreliable, so don't run them. The tests fail - ;; under Python3 because they were written for Python2 and - ;; contain import statements that do not work in Python3. One of - ;; the tests fails under Python2 because its assertions are - ;; overly stringent; it relies on comparing output strings which - ;; are brittle and can change depending on the version of - ;; libmagic being used and the system on which the test is - ;; running. In my case, under GuixSD 0.10.0, only one test - ;; failed, and it seems to have failed only because the version - ;; of libmagic that is packaged in Guix outputs a slightly - ;; different (but not wrong) string than the one that the test - ;; expected. - '(#:tests? #f - #:phases (modify-phases %standard-phases + '(#:phases (modify-phases %standard-phases ;; Replace a specific method call with a hard-coded ;; path to the necessary libmagic.so file in the ;; store. If we don't do this, then the method call @@ -14853,24 +14873,22 @@ syntax highlighting, markdown and more to the terminal.") (add-before 'build 'hard-code-path-to-libmagic (lambda* (#:key inputs #:allow-other-keys) (let ((file (assoc-ref inputs "file"))) - (substitute* "magic.py" - (("ctypes.util.find_library\\('magic'\\)") - (string-append "'" file "/lib/libmagic.so'"))) - #t))) - (add-before 'install 'disable-egg-compression - (lambda _ - (let ((port (open-file "setup.cfg" "a"))) - (display "\n[easy_install]\nzip_ok = 0\n" - port) - (close-port port) - #t)))))) + (substitute* "magic/loader.py" + (("find_library\\('magic'\\)") + (string-append "'" file "/lib/libmagic.so'")))))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + ;; The test suite mandates this variable. + (setenv "LC_ALL" "en_US.UTF-8") + (if tests? + (invoke "python" "./test/test.py") + (format #t "test suite not run~%"))))))) + (native-inputs + `(("which" ,which))) (inputs ;; python-magic needs to be able to find libmagic.so. `(("file" ,file))) - (home-page - "https://github.com/ahupp/python-magic") - (synopsis - "File type identification using libmagic") + (synopsis "File type identification using libmagic") (description "This module uses ctypes to access the libmagic file type identification library. It makes use of the local magic database and @@ -15165,12 +15183,6 @@ own code, responding to click events and updating clock every second.") (modify-phases %standard-phases (replace 'check (lambda _ - ;; Upstream runs tests after installation and the package itself - ;; resides in a subdirectory. Extend PYTHONPATH so it will be - ;; found. - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) (invoke "py.test" "-vv" "tests" "README.rst")))))) (native-inputs `(("python-pytest" ,python-pytest) @@ -15364,13 +15376,6 @@ graphviz.") (string-join disabled-tests "\n"))))))) (replace 'check (lambda _ - ;; Make sure the build directory is on PYTHONPATH. - (setenv "PYTHONPATH" - (string-append - (getenv "PYTHONPATH") ":" - (getcwd) "/build/" - (car (scandir "build" (cut string-prefix? "lib." <>))))) - ;; Use the build daemons configured number of workers. (setenv "NWORKERS" (number->string (parallel-job-count))) @@ -15428,7 +15433,14 @@ format.") "17d3hnxv9qndagzz63mdpyk99xj63p9gq586vjn0rxk8cl197nym")))) (build-system python-build-system) (arguments - '(#:tests? #f)) ; FIXME: some tests fail + '(#:tests? #f ; FIXME: some tests fail + #:phases + (modify-phases %standard-phases + ;; Remove scripts, because they depend on [conch] + (add-after 'unpack 'remove-entrypoint + (lambda _ + (substitute* "src/twisted/python/_setup.py" + (("\".+ = twisted\\.conch\\.scripts\\..+\",") ""))))))) (propagated-inputs `(("python-zope-interface" ,python-zope-interface) ("python-pyhamcrest" ,python-pyhamcrest) @@ -15640,7 +15652,8 @@ etc.") (uri (pypi-uri "chai" version)) (sha256 (base32 - "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz")))) + "1k6n6zbgrrs83crp6mr3yqj9zlv40b8rpisyrliwsq7naml2p3gz")) + (patches (search-patches "python-chai-drop-python2.patch")))) (build-system python-build-system) (home-page "https://github.com/agoragames/chai") (synopsis "Mocking framework for Python") @@ -15649,9 +15662,6 @@ etc.") objects, patterned after the Mocha library for Ruby.") (license license:bsd-3))) -(define-public python2-chai - (package-with-python2 python-chai)) - (define-public python-inflection (package (name "python-inflection") @@ -15988,17 +15998,15 @@ some degree most natural languages too.") (delete-file "libcst/tests/test_pyre_integration.py") (delete-file "libcst/codemod/tests/test_codemod_cli.py") (delete-file "libcst/metadata/tests/test_full_repo_manager.py") - (delete-file "libcst/metadata/tests/test_type_inference_provider.py") - #t)) + (delete-file "libcst/metadata/tests/test_type_inference_provider.py"))) (add-before 'check 'generate-test-data (lambda _ - (setenv "PYTHONPATH" (string-append (getcwd) ":" (getenv "PYTHONPATH"))) (invoke "python" "-m" "libcst.codegen.generate" "visitors") (invoke "python" "-m" "libcst.codegen.generate" "return_types"))) (replace 'check - (lambda _ - (invoke "python" "-m" "unittest") - #t))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "python" "-m" "unittest"))))))) (native-inputs `(("python-black" ,python-black) ("python-isort" ,python-isort))) @@ -16023,6 +16031,14 @@ feels like an AST.") ;; libcst/_add_slots.py license:asl2.0)))) +(define-public python-libcst-minimal + (hidden-package + (package + (inherit python-libcst) + (name "python-libcst-minimal") + (arguments '(#:tests? #f)) + (native-inputs '())))) + (define-public python-typing-inspect (package (name "python-typing-inspect") @@ -16032,7 +16048,8 @@ feels like an AST.") (uri (pypi-uri "typing_inspect" version)) (sha256 (base32 - "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg")))) + "1dzs9a1pr23dhbvmnvms2jv7l7jk26023g5ysf0zvnq8b791s6wg")) + (patches (search-patches "python-typing-inspect-fix.patch")))) (build-system python-build-system) (propagated-inputs `(("python-mypy-extensions" ,python-mypy-extensions) @@ -16078,8 +16095,21 @@ until the object is actually required, and caches the result of said call.") (base32 "1m0xvyby8baaxp6pfm0fgq8d2pq5dd8qm8bzfbrs009jaw5pza74")))) (build-system python-build-system) + (arguments + `(#:tests? #f ; XXX: requires internet access + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-getprotobyname-calls + ;; These calls are problematic in the build environment as there is + ;; no /etc/protocols. This breaks the sanity-check phase of any + ;; package depnding on this one. + (lambda _ + (substitute* "dns/rdtypes/IN/WKS.py" + (("socket.getprotobyname\\('tcp'\\)") + "6") + (("socket.getprotobyname\\('udp'\\)") + "17"))))))) (native-inputs `(("unzip" ,unzip))) - (arguments '(#:tests? #f)) ; XXX: requires internet access (home-page "https://www.dnspython.org") (synopsis "DNS toolkit for Python") (description @@ -16233,29 +16263,7 @@ parsing UK postcodes.") (description "Faker is a Python package that generates fake data such as names, addresses, and phone numbers.") - (license license:expat) - (properties `((python2-variant . ,(delay python2-faker)))))) - -;; Faker 4.0 dropped Python 2 support, so we stick with this older version here. -(define-public python2-faker - (let ((base (package-with-python2 (strip-python2-variant - python-faker)))) - (package - (inherit base) - (version "3.0.1") - (source (origin - (method url-fetch) - (uri (pypi-uri "Faker" version)) - (sha256 - (base32 - "11cr0qvspkdh6198rqy56qildk7bnp6llj8kyy1dan5sp5n4dxy7")))) - (native-inputs - `(("python-mock" ,python2-mock) - ,@(package-native-inputs base))) - (propagated-inputs - `(("python2-ipaddress" ,python2-ipaddress) - ("python2-six" ,python2-six) - ,@(package-propagated-inputs base)))))) + (license license:expat))) (define-public python-pyaml (package @@ -16296,7 +16304,8 @@ YAML-serialized data.") (build-system python-build-system) (native-inputs `(("python-pytest" ,python-pytest) - ("python-nose" ,python-nose))) + ("python-nose" ,python-nose) + ("python-toml" ,python-toml))) (propagated-inputs `(("python-simplejson" ,python-simplejson))) (home-page "https://github.com/sdispater/backpack") @@ -16385,10 +16394,15 @@ characters, mouse support, and auto suggestions.") (version "0.18.1") (source (origin - (method url-fetch) - (uri (pypi-uri "jedi" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/davidhalter/jedi") + (commit (string-append "v" version)) + (recursive? #true))) + (file-name (git-file-name name version)) (sha256 - (base32 "1as9v6kv49j11al2mzjh72dd5mxxnfcjv0z5dbmwi6aalqk7c4vl")))) + (base32 + "07drmi3ai49jw5n23ibkambcgijqcw073ihypjgxfnks5lv4yqy1")))) (build-system python-build-system) (arguments `(#:phases @@ -16400,8 +16414,8 @@ characters, mouse support, and auto suggestions.") (invoke "python" "-m" "pytest" "-vv")) #t))))) (native-inputs - `(("python-docopt" ,python-docopt) - ("python-colorama" ,python-colorama) + `(("python-colorama" ,python-colorama) + ("python-docopt" ,python-docopt) ("python-django" ,python-django-2.2) ("python-pytest" ,python-pytest))) (propagated-inputs @@ -16413,8 +16427,8 @@ characters, mouse support, and auto suggestions.") Development Environments (@dfn{IDE}s) and text editors. It understands Python on a deeper level than many other static analysis frameworks for Python. -Jedi understands docstrings and you can use Jedi autocompletion in your REPL as -well.") +Jedi understands docstrings and you can use Jedi autocompletion in your REPL +as well.") (license license:expat))) (define-public ptpython @@ -16440,9 +16454,9 @@ well.") (synopsis "Python Read-Eval-Print-Loop with nice IDE-like features") (description "ptpython is a Python read-eval-print loop with IDE-like features. -It supports syntax highlighting, multiline editing, autocompletion, mouse, -color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters -etc.") + It supports syntax highlighting, multiline editing, autocompletion, mouse, + color schemes, bracketed paste, Vi and Emacs keybindings, Chinese characters + etc.") (license license:bsd-3) (properties `((python2-variant . ,(delay ptpython-2)))))) @@ -16492,8 +16506,8 @@ etc.") (synopsis "Command-line interface for Python modules") (description "@code{entrypoint2} is an easy to use command-line interface for Python -modules based on @code{argparse}. It translates function signature and -documentation to argparse configuration.") + modules based on @code{argparse}. It translates function signature and + documentation to argparse configuration.") (license license:bsd-3))) (define-public python-pyvirtualdisplay @@ -16540,6 +16554,12 @@ documentation to argparse configuration.") (arguments `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'fix-tests + ;; See https://github.com/torproject/stem/issues/56 + (lambda _ + (substitute* "run_tests.py" + (("test\\.task\\.MOCK_VERSION,") + "")))) (replace 'check (lambda _ (invoke "./run_tests.py" "--unit") @@ -16553,8 +16573,8 @@ documentation to argparse configuration.") "Python controller library that allows applications to interact with Tor") (description "Stem is a Python controller library for Tor. With it you can use Tor's -control protocol to script against the Tor process and read descriptor data -relays publish about themselves.") + control protocol to script against the Tor process and read descriptor data + relays publish about themselves.") (license license:lgpl3))) (define-public python-pyserial @@ -16580,8 +16600,8 @@ relays publish about themselves.") "https://github.com/pyserial/pyserial") (synopsis "Python Serial Port Bindings") (description "@code{pyserial} provide serial port bindings for Python. It -supports different byte sizes, stop bits, parity and flow control with RTS/CTS -and/or Xon/Xoff. The port is accessed in RAW mode.") + supports different byte sizes, stop bits, parity and flow control with RTS/CTS + and/or Xon/Xoff. The port is accessed in RAW mode.") (license license:bsd-3))) (define-public python2-pyserial @@ -16602,13 +16622,13 @@ and/or Xon/Xoff. The port is accessed in RAW mode.") (home-page "https://github.com/pyserial/pyserial-asyncio") (synopsis "Pyserial asynchronous I/O extension") (description "This package extends Pyserial with asynchronous I/O -support.") + support.") (license license:bsd-3))) (define-public python-pymodbus (package (name "python-pymodbus") - (version "2.5.2") + (version "2.5.3") (source (origin (method git-fetch) @@ -16618,24 +16638,28 @@ support.") (file-name (git-file-name name version)) (sha256 (base32 - "009blvzi56434f0qfjdg3r8q1flb1jcx2786wi0i0xf81025z9cf")))) + "0kjjrx7xrlx0pf3y67hhr4xvqrly3xzmvf6ic5as61m6z19m7zd5")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-after 'unpack 'disable-problematic-tests (lambda _ - ;; The following test module rely on Python's own 'test' - ;; module, which is not distributed in the Python + ;; The following test modules rely on Python's own + ;; 'test' module, which is not distributed in the Python ;; package of Guix. (delete-file "test/test_client_async_asyncio.py") - (delete-file "test/test_client_sync_diag.py"))) + (delete-file "test/test_client_sync_diag.py") + ;; The following test module requires the asynctest + ;; library, abandoned without support for Python 3.9+ + ;; (see: + ;; https://github.com/riptideio/pymodbus/issues/681). + (delete-file "test/test_server_asyncio.py"))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? (invoke "python" "-m" "pytest"))))))) (native-inputs - `(("python-asynctest" ,python-asynctest) - ("python-mock" ,python-mock) + `(("python-mock" ,python-mock) ("python-pytest" ,python-pytest) ("python-redis" ,python-redis) ("python-sqlalchemy" ,python-sqlalchemy) @@ -16653,26 +16677,53 @@ support.") (home-page "https://github.com/riptideio/pymodbus/") (synopsis "Modbus protocol stack in Python") (description "Pymodbus is a full Modbus protocol implementation using -@code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous -communications core. It includes the following @emph{client} features: -@itemize -@item full read/write protocol on discrete and register -@item most of the extended protocol (diagnostic/file/pipe/setting/information) -@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary -@item asynchronous and synchronous versions -@item payload builder/decoder utilities -@item pymodbus read eval print loop (REPL). -@end itemize -It also includes the following @emph{server} features: -@itemize -@item can function as a fully implemented Modbus server -@item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary -@item asynchronous and synchronous versions -@item full server control context (device information, counters, etc) -@item a number of backing contexts (database, redis, sqlite, a slave device). -@end itemize") + @code{asyncio}, @code{tornado} or @code{twisted} for its asynchronous + communications core. It includes the following @emph{client} features: + @itemize + @item full read/write protocol on discrete and register + @item most of the extended protocol (diagnostic/file/pipe/setting/information) + @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary + @item asynchronous and synchronous versions + @item payload builder/decoder utilities + @item pymodbus read eval print loop (REPL). + @end itemize + It also includes the following @emph{server} features: + @itemize + @item can function as a fully implemented Modbus server + @item TCP, UDP, Serial ASCII, Serial RTU, and Serial Binary + @item asynchronous and synchronous versions + @item full server control context (device information, counters, etc) + @item a number of backing contexts (database, redis, sqlite, a slave device). + @end itemize") (license license:bsd-3))) +(define-public python-kivy-garden + (package + (name "python-kivy-garden") + (version "0.1.4") + (source + (origin + (method url-fetch) + (uri (pypi-uri "kivy-garden" version)) + (sha256 + (base32 "0wkcpr2zc1q5jb0bi7v2dgc0vs5h1y7j42mviyh764j2i0kz8mn2")))) + (build-system python-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-after 'install 'remove-bat-file + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (delete-file + (string-append out "/bin/garden.bat")))))))) + (propagated-inputs + `(("python-requests" ,python-requests))) + (home-page "https://github.com/kivy-garden/garden") + (synopsis "Garden tool for Kivy flowers") + (description + "This package provides the @command{garden} command to install packages +for Kivy, the multitouch application platform.") + (license license:expat))) + (define-public python-kivy (package (name "python-kivy") @@ -16693,9 +16744,11 @@ It also includes the following @emph{server} features: (add-after 'patch-generated-file-shebangs 'set-sdl-paths (lambda* (#:key inputs #:allow-other-keys) (setenv "KIVY_SDL2_PATH" - (string-append (assoc-ref inputs "sdl-union") - "/include/SDL2")) - #t))))) + (search-input-directory inputs "/include/SDL2")))) + (add-before 'sanity-check 'set-home + (lambda _ + ;; 'kivy/__init__.py' wants to create $HOME/.kivy. + (setenv "HOME" (getcwd))))))) (native-inputs `(("pkg-config" ,pkg-config) ("python-cython" ,python-cython))) @@ -16703,13 +16756,15 @@ It also includes the following @emph{server} features: `(("gstreamer" ,gstreamer) ("mesa" ,mesa) ("sdl-union" - ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))))) + ,(sdl-union (list sdl2 sdl2-image sdl2-mixer sdl2-ttf))) + ("python-docutils" ,python-docutils) + ("python-kivy-garden" ,python-kivy-garden) + ("python-pygments" ,python-pygments))) (home-page "https://kivy.org") - (synopsis - "Multitouch application framework") + (synopsis "Multitouch application framework") (description - "A software library for rapid development of -hardware-accelerated multitouch applications.") + "Kivy is a software library for rapid development of hardware-accelerated +multitouch applications.") (license license:expat))) (define-public python2-kivy @@ -16742,7 +16797,7 @@ hardware-accelerated multitouch applications.") (home-page "https://github.com/audreyr/binaryornot") (synopsis "Package to check if a file is binary or text") (description "Ultra-lightweight pure Python package to check if a file is -binary or text.") + binary or text.") (license license:bsd-3) (properties `((python2-variant . ,(delay python2-binaryornot)))))) @@ -16770,12 +16825,8 @@ binary or text.") (arguments `(#:phases (modify-phases %standard-phases - (add-before 'check 'set-pythonpath + (add-before 'check 'set-home (lambda _ - (setenv "PYTHONPATH" - (string-append - (getcwd) "/src/" - ":" (getenv "PYTHONPATH"))) (setenv "HOME" "")))))) (native-inputs `(("python-coverage" ,python-coverage) @@ -16783,7 +16834,7 @@ binary or text.") (home-page "https://github.com/ReFirmLabs/binwalk") (synopsis "Firmware analysis tool") (description "Binwalk is a tool for analyzing, reverse engineering, and -extracting firmware images") + extracting firmware images") (license license:expat))) (define-public python-binwalk @@ -16814,9 +16865,9 @@ extracting firmware images") (home-page "http://nltk.org/") (synopsis "Natural Language Toolkit") (description "It provides interfaces to over 50 corpora and lexical -resources such as WordNet, along with a suite of text processing libraries -for classification, tokenization, stemming, tagging, parsing, and semantic -reasoning, wrappers for natural language processing libraries.") + resources such as WordNet, along with a suite of text processing libraries + for classification, tokenization, stemming, tagging, parsing, and semantic + reasoning, wrappers for natural language processing libraries.") (license license:asl2.0))) ;; Versions >=3.5 breaks backward-compatibility, @@ -16878,7 +16929,7 @@ reasoning, wrappers for natural language processing libraries.") (synopsis "Python client for Consul") (description "Python client for @url{http://www.consul.io/,Consul}, a tool for service -discovery, monitoring and configuration.") + discovery, monitoring and configuration.") (license license:expat))) (define-public python2-consul @@ -16927,8 +16978,6 @@ discovery, monitoring and configuration.") (modify-phases %standard-phases (replace 'check (lambda _ - (setenv "PYTHONPATH" (string-append "./build/lib:" - (getenv "PYTHONPATH"))) (invoke "pytest" "-vv")))))) (build-system python-build-system) (native-inputs @@ -16938,7 +16987,7 @@ discovery, monitoring and configuration.") (home-page "https://github.com/eea/odfpy") (synopsis "Python API and tools to manipulate OpenDocument files") (description "Collection of libraries and utility programs written in -Python to manipulate OpenDocument 1.2 files.") + Python to manipulate OpenDocument 1.2 files.") (license ;; The software is mainly dual GPL2+ and ASL2.0, but includes a ;; number of files with other licenses. @@ -16959,24 +17008,11 @@ Python to manipulate OpenDocument 1.2 files.") "00y49bfsi7rrsd1s42gc2w95a6arl9ipdsx2493hr0v54fj07ih0")))) (build-system python-build-system) (arguments - `(#:modules ((guix build utils) - (guix build python-build-system) - (srfi srfi-1) - (srfi srfi-26) - (ice-9 ftw)) - #:phases + `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append - cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-v"))))))) + (invoke "pytest" "-v")))))) (native-inputs `(("python-hypothesis" ,python-hypothesis) ("python-pytest-cov" ,python-pytest-cov) @@ -16988,13 +17024,13 @@ Python to manipulate OpenDocument 1.2 files.") (synopsis "Natural sorting for python and shell") (description "Natsort lets you apply natural sorting on lists instead of -lexicographical. If you use the built-in @code{sorted} method in python -on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, -@code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, -@code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that -identifies numbers and sorts them separately from strings. It can also sort -version numbers, real numbers, mixed types and more, and comes with a shell -command @command{natsort} that exposes this functionality in the command line.") + lexicographical. If you use the built-in @code{sorted} method in python + on a list such as @code{[@code{a20}, @code{a9}, @code{a1}, @code{a4}, + @code{a10}]}, it would be returned as @code{[@code{a1}, @code{a10}, @code{a20}, + @code{a4}, @code{a9}]}. Natsort provides a function @code{natsorted} that + identifies numbers and sorts them separately from strings. It can also sort + version numbers, real numbers, mixed types and more, and comes with a shell + command @command{natsort} that exposes this functionality in the command line.") (license license:expat))) (define-public glances @@ -17026,8 +17062,8 @@ command @command{natsort} that exposes this functionality in the command line.") (synopsis "Cross-platform curses-based monitoring tool") (description "Glances is a curses-based monitoring tool for a wide variety of platforms. -Glances uses the PsUtil library to get information from your system. It -monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.") + Glances uses the PsUtil library to get information from your system. It + monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.") (license license:lgpl3+))) (define-public python-graphql-core @@ -17062,9 +17098,9 @@ monitors CPU, load, memory, network bandwidth, disk I/O, disk use, and more.") (synopsis "GraphQL implementation for Python") (description "GraphQL implementation for Python. GraphQL is a data query language and -runtime designed and used to request and deliver data to mobile and web apps. -This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js} -to Python.") + runtime designed and used to request and deliver data to mobile and web apps. + This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js} + to Python.") (license license:expat))) (define-public python-graphql-relay @@ -17080,35 +17116,44 @@ to Python.") "1d70vwam9gjhx7fqzsa03x7lc6ivcqki5r9pk8m7rslmb7pagmbh")))) (build-system python-build-system) (arguments - '(#:tests? #f)) ; The tests are not distributed + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "pytest" "tests"))))))) + (native-inputs + (list + python-pytest + python-pytest-asyncio)) (propagated-inputs `(("python-graphql-core" ,python-graphql-core))) (home-page "https://github.com/graphql-python/graphql-relay-py") (synopsis "Relay implementation for Python") (description "This is a library to allow the easy creation of Relay-compliant servers -using the GraphQL Python reference implementation of a GraphQL server. It -should be noted that the code is a exact port of the original -@url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation} -from Facebook.") + using the GraphQL Python reference implementation of a GraphQL server. It + should be noted that the code is a exact port of the original + @url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation} + from Facebook.") (license license:expat))) (define-public python-graphene (package (name "python-graphene") - (version "0.10.2") + (version "3.0") (source (origin (method url-fetch) (uri (pypi-uri "graphene" version)) (sha256 (base32 - "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q")))) + "08m1n2ydk48c18cvl8474v3pwwacjl1vgq61m9qs00122mp0cj5g")))) (build-system python-build-system) (propagated-inputs `(("python-graphql-core" ,python-graphql-core) ("python-graphql-relay" ,python-graphql-relay) - ("python-iso8601" ,python-iso8601) + ("python-aniso8601" ,python-aniso8601) ("python-promise" ,python-promise) ("python-six" ,python-six))) (arguments @@ -17117,41 +17162,8 @@ from Facebook.") (synopsis "GraphQL Framework for Python") (description "Graphene is a Python library for building GraphQL schemas/types. -A GraphQL schema describes your data model, and provides a GraphQL server -with an associated set of resolve methods that know how to fetch data.") - (license license:expat))) - -(define-public python-nautilus - (package - (name "python-nautilus") - (version "0.4.9") - (source - (origin - (method url-fetch) - (uri (pypi-uri "nautilus" version)) - (sha256 - (base32 - "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p")))) - (build-system python-build-system) - (arguments `(#:tests? #f)) ; fails to import test modules - (propagated-inputs - `(("python-bcrypt" ,python-bcrypt) - ("python-click" ,python-click) - ("python-consul" ,python-consul) - ("python-graphene" ,python-graphene) - ("python-jinja2" ,python-jinja2) - ("python-peewee" ,python-peewee) - ("python-pika" ,python-pika) - ("python-tornado" ,python-tornado) - ("python-wtforms" ,python-wtforms))) - (native-inputs - `(("python-nose2" ,python-nose2))) - (home-page "https://github.com/AlecAivazis/nautilus") - (synopsis "Library for creating microservice applications") - (description - "Nautilus is a framework for flux based microservices that looks to -provide extendible implementations of common aspects of a cloud so that you can -focus on building massively scalable web applications.") + A GraphQL schema describes your data model, and provides a GraphQL server + with an associated set of resolve methods that know how to fetch data.") (license license:expat))) (define-public python-random2 @@ -17163,20 +17175,22 @@ focus on building massively scalable web applications.") (uri (pypi-uri "random2" version ".zip")) (sha256 (base32 - "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l")))) + "01y0s4747plsx8fdnxy0nz83dp69naddz58m81r9h0s1qfm31b9l")) + (patches + (search-patches "python-random2-getrandbits-test.patch")))) (build-system python-build-system) (native-inputs `(("unzip" ,unzip))) (home-page "http://pypi.python.org/pypi/random2") (synopsis "Python 3 version of the Python 2 @code{random} module") (description "This package provides a Python 3 ported version of Python 2.7’s -@code{random} module. It has also been back-ported to work in Python 2.6. + @code{random} module. It has also been back-ported to work in Python 2.6. -In Python 3, the implementation of @code{randrange()} was changed, so that -even with the same seed you get different sequences in Python 2 and 3. + In Python 3, the implementation of @code{randrange()} was changed, so that + even with the same seed you get different sequences in Python 2 and 3. -This package closes that gap, allowing stable random number generation -between the different Python versions.") + This package closes that gap, allowing stable random number generation + between the different Python versions.") (license license:psfl))) (define-public python2-random2 @@ -17199,8 +17213,8 @@ between the different Python versions.") (home-page "https://github.com/shibukawa/snowball_py") (synopsis "Snowball stemming library collection for Python") (description "This package provides 16 word stemmer algorithms generated -from Snowball algorithms. It includes the 15 original ones plus the Poerter -English stemmer.") + from Snowball algorithms. It includes the 15 original ones plus the Poerter + English stemmer.") (license license:bsd-3))) (define-public python2-snowballstemmer @@ -17248,12 +17262,12 @@ English stemmer.") (synopsis "Setproctitle implementation for Python to customize the process title") (description "The library allows a process to change its title (as displayed -by system tools such as ps and top). + by system tools such as ps and top). -Changing the title is mostly useful in multi-process systems, for -example when a master process is forked: changing the children's title -allows identifying the task each process is busy with. The technique -is used by PostgreSQL and the OpenSSH Server for example.") + Changing the title is mostly useful in multi-process systems, for + example when a master process is forked: changing the children's title + allows identifying the task each process is busy with. The technique + is used by PostgreSQL and the OpenSSH Server for example.") (license license:bsd-3) (properties `((python2-variant . ,(delay python2-setproctitle)))))) @@ -17287,10 +17301,6 @@ is used by PostgreSQL and the OpenSSH Server for example.") (delete-file "tests/__init__.py"))) (replace 'check (lambda _ - ;; Extend PYTHONPATH so the built package will be found. - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) (invoke "py.test" "-vv" )))))) (native-inputs `(("python-pytest" ,python-pytest))) @@ -17299,9 +17309,9 @@ is used by PostgreSQL and the OpenSSH Server for example.") (synopsis "General purpose Python data validator") (description "It allows validation of arbitrary Python data structures. -The schema format is based on the JSON Schema -proposal (http://json-schema.org), so combined with json the library is also -useful as a validator for JSON data.") + The schema format is based on the JSON Schema + proposal (http://json-schema.org), so combined with json the library is also + useful as a validator for JSON data.") (license license:expat))) (define-public python2-validictory @@ -17319,24 +17329,14 @@ useful as a validator for JSON data.") (base32 "090vdksbz341f7ljvr0zswblw4lspa8qaiikzyjkf318arpxmil9")))) (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'check 'set-pythonpath - (lambda _ - (setenv "PYTHONPATH" - (string-append - (getcwd) "/test/" - ":" (getenv "PYTHONPATH"))) - #t))))) (home-page "https://github.com/eliben/pyelftools") (synopsis "Analyze binary and library file information") (description "This Python library provides interfaces for parsing and -analyzing two binary and library file formats; the Executable and Linking -Format (ELF), and debugging information in the Debugging With Attributed -Record Format (DWARF).") + analyzing two binary and library file formats ; the Executable and Linking + Format (ELF), and debugging information in the Debugging With Attributed + Record Format (DWARF).") (license license:public-domain))) (define-public python-pyev @@ -17357,8 +17357,7 @@ Record Format (DWARF).") (modify-phases %standard-phases (add-after 'unpack 'patch (lambda* (#:key inputs #:allow-other-keys) - (let ((libev (string-append (assoc-ref inputs "libev") - "/lib/libev.so.4"))) + (let ((libev (search-input-file inputs "/lib/libev.so.4"))) (substitute* "setup.py" (("libev_dll_name = find_library\\(\\\"ev\\\"\\)") (string-append "libev_dll_name = \"" libev "\""))))))))) @@ -17388,7 +17387,7 @@ Record Format (DWARF).") (synopsis "Gets image size of files in various formats in Python") (description "This package allows determination of image size from -PNG, JPEG, JPEG2000 and GIF files in pure Python.") + PNG, JPEG, JPEG2000 and GIF files in pure Python.") (license license:expat))) (define-public python2-imagesize @@ -17441,10 +17440,10 @@ PNG, JPEG, JPEG2000 and GIF files in pure Python.") (home-page "https://github.com/kislyuk/argcomplete") (synopsis "Shell tab completion for Python argparse") (description "argcomplete provides extensible command line tab completion -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.") + 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) (properties `((python2-variant . ,(delay python2-argcomplete)))))) @@ -17509,7 +17508,7 @@ network.") (home-page "http://opensource.perlig.de/rcssmin/") (synopsis "CSS Minifier") (description "The minifier is based on the semantics of the YUI compressor, -which itself is based on the rule list by Isaac Schlueter.") + which itself is based on the rule list by Isaac Schlueter.") (license license:asl2.0))) (define-public python-rjsmin @@ -17544,32 +17543,32 @@ which itself is based on the rule list by Isaac Schlueter.") (home-page "http://opensource.perlig.de/rjsmin/") (synopsis "Javascript Minifier") (description "@code{rJSmin} is a javascript minifier written in Python. The -minifier is based on the semantics of jsmin.c by Douglas Crockford. The module -is a re-implementation aiming for speed, so it can be used at runtime (rather -than during a preprocessing step).") + minifier is based on the semantics of jsmin.c by Douglas Crockford. The module + is a re-implementation aiming for speed, so it can be used at runtime (rather + than during a preprocessing step).") (license license:asl2.0))) (define-public python-xopen (package (name "python-xopen") - (version "0.5.0") + (version "0.8.2") (source - (origin - (method url-fetch) - (uri (pypi-uri "xopen" version)) - (sha256 - (base32 - "17xbrgi23l87yg6h0qcknssp2q812miiy33qw6v45v5gx0jwv5xh")))) + (origin + (method url-fetch) + (uri (pypi-uri "xopen" version)) + (sha256 + (base32 + "1xrlcnd6fri3w97zzzp6vyk4l21yq1lc8r4wksi06hgpkbh4jdq0")))) (build-system python-build-system) (propagated-inputs `(("python-setuptools-scm" ,python-setuptools-scm))) (home-page "https://github.com/marcelm/xopen/") (synopsis "Open compressed files transparently") (description "This module provides an @code{xopen} function that works like -Python's built-in @code{open} function, but can also deal with compressed files. -Supported compression formats are gzip, bzip2 and, xz, and are automatically -recognized by their file extensions. The focus is on being as efficient as -possible on all supported Python versions.") + Python's built-in @code{open} function, but can also deal with compressed files. + Supported compression formats are gzip, bzip2 and, xz, and are automatically + recognized by their file extensions. The focus is on being as efficient as + possible on all supported Python versions.") (license license:expat))) (define-public python2-xopen @@ -17592,71 +17591,53 @@ possible on all supported Python versions.") "0ar5dqjnqaw0c17mymd6xgd81jn9br9fblawr0x438v1571bkaya")))) (build-system python-build-system) (arguments - `(#:modules ((guix build utils) - (guix build python-build-system) - (ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26)) - #:phases (modify-phases %standard-phases + `(#:phases (modify-phases %standard-phases (add-after 'unpack 'use-absolute-python (lambda _ (substitute* "Cheetah/CheetahWrapper.py" (("#!/usr/bin/env python") - (string-append "#!" (which "python")))) - #t)) + (string-append "#!" (which "python")))))) (add-after 'unpack 'fix-tests (lambda _ (substitute* "Cheetah/Tests/ImportHooks.py" (("os.path.dirname\\(__file__\\)") - (string-append "'" (getcwd) "/Cheetah/Tests'"))) - #t)) + (string-append "'" (getcwd) "/Cheetah/Tests'"))))) (replace 'check (lambda _ - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append - cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" (getenv "PYTHONPATH"))) - (setenv "PATH" - (string-append (getenv "PATH") - ":" cwd "/bin")) - (setenv "TMPDIR" "/tmp") - - (substitute* "Cheetah/Tests/Test.py" - (("unittest.TextTestRunner\\(\\)") - "unittest.TextTestRunner(verbosity=2)")) - - (invoke "python" "Cheetah/Tests/Test.py"))))))) + (setenv "TMPDIR" "/tmp") + (substitute* "Cheetah/Tests/Test.py" + (("unittest.TextTestRunner\\(\\)") + "unittest.TextTestRunner(verbosity=2)")) + + (invoke "python" "Cheetah/Tests/Test.py")))))) (propagated-inputs `(("python-markdown" ,python-markdown))) ;optional (home-page "https://cheetahtemplate.org/") (synopsis "Template engine") (description "Cheetah is a text-based template engine and Python code -generator. - -Cheetah can be used as a standalone templating utility or referenced as -a library from other Python applications. It has many potential uses, -but web developers looking for a viable alternative to ASP, JSP, PHP and -PSP are expected to be its principle user group. - -Features: -@enumerate -@item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other - text-based format. -@item Cleanly separates content, graphic design, and program code. -@item Blends the power and flexibility of Python with a simple template language - that non-programmers can understand. -@item Gives template writers full access to any Python data structure, module, - function, object, or method in their templates. -@item Makes code reuse easy by providing an object-orientated interface to - templates that is accessible from Python code or other Cheetah templates. - One template can subclass another and selectively reimplement sections of it. -@item Provides a simple, yet powerful, caching mechanism that can dramatically - improve the performance of a dynamic website. -@item Compiles templates into optimized, yet readable, Python code. -@end enumerate") + generator. + + Cheetah can be used as a standalone templating utility or referenced as + a library from other Python applications. It has many potential uses, + but web developers looking for a viable alternative to ASP, JSP, PHP and + PSP are expected to be its principle user group. + + Features: + @enumerate + @item Generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other + text-based format. + @item Cleanly separates content, graphic design, and program code. + @item Blends the power and flexibility of Python with a simple template language + that non-programmers can understand. + @item Gives template writers full access to any Python data structure, module, + function, object, or method in their templates. + @item Makes code reuse easy by providing an object-orientated interface to + templates that is accessible from Python code or other Cheetah templates. + One template can subclass another and selectively reimplement sections of it. + @item Provides a simple, yet powerful, caching mechanism that can dramatically + improve the performance of a dynamic website. + @item Compiles templates into optimized, yet readable, Python code. + @end enumerate") (license (license:x11-style "file://LICENSE")))) (define-public python2-cheetah @@ -17703,7 +17684,7 @@ Features: (home-page "https://www.dulwich.io/") (synopsis "Git implementation in Python") (description "Dulwich is an implementation of the Git file formats and -protocols written in pure Python.") + protocols written in pure Python.") ;; Can be used with either license. (license (list license:asl2.0 license:gpl2+)))) @@ -17724,22 +17705,19 @@ protocols written in pure Python.") (modify-phases %standard-phases (replace 'check (lambda _ - (setenv "PYTHONPATH" - (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) (invoke "python" "test/test_pbkdf2.py")))))) (propagated-inputs `(("python-pycrypto" ,python-pycrypto))) ; optional (home-page "https://www.dlitz.net/software/python-pbkdf2/") (synopsis "Password-based key derivation") (description "This module implements the password-based key derivation -function, PBKDF2, specified in RSA PKCS#5 v2.0. + function, PBKDF2, specified in RSA PKCS#5 v2.0. -PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which -is part of the RSA Public Key Cryptography Standards series. The provided -implementation takes a password or a passphrase and a salt value (and -optionally a iteration count, a digest module, and a MAC module) and provides -a file-like object from which an arbitrarily-sized key can be read.") + PKCS#5 v2.0 Password-Based Key Derivation is a key derivation function which + is part of the RSA Public Key Cryptography Standards series. The provided + implementation takes a password or a passphrase and a salt value (and + optionally a iteration count, a digest module, and a MAC module) and provides + a file-like object from which an arbitrarily-sized key can be read.") (license license:expat))) (define-public python2-pbkdf2 @@ -17766,12 +17744,12 @@ a file-like object from which an arbitrarily-sized key can be read.") (home-page "https://github.com/lincolnloop/python-qrcode") (synopsis "QR Code image generator") (description "This package provides a pure Python QR Code generator -module. It uses the Python Imaging Library (PIL) to allow for the generation -of QR Codes. + module. It uses the Python Imaging Library (PIL) to allow for the generation + of QR Codes. -In addition this package provides a command line tool to generate QR codes and -either write these QR codes to a file or do the output as ascii art at the -console.") + In addition this package provides a command line tool to generate QR codes and + either write these QR codes to a file or do the output as ascii art at the + console.") (license license:bsd-3))) (define-public python2-qrcode @@ -17795,7 +17773,7 @@ console.") (synopsis "Convert RST to ANSI-decorated console output") (description "Python module dedicated to rendering RST (reStructuredText) documents -to ansi-escaped strings suitable for display in a terminal.") + to ansi-escaped strings suitable for display in a terminal.") (license license:expat))) (define-public python-ansi2html @@ -17819,7 +17797,7 @@ to ansi-escaped strings suitable for display in a terminal.") (synopsis "Convert ANSI-decorated console output to HTML") (description "@command{ansi2html} is a Python library and command line utility for -converting text with ANSI color codes to HTML or LaTeX.") + converting text with ANSI color codes to HTML or LaTeX.") (license license:gpl3+))) (define-public python2-ansi2html @@ -17843,10 +17821,10 @@ converting text with ANSI color codes to HTML or LaTeX.") (synopsis "Terminal framework API") (description "Easy ANSI is a terminal framework API to give you an easy way to use -colors, cursor control movements, and line/box drawing. It is not meant as a -replacement to more full-featured frameworks (such as curses or urwid), but as -a tool to quickly create nice-looking screens in your terminal window. You -can even create animations with the cursor controls.") + colors, cursor control movements, and line/box drawing. It is not meant as a + replacement to more full-featured frameworks (such as curses or urwid), but as + a tool to quickly create nice-looking screens in your terminal window. You + can even create animations with the cursor controls.") (license license:expat))) (define-public python-ddt @@ -17869,8 +17847,8 @@ can even create animations with the cursor controls.") (synopsis "Data-Driven Tests") (description "Data-Driven Tests (@dfn{DDT}) allow you to multiply one test case by -running it with different test data, and make it appear as multiple test -cases.") + running it with different test data, and make it appear as multiple test + cases.") (license license:expat))) (define-public python-pycountry @@ -17889,16 +17867,16 @@ cases.") (synopsis "ISO databases for languages, countries, currencies, etc.") (description "@code{pycountry} provides the ISO databases for the standards: -@enumerate -@item 639-3 (Languages) -@item 3166 (Countries) -@item 3166-3 (Deleted Countries) -@item 3166-2 (Subdivisions of countries) -@item 4217 (Currencies) -@item 15924 (Scripts) -@end enumerate -It includes a copy from Debian’s pkg-isocodes and makes the data accessible -through a Python API.") + @enumerate + @item 639-3 (Languages) + @item 3166 (Countries) + @item 3166-3 (Deleted Countries) + @item 3166-2 (Subdivisions of countries) + @item 4217 (Currencies) + @item 15924 (Scripts) + @end enumerate + It includes a copy from Debian’s pkg-isocodes and makes the data accessible + through a Python API.") (license license:lgpl2.1+))) (define-public python2-pycountry @@ -17923,9 +17901,9 @@ through a Python API.") (synopsis "Bindings to picosat (a SAT solver)") (description "This package provides efficient Python bindings to @code{picosat} on -the C level. When importing pycosat, the @code{picosat} solver becomes part -of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability -Problem} (SAT) solver.") + the C level. When importing pycosat, the @code{picosat} solver becomes part + of the Python process itself. @code{picosat} is a @dfn{Boolean Satisfiability + Problem} (SAT) solver.") (license license:expat))) (define-public python2-pycosat @@ -17956,13 +17934,13 @@ Problem} (SAT) solver.") (synopsis "Version of dict that keeps keys in insertion order") (description "This is an implementation of an ordered dictionary with @dfn{Key -Insertion Order} (KIO: updates of values do not affect the position of the -key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is -removed and put at the back). The standard library module @code{OrderedDict}, -implemented later, implements a subset of @code{ordereddict} functionality. -Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted -Order} (KSO, no sorting function can be specified, but a transform can be -specified to apply on the key before comparison (e.g. @code{string.lower})).") + Insertion Order} (KIO: updates of values do not affect the position of the + key), @dfn{Key Value Insertion Order} (KVIO, an existing key's position is + removed and put at the back). The standard library module @code{OrderedDict}, + implemented later, implements a subset of @code{ordereddict} functionality. + Sorted dictionaries are also provided. Currently only with @dfn{Key Sorted + Order} (KSO, no sorting function can be specified, but a transform can be + specified to apply on the key before comparison (e.g. @code{string.lower})).") (license license:expat))) (define-public python-pypeg2 @@ -17984,8 +17962,8 @@ specified to apply on the key before comparison (e.g. @code{string.lower})).") (home-page "https://fdik.org/pyPEG/") (synopsis "Parsing Expression Grammars in Python") (description "PyPEG is an intrinsic parser interpreter framework for -Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can -parse many formal languages.") + Python. It is based on Parsing Expression Grammars, PEG. With pyPEG you can + parse many formal languages.") (license license:gpl2))) (define-public python-incremental @@ -18003,7 +17981,7 @@ parse many formal languages.") (home-page "https://github.com/hawkowl/incremental") (synopsis "Library for versioning Python projects") (description "Incremental is a small library that versions your Python -projects.") + projects.") (license license:expat))) (define-public python2-incremental @@ -18013,39 +17991,50 @@ projects.") (package (name "python-invoke") (home-page "https://www.pyinvoke.org/") - (version "1.5.0") + (version "1.6.0") (source (origin (method url-fetch) (uri (pypi-uri "invoke" version)) (sha256 (base32 - "0l16v7zcbgi36z6pvmdrs5q4ks8lalcafi5d9nhrpcjzbc3n1igh")))) + "1lsql9daabfr31c7syva5myc5bka45k57ygs9fliv63qrwp1wk9p")))) (build-system python-build-system) (arguments ;; XXX: Requires many dependencies that are not yet in Guix. `(#:tests? #f #:phases (modify-phases %standard-phases + (add-after 'unpack 'delete-python2-code + (lambda _ + (delete-file-recursively "invoke/vendor/yaml2"))) (add-after 'unpack 'fix-bash-path (lambda* (#:key inputs #:allow-other-keys) (let ((bash (assoc-ref inputs "bash"))) (substitute* "invoke/config.py" (("shell = \"/bin/bash\"") - (string-append "shell = \"" bash "/bin/bash\"")) - ) - #t)))))) + (string-append "shell = \"" bash "/bin/bash\""))))))))) (inputs `(("bash" ,bash-minimal))) (synopsis "Pythonic task execution") (description "Invoke is a Python task execution tool and library, drawing inspiration -from various sources to arrive at a powerful and clean feature set. It is -evolved from the Fabric project, but focuses on local and abstract concerns -instead of servers and network commands.") + from various sources to arrive at a powerful and clean feature set. It is + evolved from the Fabric project, but focuses on local and abstract concerns + instead of servers and network commands.") (license license:bsd-3))) (define-public python2-invoke - (package-with-python2 python-invoke)) + (let ((parent (package-with-python2 python-invoke))) + (package + (inherit parent) + (arguments + (substitute-keyword-arguments (package-arguments parent) + ((#:phases phases #t) + `(modify-phases ,phases + (delete 'delete-python2-code) + (add-after 'unpack 'delete-python3-code + (lambda _ + (delete-file-recursively "invoke/vendor/yaml3")))))))))) (define-public python-automat (package @@ -18062,7 +18051,15 @@ instead of servers and network commands.") ;; python-twisted depends on python-automat. Twisted is optional, but the ;; tests fail if it is not available. Also see ;; <https://github.com/glyph/automat/issues/71>. - (arguments '(#:tests? #f)) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + ;; Remove script, because it depends on python-twisted. + (add-after 'unpack 'remove-entrypoint + (lambda _ + (substitute* "setup.py" + (("\"automat-visualize = automat._visualize:tool\"") ""))))))) (native-inputs `(("python-m2r" ,python-m2r) ("python-setuptools-scm" ,python-setuptools-scm) @@ -18073,8 +18070,8 @@ instead of servers and network commands.") (home-page "https://github.com/glyph/Automat") (synopsis "Self-service finite-state machines") (description "Automat is a library for concise, idiomatic Python -expression of finite-state automata (particularly deterministic finite-state -transducers).") + expression of finite-state automata (particularly deterministic finite-state + transducers).") (license license:expat))) (define-public python2-automat @@ -18100,7 +18097,7 @@ transducers).") (home-page "https://github.com/miyakogi/m2r") (synopsis "Markdown to reStructuredText converter") (description "M2R converts a markdown file including reST markups to valid -reST format.") + reST format.") (license license:expat))) (define-public python2-m2r @@ -18120,8 +18117,8 @@ reST format.") (home-page "https://github.com/twisted/constantly") (synopsis "Symbolic constants in Python") (description "Constantly is a Python library that provides symbolic -constant support. It includes collections and constants with text, numeric, -and bit flag values.") + constant support. It includes collections and constants with text, numeric, + and bit flag values.") (license license:expat))) (define-public python2-constantly @@ -18139,38 +18136,22 @@ and bit flag values.") "1yzmwi5d197p0qhl7rl4xi9q1w8mk9i3zn6hrl22knbcrb1slspg")))) (build-system python-build-system) (arguments - `(#:modules ((guix build utils) - (guix build python-build-system) - (ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26)) - #:phases - (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append - cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" - (getenv "PYTHONPATH"))) - (invoke "python" "-m" "pytest")))))))) + `(#:phases (modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "pytest"))))))) (native-inputs `(("python-coverage" ,python-coverage) ("python-hypothesis" ,python-hypothesis) ("python-pympler" ,python-pympler) ("python-pytest" ,python-pytest) - ("python-six" ,python-six) - ("python-sphinx" ,python-sphinx) - ("python-zope-interface" ,python-zope-interface))) + ("python-six" ,python-six))) (home-page "https://github.com/python-attrs/attrs/") (synopsis "Attributes without boilerplate") (description "@code{attrs} is a Python package with class decorators that -ease the chores of implementing the most common attribute-related object -protocols.") + ease the chores of implementing the most common attribute-related object + protocols.") (license license:expat))) (define-public python2-attrs @@ -18180,13 +18161,6 @@ protocols.") (package (inherit python-attrs) (name "python-attrs-bootstrap") - (version "19.3.0") - (source (origin - (method url-fetch) - (uri (pypi-uri "attrs" version)) - (sha256 - (base32 - "0wky4h28n7xnr6xv69p9z6kv8bzn50d10c3drmd9ds8gawbcxdzp")))) (native-inputs `()) (arguments `(#:tests? #f)))) @@ -18219,8 +18193,8 @@ protocols.") (home-page "https://liw.fi/cliapp/") (synopsis "Python framework for command line programs") (description "@code{cliapp} is a Python framework for command line -programs. It contains the typical stuff such programs need to do, such -as parsing the command line for options, and iterating over input files.") + programs. It contains the typical stuff such programs need to do, such + as parsing the command line for options, and iterating over input files.") (license license:gpl2+))) (define-public python2-cliapp @@ -18255,11 +18229,11 @@ as parsing the command line for options, and iterating over input files.") (lambda _ (invoke "make" "check")))))) (home-page "https://liw.fi/ttystatus/") (synopsis "Python library for showing progress reporting and -status updates on terminals") + status updates on terminals") (description "@code{ttystatus} is a Python library for showing progress -reporting and status updates on terminals, for command line programs. -Output is automatically adapted to the width of the terminal: truncated -if it does not fit, and resized if the terminal size changes.") + reporting and status updates on terminals, for command line programs. + Output is automatically adapted to the width of the terminal: truncated + if it does not fit, and resized if the terminal size changes.") (license license:gpl3+))) (define-public python2-ttystatus @@ -18284,51 +18258,45 @@ if it does not fit, and resized if the terminal size changes.") (home-page "https://liw.fi/tracing/") (synopsis "Python debug logging helper") (description "@code{python2-tracing} is a python library for -logging debug messages. It provides a way to turn debugging messages -on and off, based on the filename they occur in. It is much faster -than using @code{logging.Filter} to accomplish the same thing, which -matters when code is run in production mode. The actual logging still -happens using the @code{logging} library.") + logging debug messages. It provides a way to turn debugging messages + on and off, based on the filename they occur in. It is much faster + than using @code{logging.Filter} to accomplish the same thing, which + matters when code is run in production mode. The actual logging still + happens using the @code{logging} library.") (license license:gpl3+))) (define-public python-astroid (package (name "python-astroid") - (version "2.4.2") + (version "2.6.6") (source (origin - (method url-fetch) - (uri (pypi-uri "astroid" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/PyCQA/astroid") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Check to see if the version pinning has been removed. - (substitute* "astroid/__pkginfo__.py" - (("==1\\.4\\.\\*") ">=1.4.0")) - #t)))) + (base32 "1amzf996inwmh4r3mlpzmch60xs6lrg86vppfnwl1y0l8r0y7zxh")))) (build-system python-build-system) (propagated-inputs `(("python-lazy-object-proxy" ,python-lazy-object-proxy) - ("python-six" ,python-six) ("python-wrapt" ,python-wrapt))) (native-inputs - `(("python-dateutil" ,python-dateutil) - ("python-pytest" ,python-pytest) + `(("python-pytest" ,python-pytest) ("python-pytest-runner" ,python-pytest-runner))) (home-page "https://github.com/PyCQA/astroid") (synopsis "Common base representation of python source code for pylint and -other projects") + other projects") (description "@code{python-astroid} provides a common base representation -of python source code for projects such as pychecker, pyreverse, pylint, etc. - -It provides a compatible representation which comes from the _ast module. It -rebuilds the tree generated by the builtin _ast module by recursively walking -down the AST and building an extended ast. The new node classes have -additional methods and attributes for different usages. They include some -support for static inference and local name scopes. Furthermore, astroid -builds partial trees by inspecting living objects.") + of python source code for projects such as pychecker, pyreverse, pylint, etc. + + It provides a compatible representation which comes from the _ast module. It + rebuilds the tree generated by the builtin _ast module by recursively walking + down the AST and building an extended ast. The new node classes have + additional methods and attributes for different usages. They include some + support for static inference and local name scopes. Furthermore, astroid + builds partial trees by inspecting living objects.") (license license:lgpl2.1+) (properties `((python2-variant . ,(delay python2-astroid)))))) @@ -18346,26 +18314,27 @@ builds partial trees by inspecting living objects.") (base32 "0fir4b67sm7shcacah9n61pvq313m523jb4q80sycrh3p8nmi6zw")))) (arguments - (substitute-keyword-arguments (package-arguments base) - ((#:phases phases) - `(modify-phases ,phases - (add-after 'unpack 'remove-spurious-test - (lambda _ - ;; https://github.com/PyCQA/astroid/issues/276 - (delete-file "astroid/tests/unittest_brain.py") - #t)) - (replace 'check - (lambda _ - (invoke"python" "-m" "unittest" "discover" - "-p" "unittest*.py"))))))) + `(#:python ,python-2 + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'remove-spurious-test + (lambda _ + ;; https://github.com/PyCQA/astroid/issues/276 + (delete-file "astroid/tests/unittest_brain.py"))) + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "python" "-m" "unittest" "discover" + "-p" "unittest*.py"))))))) (native-inputs `()) (propagated-inputs - `(("python2-backports-functools-lru-cache" - ,python2-backports-functools-lru-cache) - ("python2-enum34" ,python2-enum34) - ("python2-singledispatch" ,python2-singledispatch) - ,@(alist-delete "python-typed-ast" - (package-propagated-inputs base))))))) + `(("python2-backports-functools-lru-cache" + ,python2-backports-functools-lru-cache) + ("python2-enum34" ,python2-enum34) + ("python2-lazy-object-proxy" ,python2-lazy-object-proxy) + ("python2-singledispatch" ,python2-singledispatch) + ("python2-six" ,python2-six) + ("python2-wrapt" ,python2-wrapt)))))) (define-public python-isbnlib (package @@ -18383,36 +18352,90 @@ builds partial trees by inspecting living objects.") (home-page "https://github.com/xlcnd/isbnlib") (synopsis "Python library to work with ISBN strings") (description "@code{python-isbnlib} is a (pure) python library that provides -several useful methods and functions to validate, clean, transform, hyphenate and -get metadata for ISBN strings. Its origin was as the core of isbntools. This short -version, is suitable to be include as a dependency in other projects.") + several useful methods and functions to validate, clean, transform, hyphenate and + get metadata for ISBN strings. Its origin was as the core of isbntools. This short + version, is suitable to be include as a dependency in other projects.") (license license:lgpl3+))) (define-public python-isort (package (name "python-isort") - (version "4.3.4") + (version "5.7.0") (source (origin (method git-fetch) (uri (git-reference - ;; Tests pass only from the Github sources - (url "https://github.com/timothycrosley/isort") - (commit version))) + ;; Tests pass only from the Github sources + (url "https://github.com/timothycrosley/isort") + (commit version))) (file-name (git-file-name name version)) + (modules '((guix build utils))) + (snippet '(for-each delete-file (find-files "." "\\.whl$"))) (sha256 (base32 - "1q0mlrpki5vjbgwxag5rghljjcfg7mvb0pbkwid80p0sqrxlm2p6")))) + "0phq4s911mjjdyr5h5siz93jnpkqb2qgphgcfk6axncgxr8i7vi1")))) (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; A foretaste of what our future python-build-system will need to + ;; do. + (replace 'build + (lambda _ + (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (whl (car (find-files "dist" "\\.whl$")))) + (invoke "pip" "--no-cache-dir" "--no-input" + "install" "--no-deps" "--prefix" out whl)))) + (add-after 'install 'install-example-plugins + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + ;; Patch to use the core poetry API. + (substitute* '("example_isort_formatting_plugin/pyproject.toml" + "example_shared_isort_profile/pyproject.toml") + (("poetry>=0.12") + "poetry-core>=1.0.0") + (("poetry.masonry.api") + "poetry.core.masonry.api")) + ;; Build the example plugins. + (for-each (lambda (source-directory) + (invoke "python" "-m" "build" "--wheel" + "--no-isolation" "--outdir=dist" + source-directory)) + '("example_isort_formatting_plugin" + "example_shared_isort_profile")) + ;; Install them to temporary storage, for the test. + (setenv "HOME" (getcwd)) + (let ((example-whls (find-files "dist" "^example.*\\.whl$"))) + (apply invoke "pip" "--no-cache-dir" "--no-input" + "install" "--user" "--no-deps" example-whls))))) + (replace 'check + (lambda* (#:key tests? inputs outputs #:allow-other-keys) + (when tests? + (let ((bin (string-append (assoc-ref outputs "out") "/bin"))) + (setenv "PATH" (string-append (getenv "PATH") ":" bin))) + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-vv" "tests/unit/" + "--ignore=tests/unit/test_deprecated_finders.py"))))))) (native-inputs - `(("python-mock" ,python-mock) + `(("git" ,git-minimal) + ("python-black" ,python-black) + ("python-colorama" ,python-colorama) + ("python-hypothesmith" ,python-hypothesmith) + ("python-libcst" ,python-libcst-minimal) + ("python-poetry-core" ,python-poetry-core) + ("python-pylama" ,python-pylama) + ("python-pypa-build" ,python-pypa-build) + ("python-pytest-mock" ,python-pytest-mock) ("python-pytest" ,python-pytest))) - (home-page "https://github.com/timothycrosley/isort") + (home-page "https://github.com/PyCQA/isort") (synopsis "Python utility/library to sort python imports") (description "@code{python-isort} is a python utility/library to sort -imports alphabetically, and automatically separated into sections. It -provides a command line utility, a python library and plugins for various -editors.") + imports alphabetically, and automatically separated into sections. It + provides a command line utility, a python library and plugins for various + editors.") (license license:expat) (properties `((python2-variant . ,(delay python2-isort)))))) @@ -18444,7 +18467,7 @@ editors.") (home-page "https://github.com/jaraco/backports.functools_lru_cache") (synopsis "Backport of functools.lru_cache from Python 3.3") (description "@code{python2-backports-functools-lru-cache} is a backport -of @code{functools.lru_cache} from python 3.3.") + of @code{functools.lru_cache} from python 3.3.") (license license:expat))) (define-public python-configparser @@ -18464,8 +18487,8 @@ of @code{functools.lru_cache} from python 3.3.") (home-page "https://github.com/jaraco/configparser/") (synopsis "Backport of configparser from python 3.5") (description "@code{python-configparser} is a backport of -@code{configparser} from Python 3.5 so that it can be used directly -in other versions.") + @code{configparser} from Python 3.5 so that it can be used directly + in other versions.") (license license:expat))) (define-public python2-configparser @@ -18486,14 +18509,14 @@ in other versions.") (home-page "https://github.com/RonnyPfannschmidt/iniconfig") (synopsis "Simple INI-file parser") (description "The @code{iniconfig} package provides a small and simple -INI-file parser module having a unique set of features; @code{iniconfig} -@itemize -@item maintains the order of sections and entries; -@item supports multi-line values with or without line-continuations; -@item supports \"#\" comments everywhere; -@item raises errors with proper line-numbers; -@item raises an error when two sections have the same name. -@end itemize") + INI-file parser module having a unique set of features ; @code{iniconfig} + @itemize + @item maintains the order of sections and entries ; + @item supports multi-line values with or without line-continuations ; + @item supports \"#\" comments everywhere ; + @item raises errors with proper line-numbers ; + @item raises an error when two sections have the same name. + @end itemize") (license license:expat))) (define-public python-mamba @@ -18515,7 +18538,7 @@ INI-file parser module having a unique set of features; @code{iniconfig} (synopsis "Test runner for Python") (description "Mamba is a Behaviour-Driven Development tool for Python developers. -Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.") + Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.") (license license:expat))) (define-public python-mando @@ -18539,7 +18562,7 @@ Is heavily influenced from RSpec, Mocha, Jasmine or Ginkgo.") "Wrapper around argparse, allowing creation of complete CLI applications") (description "This package is a wrapper around argparse, allowing you to write complete CLI -applications in seconds while maintaining all the flexibility.") + applications in seconds while maintaining all the flexibility.") (license license:expat))) (define-public python2-mando @@ -18563,7 +18586,7 @@ applications in seconds while maintaining all the flexibility.") (synopsis "Python command-line parsing library") (description "This package is mostly for people who want to have @code{argparse} on -older Pythons because it was not part of the standard library back then.") + older Pythons because it was not part of the standard library back then.") (license license:psfl))) (define-public python-mwclient @@ -18622,7 +18645,7 @@ older Pythons because it was not part of the standard library back then.") (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.") + make common patterns shorter and easier.") (license license:bsd-2))) (define-public python-diff-match-patch @@ -18640,7 +18663,7 @@ make common patterns shorter and easier.") (home-page "https://code.google.com/p/google-diff-match-patch") (synopsis "Synchronize plain text") (description "Diff Match and Patch libraries offer robust algorithms to -perform the operations required for synchronizing plain text.") + perform the operations required for synchronizing plain text.") (license license:asl2.0))) (define-public python2-diff-match-patch @@ -18684,13 +18707,13 @@ perform the operations required for synchronizing plain text.") (synopsis "Fast computation of Levenshtein distance and string similarity") (description "The Levenshtein Python C extension module contains functions for fast computation of -@enumerate -@item Levenshtein (edit) distance, and edit operations -@item string similarity -@item approximate median strings, and generally string averaging -@item string sequence and set similarity -@end enumerate -It supports both normal and Unicode strings.") + @enumerate + @item Levenshtein (edit) distance, and edit operations + @item string similarity + @item approximate median strings, and generally string averaging + @item string sequence and set similarity + @end enumerate + It supports both normal and Unicode strings.") (license license:gpl2+))) (define-public python2-levenshtein @@ -18716,12 +18739,12 @@ It supports both normal and Unicode strings.") (synopsis "Directory iteration function") (description "Directory iteration function like os.listdir(), except that instead of -returning a list of bare filenames, it yields DirEntry objects that include -file type and stat information along with the name. Using scandir() increases -the speed of os.walk() by 2-20 times (depending on the platform and file -system) by avoiding unnecessary calls to os.stat() in most cases. + returning a list of bare filenames, it yields DirEntry objects that include + file type and stat information along with the name. Using scandir() increases + the speed of os.walk() by 2-20 times (depending on the platform and file + system) by avoiding unnecessary calls to os.stat() in most cases. -This package is part of the Python standard library since version 3.5.") + This package is part of the Python standard library since version 3.5.") (license license:bsd-3))) (define-public python2-scandir @@ -18744,10 +18767,10 @@ This package is part of the Python standard library since version 3.5.") (synopsis "Python implementations of various stemming algorithms") (description "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins -stemming algorithms for English. These implementations are straightforward and -efficient, unlike some Python versions of the same algorithms available on the -Web. This package is an extraction of the stemming code included in the Whoosh -search engine.") + stemming algorithms for English. These implementations are straightforward and + efficient, unlike some Python versions of the same algorithms available on the + Web. This package is an extraction of the stemming code included in the Whoosh + search engine.") (license license:public-domain))) (define-public python-factory-boy @@ -18771,17 +18794,14 @@ search engine.") (description "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl. -As a fixtures replacement tool, it aims to replace static, hard to maintain -fixtures with easy-to-use factories for complex object. + As a fixtures replacement tool, it aims to replace static, hard to maintain + fixtures with easy-to-use factories for complex object. -Instead of building an exhaustive test setup with every possible combination -of corner cases, factory_boy allows you to use objects customized for the -current test, while only declaring the test-specific fields") + Instead of building an exhaustive test setup with every possible combination + of corner cases, factory_boy allows you to use objects customized for the + current test, while only declaring the test-specific fields") (license license:expat))) -(define-public python2-factory-boy - (package-with-python2 python-factory-boy)) - (define-public python-translate-toolkit (package (name "python-translate-toolkit") @@ -18816,7 +18836,7 @@ current test, while only declaring the test-specific fields") (synopsis "Tools and API for translation and localization engineering") (description "Tools and API for translation and localization engineering. It contains -several utilities, as well as an API for building localization tools.") + several utilities, as well as an API for building localization tools.") (license license:gpl2+))) ;; Required for virtaal, newer versions do not build with python2 @@ -18833,28 +18853,15 @@ several utilities, as well as an API for building localization tools.") (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))))) (define-public python-packaging - (package + (package/inherit python-packaging-bootstrap (name "python-packaging") - (version "20.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "packaging" version)) - ;; XXX: The URL in the patch file is wrong, it should be - ;; <https://github.com/pypa/packaging/pull/256>. - (patches (search-patches "python-packaging-test-arch.patch")) - (sha256 - (base32 - "1y2ip3a4ykkpgnwgn85j6hkspcl0cg3mzms97f40mk57vwqq67gy")))) - (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda* (#:key tests? #:allow-other-keys) (if tests? - (invoke "py.test" "-vv") - (format #t "test suite not run~%")) - #t))))) + (invoke "pytest" "-vv") + (format #t "test suite not run~%"))))))) (native-inputs `(("python-pretend" ,python-pretend) ("python-pytest" ,python-pytest))) @@ -18864,8 +18871,8 @@ several utilities, as well as an API for building localization tools.") (home-page "https://github.com/pypa/packaging") (synopsis "Core utilities for Python packages") (description "Packaging is a Python module for dealing with Python packages. -It offers an interface for working with package versions, names, and dependency -information.") + It offers an interface for working with package versions, names, and dependency + information.") ;; From 'LICENSE': This software is made available under the terms of ;; *either* of the licenses found in LICENSE.APACHE or LICENSE.BSD. ;; Contributions to this software is made under the terms of *both* these @@ -18875,29 +18882,6 @@ information.") (define-public python2-packaging (package-with-python2 python-packaging)) -;; Variants with minimal dependencies, for bootstrapping Pytest. -(define-public python-packaging-bootstrap - (hidden-package - (package/inherit - python-packaging - (name "python-packaging-bootstrap") - (native-inputs '()) - (propagated-inputs - `(("python-pyparsing" ,python-pyparsing))) - (arguments '(#:tests? #f))))) - -(define-public python2-packaging-bootstrap - (hidden-package - (package/inherit - python2-packaging - (name "python2-packaging-bootstrap") - (native-inputs '()) - (propagated-inputs - `(("python-pyparsing" ,python2-pyparsing))) - (arguments - `(#:tests? #f - ,@(package-arguments python2-packaging)))))) - (define-public python-relatorio (package (name "python-relatorio") @@ -18918,13 +18902,10 @@ information.") (home-page "https://relatorio.tryton.org/") (synopsis "Templating library able to output ODT and PDF files") (description "Relatorio is a templating library which provides a way to -easily output ODT, ODS, PNG, SVG and several other kinds of files. Support -for more filetypes can be easily added by creating plugins for them.") + easily output ODT, ODS, PNG, SVG and several other kinds of files. Support + for more filetypes can be easily added by creating plugins for them.") (license license:gpl3+))) -(define-public python2-relatorio - (package-with-python2 python-relatorio)) - (define-public python-radon (package (name "python-radon") @@ -18939,6 +18920,13 @@ for more filetypes can be easily added by creating plugins for them.") (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "setup.py" + ((".*'future'.*") + "") + (("colorama==0.4.1") + "colorama>=0.4.1")))) (replace 'check (lambda _ (invoke "python" "radon/tests/run.py")))))) @@ -18952,13 +18940,13 @@ for more filetypes can be easily added by creating plugins for them.") (home-page "https://radon.readthedocs.org/") (synopsis "Code Metrics in Python") (description "Radon is a Python tool which computes various code metrics. -Supported metrics are: -@itemize @bullet -@item raw metrics: SLOC, comment lines, blank lines, &c. -@item Cyclomatic Complexity (i.e. McCabe’s Complexity) -@item Halstead metrics (all of them) -@item the Maintainability Index (a Visual Studio metric) -@end itemize") + Supported metrics are: + @itemize @bullet + @item raw metrics: SLOC, comment lines, blank lines, &c. + @item Cyclomatic Complexity (i.e. McCabe’s Complexity) + @item Halstead metrics (all of them) + @item the Maintainability Index (a Visual Studio metric) + @end itemize") (properties `((python2-variant . ,(delay python2-radon)))) (license license:expat))) @@ -18991,7 +18979,7 @@ Supported metrics are: (synopsis "Automated testing library in python for python") (description "Sure is a python library that leverages a DSL for writing assertions. -Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.") + Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.") (license license:gpl3+))) (define-public python2-sure @@ -19018,7 +19006,7 @@ Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}.") "ANSI terminal tool for python, colored shell and other handy fancy features") (description "@code{Couleur} provides python programs a way to use the ANSI features in a unix -terminal such as coloured output in the shell, overwriting output, indentation, etc.") + terminal such as coloured output in the shell, overwriting output, indentation, etc.") ;; README.md says ASL2.0, but all source code headers are LGPL3+. ;; https://github.com/gabrielfalcao/couleur/issues/11 (license license:lgpl3+))) @@ -19048,8 +19036,8 @@ terminal such as coloured output in the shell, overwriting output, indentation, (synopsis "Python binding for Hoedown") (description "@code{Misaka} is a CFFI-based binding for @code{Hoedown}, a fast markdown processing -library written in C. It features a fast HTML renderer and functionality to make custom -renderers (e.g. man pages or LaTeX).") + library written in C. It features a fast HTML renderer and functionality to make custom + renderers (e.g. man pages or LaTeX).") (license license:expat))) (define-public python2-misaka @@ -19089,9 +19077,9 @@ renderers (e.g. man pages or LaTeX).") (synopsis "Markdown-based test runner for python") (description "@code{Steadymark} allows documentation to be written in github-flavoured -markdown. The documentation may contain snippets of code surrounded by python -code blocks and @code{Steadymark} will find these snippets and run them, making -sure that there are no old malfunctional examples in the documentation examples.") + markdown. The documentation may contain snippets of code surrounded by python + code blocks and @code{Steadymark} will find these snippets and run them, making + sure that there are no old malfunctional examples in the documentation examples.") (license license:expat))) (define-public python-jsonpointer @@ -19109,7 +19097,7 @@ sure that there are no old malfunctional examples in the documentation examples. (home-page "https://github.com/stefankoegl/python-json-pointer") (synopsis "Identify specific nodes in a JSON document") (description "@code{jsonpointer} allows you to access specific nodes -by path in a JSON document (see RFC 6901).") + by path in a JSON document (see RFC 6901).") (license license:bsd-3))) (define-public python2-jsonpointer @@ -19136,7 +19124,7 @@ by path in a JSON document (see RFC 6901).") (home-page "https://github.com/stefankoegl/python-json-patch") (synopsis "Applying JSON Patches in Python 2.6+ and 3.x") (description "@code{jsonpatch} is a library and program that allows -applying JSON Patches according to RFC 6902.") + applying JSON Patches according to RFC 6902.") (license license:bsd-3))) (define-public python2-jsonpatch @@ -19172,31 +19160,19 @@ applying JSON Patches according to RFC 6902.") "17dvx15m3r49bmif5zlli8kzjd6bys6psixzbp14sd5367d9h8qi")))) (build-system python-build-system) (arguments - `(#:modules ((guix build utils) - (guix build python-build-system) - (ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26)) - #:phases + `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-v"))))))) + (invoke "pytest" "-v")))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://rfc3986.readthedocs.io/") (synopsis "Parse and validate URI references") (description "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including -validation and authority parsing. This module also supports RFC@tie{}6874 -which adds support for zone identifiers to IPv6 addresses.") + validation and authority parsing. This module also supports RFC@tie{}6874 + which adds support for zone identifiers to IPv6 addresses.") (license license:asl2.0))) (define-public python2-rfc3986 @@ -19217,7 +19193,7 @@ which adds support for zone identifiers to IPv6 addresses.") (home-page "https://pypi.org/project/rfc3987/") (synopsis "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)") (description "@code{rfc3987} provides routines for parsing and -validation of URIs (see RFC 3986) and IRIs (see RFC 3987).") + validation of URIs (see RFC 3986) and IRIs (see RFC 3987).") (license license:gpl3+))) (define-public python2-rfc3987 @@ -19255,8 +19231,8 @@ validation of URIs (see RFC 3986) and IRIs (see RFC 3987).") (synopsis "Python implementation of RFC 6555") (description "Python implementation of the Happy Eyeballs Algorithm described in RFC -6555. Provided with a single file and dead-simple API to allow easy vendoring -and integration into other projects.") + 6555. Provided with a single file and dead-simple API to allow easy vendoring + and integration into other projects.") (license license:asl2.0)))) (define-public python-bagit @@ -19278,8 +19254,8 @@ and integration into other projects.") (home-page "https://libraryofcongress.github.io/bagit-python/") (synopsis "Create and validate BagIt packages") (description "Bagit is a Python library and command line utility for working -with BagIt style packages. BagIt is a minimalist packaging format for digital -preservation.") + with BagIt style packages. BagIt is a minimalist packaging format for digital + preservation.") (license license:cc0))) (define-public python-prov @@ -19307,7 +19283,7 @@ preservation.") "W3C Provenance Data Model supporting PROV-JSON, PROV-XML and PROV-O (RDF)") (description "This package provides a library for W3C Provenance Data Model supporting -PROV-O (RDF), PROV-XML, PROV-JSON import/export.") + PROV-O (RDF), PROV-XML, PROV-JSON import/export.") (license license:expat))) (define-public python-arcp @@ -19329,17 +19305,17 @@ PROV-O (RDF), PROV-XML, PROV-JSON import/export.") "Archive and Package URI parser and generator") (description "@acronym{arcp, Archive and Package} provides functions for creating -@code{arcp_} URIs, which can be used for identifying or parsing hypermedia files -packaged in an archive or package, like a ZIP file. arcp URIs can be used to -consume or reference hypermedia resources bundled inside a file archive or an -application package, as well as to resolve URIs for archive resources within a -programmatic framework. This URI scheme provides mechanisms to generate a -unique base URI to represent the root of the archive, so that relative URI -references in a bundled resource can be resolved within the archive without -having to extract the archive content on the local file system. An arcp URI can -be used for purposes of isolation (e.g. when consuming multiple archives), -security constraints (avoiding \"climb out\" from the archive), or for -externally identiyfing sub-resources referenced by hypermedia formats.") + @code{arcp_} URIs, which can be used for identifying or parsing hypermedia files + packaged in an archive or package, like a ZIP file. arcp URIs can be used to + consume or reference hypermedia resources bundled inside a file archive or an + application package, as well as to resolve URIs for archive resources within a + programmatic framework. This URI scheme provides mechanisms to generate a + unique base URI to represent the root of the archive, so that relative URI + references in a bundled resource can be resolved within the archive without + having to extract the archive content on the local file system. An arcp URI can + be used for purposes of isolation (e.g. when consuming multiple archives), + security constraints (avoiding \"climb out\" from the archive), or for + externally identiyfing sub-resources referenced by hypermedia formats.") (license license:asl2.0))) (define-public python-shellescape @@ -19373,9 +19349,9 @@ externally identiyfing sub-resources referenced by hypermedia formats.") "Shell escape a string to safely use it as a token in a shell command") (description "The shellescape Python module defines the @code{shellescape.quote()} -function that returns a shell-escaped version of a Python string. This is a -backport of the @code{shlex.quote()} function from Python 3.8 that makes it -accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.") + function that returns a shell-escaped version of a Python string. This is a + backport of the @code{shlex.quote()} function from Python 3.8 that makes it + accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.") (license license:expat))) (define-public python-validators @@ -19405,14 +19381,11 @@ accessible to users of Python 3 versions < 3.3 and all Python 2.x versions.") (synopsis "Data validation library") (description "This package contains validators for different things such as email -addresses, IP addresses, URLs, hashes and more. It has been designed to -be easy to use and not require defining a schema or form just to validate -some input.") + addresses, IP addresses, URLs, hashes and more. It has been designed to + be easy to use and not require defining a schema or form just to validate + some input.") (license license:expat))) -(define-public python2-validators - (package-with-python2 python-validators)) - (define-public python-validate-email (package (name "python-validate-email") @@ -19428,7 +19401,7 @@ some input.") (home-page "https://github.com/syrusakbary/validate_email") (synopsis "Verifies if an email address is valid and really exists") (description "@code{validate_email} can be used to verify if an email -address is valid and really exists.") + address is valid and really exists.") (license license:lgpl3+))) (define-public python2-validate-email @@ -19483,9 +19456,9 @@ address is valid and really exists.") ("python-pytz" ,python-pytz))) (home-page "https://github.com/marshmallow-code/marshmallow") (synopsis "Convert complex datatypes to and from native -Python datatypes") + Python datatypes") (description "@code{marshmallow} provides a library for converting -complex datatypes to and from native Python datatypes.") + complex datatypes to and from native Python datatypes.") (license license:expat))) (define-public python-marshmallow-3.2 @@ -19525,8 +19498,8 @@ complex datatypes to and from native Python datatypes.") (synopsis "JSON:API 1.0 formatting with Marshmallow") (description "The marshmallow-jsonapi package provides a simple way to produce -@uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework. -It includes optional utilities to integrate with Flask.") + @uref{https://jsonapi.org, JSON:API}-compliant data in any Python Web framework. + It includes optional utilities to integrate with Flask.") (license license:expat))) (define-public python-apispec @@ -19543,19 +19516,13 @@ It includes optional utilities to integrate with Flask.") (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-after 'unpack 'disable-prance-tests - (lambda _ - ;; Disable validation tests since they require the - ;; optional 'prance' library which is not yet in Guix. - (substitute* "tests/test_ext_marshmallow_openapi.py" - (("def test_openapi_tools_validate.*" all) - (string-append "@pytest.mark.xfail\n" all))))) (replace 'check (lambda _ - (setenv "PYTHONPATH" - (string-append "./build/lib:" - (getenv "PYTHONPATH"))) - (invoke "pytest" "-vv")))))) + (invoke "pytest" "-vv" + ;; Disable validation tests since they require + ;; the optional 'prance' library which is not + ;; yet in Guix. + "-k" "not openapi_tools_validate")))))) (propagated-inputs `(("python-pyyaml" ,python-pyyaml))) (native-inputs @@ -19564,8 +19531,8 @@ It includes optional utilities to integrate with Flask.") (home-page "https://github.com/marshmallow-code/apispec") (synopsis "Swagger/OpenAPI specification generator") (description "@code{python-apispec} is a pluggable API specification -generator. It currently supports the OpenAPI specification, formerly known -as Swagger.") + generator. It currently supports the OpenAPI specification, formerly known + as Swagger.") (license license:expat))) (define-public python-flasgger @@ -19590,9 +19557,6 @@ as Swagger.") (substitute* "Makefile" (("flake8 flasgger --ignore=F403") "flake8 flasgger --ignore=E731,F403")) - (setenv "PYTHONPATH" (string-append (getcwd) - ":" - (getenv "PYTHONPATH"))) (invoke "py.test")))))) (propagated-inputs `(("python-flask" ,python-flask) @@ -19612,7 +19576,7 @@ as Swagger.") (home-page "https://github.com/rochacbruno/flasgger/") (synopsis "Extract Swagger specs from your Flask project") (description "@code{python-flasgger} allows extracting Swagger specs -from your Flask project. It is a fork of Flask-Swagger.") + from your Flask project. It is a fork of Flask-Swagger.") (license license:expat))) (define-public python-swagger-spec-validator @@ -19635,7 +19599,7 @@ from your Flask project. It is a fork of Flask-Swagger.") "https://github.com/Yelp/swagger_spec_validator") (synopsis "Validation of Swagger specifications") (description "@code{swagger_spec_validator} provides a library for -validating Swagger API specifications.") + validating Swagger API specifications.") (license license:asl2.0))) (define-public python-apache-libcloud @@ -19664,7 +19628,7 @@ validating Swagger API specifications.") (substitute* "libcloud/test/compute/test_ssh_client.py" (("class ShellOutSSHClientTests") "@unittest.skip(\"Guix container doesn't have ssh service\") -class ShellOutSSHClientTests")) + class ShellOutSSHClientTests")) #t)) (add-before 'check 'copy-secret (lambda _ @@ -19685,7 +19649,7 @@ class ShellOutSSHClientTests")) (home-page "https://libcloud.apache.org/") (synopsis "Unified Cloud API") (description "@code{libcloud} is a Python library for interacting with -many of the popular cloud service providers using a unified API.") + many of the popular cloud service providers using a unified API.") (license license:asl2.0))) (define-public python-smmap @@ -19704,7 +19668,7 @@ many of the popular cloud service providers using a unified API.") (home-page "https://github.com/Byron/smmap") (synopsis "Python sliding window memory map manager") (description "@code{smmap} is a pure Python implementation of a sliding -window memory map manager.") + window memory map manager.") (license license:bsd-3))) (define-public python2-smmap @@ -19728,13 +19692,13 @@ window memory map manager.") (lambda* (#:key inputs outputs #:allow-other-keys) (add-installed-pythonpath inputs outputs) (invoke "python" "-c" - "from regex.test_regex import test_main; test_main()")))))) - (home-page "https://bitbucket.org/mrabarnett/mrab-regex") - (synopsis "Alternative regular expression module") - (description "This regular expression implementation is backwards- + "from regex.test_regex import test_main ; test_main()")))))) + (home-page "https://bitbucket.org/mrabarnett/mrab-regex") + (synopsis "Alternative regular expression module") + (description "This regular expression implementation is backwards- compatible with the standard @code{re} module, but offers additional functionality like full case-folding for case-insensitive matches in Unicode.") - (license license:psfl))) + (license license:psfl))) (define-public python2-regex (package-with-python2 python-regex)) @@ -19970,25 +19934,26 @@ ignoring formatting changes.") (define-public python-tqdm (package (name "python-tqdm") - (version "4.43.0") + (version "4.60.0") (source (origin (method url-fetch) (uri (pypi-uri "tqdm" version)) (sha256 (base32 - "093v4c2x5hpigv47zvyxl8wh10y2yd2gvz3l9vchn0zsp8hv2pzk")))) + "1bjpy4mjg6ryp0ijvqi77vgs76l5hh3zrv3x4vmcwxrlbswvvppb")))) (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases (replace 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - (add-installed-pythonpath inputs outputs) - ;; This invokation is taken from tox.ini. - (invoke "nosetests" "--ignore-files=\"test_perf.py\"" - "-d" "-v" "tqdm/")))))) + (lambda _ + (invoke "pytest" "-vv" "-k" "not perf")))))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-pytest" ,python-pytest) + ("python-pytest-asyncio" ,python-pytest-asyncio) + ("python-pytest-timeout" ,python-pytest-timeout) + ("python-setuptools-scm" ,python-setuptools-scm) + ("python-toml" ,python-toml))) (home-page "https://github.com/tqdm/tqdm") (synopsis "Fast, extensible progress meter") (description @@ -20112,7 +20077,8 @@ lines are read from a single file.") (native-inputs `(("python-pbr" ,python-pbr-minimal))) (propagated-inputs - `(("python-linecache2" ,python-linecache2))) + `(("python-linecache2" ,python-linecache2) + ("python-six" ,python-six))) (home-page "https://github.com/testing-cabal/traceback2") (synopsis "Backports of the traceback module") @@ -20699,9 +20665,8 @@ user's @file{~/Trash} directory.") `(modify-phases ,phases (add-before 'check 'setenv (lambda _ - (setenv "PYTHONPATH" - (string-append (getcwd) ":" (getenv "PYTHONPATH"))) - #t))))))))) + (setenv "GUIX_PYTHONPATH" + (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH")))))))))))) (define-public python-pyfavicon (package @@ -21052,7 +21017,7 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style (define-public python-typed-ast (package (name "python-typed-ast") - (version "1.4.0") + (version "1.4.2") (source (origin (method git-fetch) @@ -21060,28 +21025,15 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style (url "https://github.com/python/typed_ast") (commit version))) (sha256 - (base32 "0l0hz809f7i356kmqkvfsaswiidb98j9hs9rrjnfawzqcbffzgyb")) + (base32 "1wr6pkvvrq6rzjjw88pd5xy8fy06msam4hlxbkglvdmwh4c083l0")) (file-name (git-file-name name version)))) (build-system python-build-system) (arguments - `(#:modules ((guix build utils) - (guix build python-build-system) - (ice-9 ftw) - (srfi srfi-1) - (srfi srfi-26)) - #:phases + `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ - (let ((cwd (getcwd))) - (setenv "PYTHONPATH" - (string-append cwd "/build/" - (find (cut string-prefix? "lib" <>) - (scandir (string-append cwd "/build"))) - ":" - (getenv "PYTHONPATH")))) - (invoke "pytest") - #t))))) + (invoke "pytest")))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://github.com/python/typed_ast") (synopsis "Fork of Python @code{ast} modules with type comment support") @@ -21112,30 +21064,31 @@ based on the CPython 2.7 and 3.7 parsers.") (arguments `(#:phases (modify-phases %standard-phases - (add-before 'check 'disable-failing-tests + ;; Unfortunately, this doesn't seem to be enough to fix these two + ;; tests, but we'll patch this anyway. + (add-after 'unpack 'patch-shell-reference (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)) + (("\"bash\"") (string-append "\"" (which "bash") "\"")) + (("\"/bin/bash\"") (string-append "\"" (which "bash") "\""))))) (replace 'check - (lambda _ - (setenv "PYTHONPATH" - (string-append (getcwd) ":" - (getenv "PYTHONPATH"))) - (invoke "python" "-m" "pytest" "tests/") - #t))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (setenv "HOME" "/tmp") ; some tests need it + + ;; This is for completion tests + (with-output-to-file "/tmp/.bashrc" (lambda _ (display "# dummy"))) + + (setenv "GUIX_PYTHONPATH" + (string-append (getcwd) ":" + (getenv "GUIX_PYTHONPATH"))) + (let ((disabled-tests (list "test_show_completion" + "test_install_completion"))) + (invoke "python" "-m" "pytest" "tests/" + "-k" + (string-append "not " + (string-join disabled-tests + " and not ")))))))))) (propagated-inputs `(("python-click" ,python-click))) (native-inputs @@ -21215,13 +21168,13 @@ Included are implementations of: (define-public bpython (package (name "bpython") - (version "0.20.1") + (version "0.21") (source (origin (method url-fetch) (uri (pypi-uri "bpython" version)) (sha256 - (base32 "00vmkkc79mlnkyvwww1cr7bpwmf4p61704dhayz6kd0kc203hxvf")))) + (base32 "11wlf12nm6ggn9512y4yqs26s8gdgpx0h9ls94k7fsjgjy4rpal8")))) (build-system python-build-system) (arguments `(#:phases @@ -21247,14 +21200,17 @@ Included are implementations of: ("python-curtsies" ,python-curtsies) ("python-greenlet" ,python-greenlet) ("python-six" ,python-six) - ("python-wcwidth" ,python-wcwidth) + ("python-cwcwidth" ,python-cwcwidth) + ("python-pyxdg" ,python-pyxdg) ;; optional dependencies ("python-urwid" ,python-urwid) ; for bpython-urwid only ("python-watchdog" ,python-watchdog) ("python-jedi" ,python-jedi))) (native-inputs `(("python-sphinx" ,python-sphinx) - ("python-mock" ,python-mock))) + ("python-mock" ,python-mock) + ("python-tox" ,python-tox) + ("python-wheel" ,python-wheel))) (home-page "https://bpython-interpreter.org/") (synopsis "Fancy interface to the Python interpreter") (description "Bpython is a fancy interface to the Python @@ -21744,6 +21700,25 @@ 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 python-build-system) + (propagated-inputs (list python-requests)) + (native-inputs (list python-black python-flake8 python-pytest)) + (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") @@ -21787,8 +21762,7 @@ user-space file systems in Python.") (("pytest < 5") "pytest < 7")) ;; We don't care about a coverage report. (substitute* "test/requirements.txt" - (("coverage.*") "coverage\n")) - #t)) + (("coverage.*") "coverage\n")))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? @@ -21796,11 +21770,7 @@ user-space file systems in Python.") (delete-file "test/test_js_client.py") (delete-file "test/test_tsd_types.py") (delete-file "test/test_python_gen.py") - (setenv "PYTHONPATH" - (string-append (getcwd) ":" - (getenv "PYTHONPATH"))) - (invoke "pytest")) - #t))))) + (invoke "pytest"))))))) (propagated-inputs `(("python-ply" ,python-ply) ("python-six" ,python-six))) @@ -21963,9 +21933,12 @@ library to allow local file system access via @code{file://} URLs.") (arguments `(#:phases (modify-phases %standard-phases + ;; system-error "utime" "~A" ("No such file or directory") + (delete 'ensure-no-mtimes-pre-1980) (replace 'check - (lambda _ - (invoke "pytest" "-vv")))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "pytest" "-vv"))))))) (native-inputs `(("python-coverage" ,python-coverage) ("python-pytest" ,python-pytest))) @@ -22199,14 +22172,14 @@ validation testing and application logic.") (define-public python-numba (package (name "python-numba") - (version "0.51.2") + (version "0.54.1") (source (origin (method url-fetch) (uri (pypi-uri "numba" version)) (sha256 (base32 - "0s0777m8kq4l96i88zj78np7283v1n4878qfc1gvzb8l45bmkg8n")))) + "0gzl2hz9azav9mny4mga19096rrnpw5816r1h4iwrvb4r01wipzr")))) (build-system python-build-system) (arguments `(#:phases @@ -22214,17 +22187,23 @@ validation testing and application logic.") (add-after 'unpack 'disable-proprietary-features (lambda _ (setenv "NUMBA_DISABLE_HSA" "1") - (setenv "NUMBA_DISABLE_CUDA" "1") - #t)) + (setenv "NUMBA_DISABLE_CUDA" "1"))) + (add-after 'unpack 'disable-failing-tests + (lambda _ + ;; This one test fails because a deprecation warning is printed. + (substitute* "numba/tests/test_import.py" + (("def test_no_accidental_warnings") + "def disabled_test_no_accidental_warnings")))) (replace 'check - (lambda* (#:key inputs outputs #:allow-other-keys) - (add-installed-pythonpath inputs outputs) - ;; Something is wrong with the PYTHONPATH when running the - ;; tests from the build directory, as it complains about not being - ;; able to import certain modules. - (with-directory-excursion "/tmp" - (setenv "HOME" (getcwd)) - (invoke "python3" "-m" "numba.runtests" "-v" "-m"))))))) + (lambda* (#:key tests? inputs outputs #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + ;; Something is wrong with the PYTHONPATH when running the + ;; tests from the build directory, as it complains about not being + ;; able to import certain modules. + (with-directory-excursion "/tmp" + (setenv "HOME" (getcwd)) + (invoke "python3" "-m" "numba.runtests" "-v" "-m")))))))) (propagated-inputs `(("python-llvmlite" ,python-llvmlite) ("python-numpy" ,python-numpy) @@ -22542,14 +22521,17 @@ functions, and dictionaries.") (define-public python-cytoolz (package (name "python-cytoolz") - (version "0.9.0.1") + (version "0.11.2") (source (origin (method url-fetch) (uri (pypi-uri "cytoolz" version)) (sha256 (base32 - "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44")))) + "1d12mgaippxxhn24w2hj0my3aqkx80fks5g4wzfdsvl0acqnc8za")) + (modules '((guix build utils))) + (snippet + '(for-each delete-file (find-files "cytoolz" "\\.c$"))))) (build-system python-build-system) ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute ;; 'exceptions'" @@ -22566,6 +22548,22 @@ main differences are that @code{cytoolz} is faster and cytoolz offers a C API that is accessible to other projects developed in Cython.") (license license:bsd-3))) +;; python-cooler doesn't work with 0.11 yet +(define-public python-cytoolz-for-cooler + (package + (inherit python-cytoolz) + (version "0.10.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cytoolz" version)) + (sha256 + (base32 + "0p4a9nadsy1337gy2cnb5yanbn03j3zm6d9adyqad9bk3nlbpxc2")) + (modules '((guix build utils))) + (snippet + '(for-each delete-file (find-files "cytoolz" "\\.c$"))))))) + (define-public python-sortedcollections (package (name "python-sortedcollections") @@ -22656,13 +22654,6 @@ data.") (arguments '(#:phases (modify-phases %standard-phases - (add-before 'check 'do-not-override-PYTHONPATH - (lambda _ - ;; Append to PYTHONPATH instead of overriding it so - ;; that dependencies from Guix can be found. - (substitute* "tests/testutils.py" - (("env\\['PYTHONPATH'\\] = pythonpath") - "env['PYTHONPATH'] += os.pathsep + pythonpath")))) (replace 'check (lambda* (#:key tests? #:allow-other-keys) (if tests? @@ -22812,26 +22803,23 @@ decisions with any given backend.") (define-public python-dask (package (name "python-dask") - (version "2021.9.1") + (version "2021.11.2") (source (origin - (method url-fetch) - (uri (pypi-uri "dask" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/dask/dask/") + (commit "5a8275dd53193b47457cdfadc0e2356ea3eb6ccd"))) + (file-name (git-file-name name version)) (sha256 - (base32 "0p6nd8wi30l29g5hdwk0453w6fxg4zvxq1y1ix0fa2f8rbr2n7z1")))) + (base32 "0h8w7c03mn6s2mmwbqd2sqay3k4vaqiwlsbvliziggw28042zfw2")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'disable-broken-tests - (lambda _ - ;; This test is marked as xfail when pytest-xdist is used. - (substitute* "dask/tests/test_threaded.py" - (("def test_interrupt\\(\\)" m) - (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n" - m))))) (replace 'check - (lambda _ (invoke "pytest" "-vv")))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? (invoke "pytest" "-vv"))))))) (propagated-inputs `(("python-cloudpickle" ,python-cloudpickle) ("python-fsspec" ,python-fsspec) @@ -22843,7 +22831,8 @@ decisions with any given backend.") ("python-pyyaml" ,python-pyyaml))) (native-inputs `(("python-pytest" ,python-pytest) - ("python-pytest-runner" ,python-pytest-runner))) + ("python-pytest-runner" ,python-pytest-runner) + ("python-pytest-rerunfailures" ,python-pytest-rerunfailures))) (home-page "https://github.com/dask/dask/") (synopsis "Parallel computing with task scheduling") (description @@ -23085,13 +23074,13 @@ distribution.") (define-public python-gast (package (name "python-gast") - (version "0.3.3") + (version "0.5.2") (source (origin (method url-fetch) (uri (pypi-uri "gast" version)) (sha256 - (base32 "0mrvvfzqafj1wzd0xxfmjf4vphnlxypbhpic1m283aj9i8lfz0dq")))) + (base32 "1xv77kzghiqfm4fnvlv0p878ma152dvcfkly3jij89lqigxcw7zq")))) (build-system python-build-system) (propagated-inputs `(("python-astunparse" ,python-astunparse))) @@ -23230,13 +23219,13 @@ project.") (define-public python-trio (package (name "python-trio") - (version "0.17.0") + (version "0.19.0") (source (origin (method url-fetch) (uri (pypi-uri "trio" version)) (sha256 - (base32 "0zcxirpdvvl54pbfkgw7vz984879xwvdygqfpggnam24is2zjp78")))) + (base32 "1qgg4zhca81dxc1nlmcr5pl1bclmvdp3niqbyslwxs65bs732pl9")))) (build-system python-build-system) (arguments `(#:phases @@ -23247,23 +23236,27 @@ project.") (setenv "HOME" "/tmp") #t)) (replace 'check - (lambda _ - (invoke "pytest" "-vv" "-k" - (string-append - ;; This test times out. - "not test_ki_protection_works" - ;; Assertion errors. - " and not test_guest_mode_ki" - " and not test_run_in_trio_thread_ki" - ;; These try to raise KeyboardInterrupt which does not work - ;; in the build environment. - " and not test_ki_self" - " and not test_ki_wakes_us_up" - ;; Failure in name resolution. - " and not test_getnameinfo" - " and not test_SocketType_resolve" - ;; OSError: protocol not found. - " and not test_getprotobyname"))))))) + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "pytest" "-vv" "-k" + (string-append + ;; This test times out. + "not test_ki_protection_works" + ;; Assertion errors. + " and not test_guest_mode_ki" + " and not test_run_in_trio_thread_ki" + " and not test_simple_cancel_scope_usage_doesnt_create_cyclic_garbage" + " and not test_nursery_cancel_doesnt_create_cyclic_garbage" + " and not test_locals_destroyed_promptly_on_cancel" + ;; These try to raise KeyboardInterrupt which does not work + ;; in the build environment. + " and not test_ki_self" + " and not test_ki_wakes_us_up" + ;; Failure in name resolution. + " and not test_getnameinfo" + " and not test_SocketType_resolve" + ;; OSError: protocol not found. + " and not test_getprotobyname")))))))) (native-inputs `(("python-astor" ,python-astor) ("python-ipython" ,python-ipython) @@ -23274,7 +23267,8 @@ project.") ("python-pytest-cov" ,python-pytest-cov) ("python-trustme" ,python-trustme))) (propagated-inputs - `(("python-attrs" ,python-attrs) + `(("python-async-generator" ,python-async-generator) + ("python-attrs" ,python-attrs) ("python-idna" ,python-idna) ("python-outcome" ,python-outcome) ("python-sniffio" ,python-sniffio) @@ -23583,14 +23577,13 @@ compatible).") (define-public python-bsddb3 (package (name "python-bsddb3") - (version "6.2.6") + (version "6.2.9") (source (origin (method url-fetch) (uri (pypi-uri "bsddb3" version)) (sha256 - (base32 - "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2")))) + (base32 "00bqdsfx8jgmfz5bgkx10nlw5bfsw11a86f91zkl53snvk45xl3h")))) (build-system python-build-system) (inputs `(("bdb" ,bdb))) @@ -23777,14 +23770,14 @@ for manual interpretation.") (define-public python-distro (package (name "python-distro") - (version "1.4.0") + (version "1.6.0") (source (origin (method url-fetch) (uri (pypi-uri "distro" version)) (sha256 (base32 - "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n")))) + "09441261dd3c8b2gv15vhw1cryzg60lmgpkk07v6hpwwkyhfbxc3")))) (build-system python-build-system) (native-inputs `(("python-pytest" ,python-pytest))) @@ -23907,28 +23900,33 @@ for YAML and JSON.") (define-public python-dbusmock (package (name "python-dbusmock") - (version "0.18.3") + (version "0.24.1") (source (origin (method url-fetch) (uri (pypi-uri "python-dbusmock" version)) (sha256 (base32 - "0hp2kyac88nh9iv6l8hlmv7s1sa1s5f1a3wc2pmlmmxnd211fjlr")))) + "0kvjwn5sdp3rqcbclvxljkmk988l12dvppzfn3ldy3jxbyyn1mjn")))) (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-after 'unpack 'patch-shell-path - (lambda _ + (add-after 'unpack 'patch-paths + (lambda* (#:key inputs #:allow-other-keys) (substitute* "tests/test_code.py" (("/bin/bash") (which "bash"))) - #t))))) + (substitute* "dbusmock/testcase.py" + (("'dbus-daemon'") + (string-append "'" (assoc-ref inputs "dbus") + "/bin/dbus-daemon'")))))))) (native-inputs `(;; For tests. ("dbus" ,dbus) ; for dbus-daemon ("python-nose" ,python-nose) ("which" ,which))) + (inputs + `(("dbus" ,dbus))) (propagated-inputs `(("python-dbus" ,python-dbus) ("python-pygobject" ,python-pygobject))) @@ -24247,8 +24245,6 @@ essential tools are located.") (modify-phases %standard-phases (replace 'check (lambda _ - (setenv "PYTHONPATH" - (string-append (getcwd) ":" (getenv "PYTHONPATH"))) (invoke "python" "./tests/__main__.py")))))) (propagated-inputs `(("python-dill" ,python-dill) @@ -24271,7 +24267,7 @@ the syntactic logic to configure and launch jobs in an execution environment.") (define-public python-flit (package (name "python-flit") - (version "3.2.0") + (version "3.3.0") ;; We fetch the sources via git because on pypi the package is split into ;; two parts: flit and flit_core; flit_core cannot be built without flit. (source (origin @@ -24282,7 +24278,7 @@ the syntactic logic to configure and launch jobs in an execution environment.") (file-name (git-file-name name version)) (sha256 (base32 - "0fpqxpz5bv2xpv1akmc0c8yfss6sj09wdzxrlf3qw1lp1jhbzpyc")))) + "0mvyymw3zqsnip4x4ca6anr5rbx30hcmpqwrnhjwcm7s8mycd01x")))) (build-system python-build-system) (arguments `(#:phases @@ -24471,50 +24467,6 @@ memoization.") Notation (CSON).") (license license:expat))) -(define-public python-asynctest - (package - (name "python-asynctest") - (version "0.13.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "asynctest" version)) - (sha256 - (base32 - "1b3zsy7p84gag6q8ai2ylyrhx213qdk2h2zb6im3xn0m5n264y62")))) - (build-system python-build-system) - (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - (invoke "python" "-X" "dev" "-m" "unittest" "-v" "test"))) - (add-after 'unpack 'disable-tests - (lambda* _ - ;; XXX: 7 tests fail out of 220. Disable them for now. - (substitute* (list "test/test_selector.py" - "test/test_mock.py") - (("def test_events_watched_outside_test_are_ignored") - "@unittest.skip('disabled by guix') - def test_events_watched_outside_test_are_ignored") - (("def test_awaited_from_autospec_mock.*" line) - (string-append line " return True\n")) - (("def test_create_autospec_on_coroutine_and_using_assert_methods.*" line) - (string-append line " return True\n")) - (("def test_patch_coroutine_with_multiple_scopes.*" line) - (string-append line " return True\n")) - (("def test_multiple_patches_on_coroutine.*" line) - (string-append line " return True\n")) - (("def test_patch_coroutine_only_when_running.*" line) - (string-append line " return True\n"))) - #t))))) - (home-page "https://github.com/Martiusweb/asynctest") - (synopsis "Extension of unittest for testing asyncio libraries") - (description - "The package asynctest is built on top of the standard unittest module -and cuts down boilerplate code when testing libraries for asyncio.") - (license license:asl2.0))) - (define-public python-aionotify (package (name "python-aionotify") @@ -24715,7 +24667,7 @@ but portable.") (define-public python-watchgod (package (name "python-watchgod") - (version "0.6") + (version "0.7") (source (origin ;; There are no tests in the PyPI tarball. @@ -24725,7 +24677,7 @@ but portable.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1lqx44wkryakgpyqj3m0hsz61bqr07vc7smgzh188374hwvscp66")))) + (base32 "1w2xsidwp9n4giqhja0bzw7rwrh01db0kdxf2n54mv3dkx545jpq")))) (build-system python-build-system) (arguments `(#:phases @@ -24736,15 +24688,10 @@ but portable.") (invoke "pytest" "-vv"))))))) (native-inputs `(("python-coverage" ,python-coverage) - ("python-docutils" ,python-docutils) - ("python-flake8" ,python-flake8) - ("python-isort" ,python-isort) - ("python-pycodestyle" ,python-pycodestyle) - ("python-pyflakes" ,python-pyflakes) ("python-pygments" ,python-pygments) ("python-pytest" ,python-pytest) + ("python-pytest-asyncio" ,python-pytest-asyncio) ("python-pytest-cov" ,python-pytest-cov) - ("python-pytest-aiohttp" ,python-pytest-aiohttp) ("python-pytest-mock" ,python-pytest-mock) ("python-pytest-sugar" ,python-pytest-sugar) ("python-pytest-toolbox" ,python-pytest-toolbox))) @@ -24956,7 +24903,10 @@ Python.") (base32 "0v8vg0naa9rywvd31cpq65ljbdclpsrx09788v4xj7lg10np8nk0")))) (build-system python-build-system) (arguments - '(#:tests? #f)) ; TODO: package dependencies required for tests. + ;; TODO: package dependencies required for tests. + '(#:tests? #f + #:phases (modify-phases %standard-phases + (delete 'sanity-check)))) (synopsis "Interface for Open Geospatial Consortium web service") (description "OWSLib is a Python package for client programming with Open Geospatial @@ -25818,8 +25768,7 @@ be necessary when using @code{cmd}.") (modify-phases %standard-phases (add-before 'build 'qualify-libtidy (lambda* (#:key inputs #:allow-other-keys) - (let ((libtidy (string-append (assoc-ref inputs "tidy") - "/lib/libtidy.so"))) + (let ((libtidy (search-input-file inputs "/lib/libtidy.so"))) (substitute* "tidylib/tidy.py" (("ctypes\\.util\\.find_library\\('tidy'\\)") (format #f "'~a'" libtidy))) @@ -26227,9 +26176,8 @@ It adds a simple and readable way to print stuff during development.") (lambda* (#:key inputs #:allow-other-keys) (setenv "TZ" "UTC") (setenv "TZDIR" - (string-append (assoc-ref inputs "tzdata") - "/share/zoneinfo")) - #t))))) + (search-input-directory inputs + "share/zoneinfo"))))))) (home-page "https://github.com/scrapinghub/dateparser") (synopsis "Date parsing library designed to parse dates from HTML pages") @@ -26346,11 +26294,11 @@ By default it uses the open Python vulnerability database Safety DB.") (propagated-inputs `(("wheel" ,python-wheel))) (native-inputs - `(("texlive" ,(texlive-union (list texlive-amsfonts/patched + `(("texlive" ,(texlive-updmap.cfg (list texlive-amsfonts texlive-fonts-ec - texlive-iftex - texlive-latex-hyperref - texlive-latex-oberdiek + texlive-generic-iftex + texlive-hyperref + texlive-oberdiek texlive-lm texlive-xcolor))))) (arguments @@ -26362,8 +26310,6 @@ By default it uses the open Python vulnerability database Safety DB.") (substitute* "tests.py" (("test_basic_conversion_from_http_url") "skip_test_basic_conversion_from_http_url")) - ;; Needed by texlive-union to generate fonts - (setenv "HOME" "/tmp") #t))))) (home-page "https://github.com/bebraw/pypandoc") (synopsis "Python wrapper for pandoc") @@ -26683,10 +26629,16 @@ process.") (inputs `(("libpng" ,libpng) ("libtiff" ,libtiff) - ("python2-wxpython" ,python2-wxpython) ("zlib" ,zlib))) (arguments - `(#:python ,python-2)) + `(#:python ,python-2 + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-wx-support + (lambda _ + (substitute* "setup.py" + (("no_wx = False") + "no_wx = True"))))))) (synopsis "Framework for building document analysis applications") (description "Gamera is a toolkit for building document image recognition systems.") @@ -27144,10 +27096,9 @@ and frame grabber interface.") (lambda* (#:key outputs #:allow-other-keys) (wrap-program (string-append (assoc-ref outputs "out") "/bin/screenkey") - `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))) + `("GUIX_PYTHONPATH" ":" prefix (,(getenv "GUIX_PYTHONPATH"))) `("GI_TYPELIB_PATH" - ":" prefix (,(getenv "GI_TYPELIB_PATH")))) - #t))))) + ":" prefix (,(getenv "GI_TYPELIB_PATH"))))))))) (inputs `(("python-distutils-extra" ,python-distutils-extra) ("python-tokenize-rt" ,python-tokenize-rt) @@ -27162,7 +27113,8 @@ and frame grabber interface.") (synopsis "Screencast tool to display pressed keys") (description - "A screencast tool to display your keys inspired by Screenflick.") + "Screenkey is a screencast tool to display your keys inspired by +Screenflick.") (license license:gpl3+))) (define-public python-jinja2-cli @@ -27542,6 +27494,56 @@ application binary interfaces (ABIs); it takes care of register allocation; it supports x86_64 instructions up to AVX-512 and SHA.") (license license:bsd-2)))) +(define-public python-sgmllib3k + (let ((commit "799964676f35349ca2dd04503e34c2b3ad522c0d") + (revision "1")) + (package + (name "python-sgmllib3k") + (version + (git-version "1.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/hsoft/sgmllib") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0bzf6pv85dzfxfysm6zbj8m40hp0xzr9h8qlk4hp3nmy88rznqvr")))) + (build-system python-build-system) + (home-page "https://github.com/hsoft/sgmllib") + (synopsis "Python 3 port of sgmllib") + (description "This packages provides an unmaintained port of sgmllib to +Python 3. It is used to parse text files formatted in @acronym{SGML,Standard +Generalized Mark-up Language}.") + (license license:bsd-3)))) + +(define-public python-cwcwidth + (package + (name "python-cwcwidth") + (version "0.1.4") + (source + (origin + (method url-fetch) + (uri (pypi-uri "cwcwidth" version)) + (sha256 + (base32 + "1azrphpkcyggg38xvkfb9dpc4xmmm90p02kf8dkqd4d6j5w96aj8")))) + (build-system python-build-system) + (native-inputs + `(("python-cython" ,python-cython) + ("python-pytest" ,python-pytest) + ("python-setuptools-scm" ,python-setuptools-scm) + ("python-toml" ,python-toml) + ("python-wheel" ,python-wheel))) + (home-page + "https://github.com/sebastinas/cwcwidth") + (synopsis "Python bindings for wc(s)width") + (description "This package provides bindings for wcwidth and wcswidth +functions defined in POSIX.1-2001 and POSIX.1-2008.") + (license license:expat))) + (define-public python-pyan3 (package (name "python-pyan3") @@ -27567,8 +27569,8 @@ supports x86_64 instructions up to AVX-512 and SHA.") (lambda* (#:key tests? #:allow-other-keys) (when tests? ;; Extend PYTHONPATH so the built package will be found. - (setenv "PYTHONPATH" - (string-append (getcwd) ":" (getenv "PYTHONPATH"))) + (setenv "GUIX_PYTHONPATH" + (string-append (getcwd) ":" (getenv "GUIX_PYTHONPATH"))) (invoke "pytest"))))))) (native-inputs `(("python-pytest" ,python-pytest) @@ -27853,9 +27855,9 @@ pythonic way.") (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? - (setenv "PYTHONPATH" + (setenv "GUIX_PYTHONPATH" (string-append (getcwd) "/build/lib:" - (getenv "PYTHONPATH"))) + (getenv "GUIX_PYTHONPATH"))) (invoke "pytest"))))))) (native-inputs `(("python-pandas" ,python-pandas) ;; required for test-suite @@ -28243,30 +28245,6 @@ interfaces.") "This package is a Python module for reading Emacs Org mode files.") (license license:bsd-3))) -(define-public python-sgmllib3k - (package - (name "python-sgmllib3k") - (version "1.0.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "sgmllib3k" version)) - (sha256 - (base32 "1s8jm3dgqabgf8x96931scji679qkhvczlv3qld4qxpsicfgns3q")))) - (build-system python-build-system) - ;; Requires a test.html input that is not supplied - (arguments - `(#:tests? #f)) - (home-page "https://pypi.org/project/sgmllib3k/") - ;; Actual homepage seems to be down - ;; (home-page "https://hg.hardcoded.net/sgmllib") - (synopsis "Python 3 port of sgmllib") - (description - "This package provides an unmaintained port of sgmllib to Python 3. -It is used to parse text files formatted in @acronym{SGML,Standard Generalized -Mark-up Language}.") - (license license:bsd-3))) - (define-public dynaconf (package (name "dynaconf") |