diff options
Diffstat (limited to 'gnu/packages/python-xyz.scm')
| -rw-r--r-- | gnu/packages/python-xyz.scm | 2059 |
1 files changed, 1127 insertions, 932 deletions
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index ae954a6157..61e092a72f 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -153,6 +153,7 @@ ;;; Copyright © 2023 Attila Lendvai <attila@lendvai.name> ;;; Copyright © 2023, 2024 Troy Figiel <troy@troyfigiel.com> ;;; Copyright © 2023 Adam Faiz <adam.faiz@disroot.org> +;;; Copyright © 2023 Wiktor Żelazny <wz@freeshell.de> ;;; Copyright © 2024 Timothee Mathieu <timothee.mathieu@inria.fr> ;;; Copyright © 2024 Ian Eure <ian@retrospec.tv> ;;; Copyright © 2024 Adriel Dumas--Jondeau <leirda@disroot.org> @@ -242,6 +243,7 @@ #:use-module (gnu packages inkscape) #:use-module (gnu packages iso-codes) #:use-module (gnu packages java) + #:use-module (gnu packages javascript) #:use-module (gnu packages jupyter) #:use-module (gnu packages kerberos) #:use-module (gnu packages less) @@ -292,7 +294,6 @@ #:use-module (gnu packages tcl) #:use-module (gnu packages tex) #:use-module (gnu packages texinfo) - #:use-module (gnu packages textutils) #:use-module (gnu packages time) #:use-module (gnu packages tls) #:use-module (gnu packages tree-sitter) @@ -732,6 +733,31 @@ fullscreen terminal rendering, and keyboard input event reporting.") "This package allows to detect if the user is using Dark Mode.") (license license:bsd-3))) +(define-public python-decopatch + (package + (name "python-decopatch") + (version "1.4.10") + (source + (origin + (method url-fetch) + (uri (pypi-uri "decopatch" version)) + (sha256 + (base32 "082pnnc7a1d7rk40k7m72w7kw8dk7g8m3yzq4cn1hl217z4ljzwm")))) + (build-system pyproject-build-system) + (arguments + (list #:tests? #f)) ;XXX: cycles with python-pytest-cases + (native-inputs + (list python-setuptools + python-setuptools-scm)) + (propagated-inputs + (list python-makefun)) + (home-page "https://github.com/smarie/python-decopatch") + (synopsis "Create decorators easily in Python") + (description + "This package provide implements a functionality to simplify writing +decorators in Python.") + (license license:bsd-3))) + (define-public python-distance (let ((commit "ad7f9dc7e9b0e88a08d0cefd1442f4ab1dd1779b") (revision "0")) @@ -1346,7 +1372,7 @@ for Python.") (list python-aiofiles python-aiostream python-click - python-easy-ansi + python-easy-ansi-0.3 python-pyte)) (home-page "https://github.com/dankilman/multiplex") (synopsis "Parallel stream of outputs from multiple processes") @@ -1401,6 +1427,60 @@ numbers like forty-second.") of Ordered Set.") (license license:expat))) +(define-public python-pandocfilters + (package + (name "python-pandocfilters") + (version "1.5.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pandocfilters" version)) + (sha256 + (base32 "17lknixjja23jczlv8afgfky94m4gwl7wc36iczw1sz4brallaq0")))) + (build-system pyproject-build-system) + (arguments + (list #:tests? #f)) ;require pandoc to run tests + (native-inputs + (list python-setuptools)) + (home-page "https://github.com/jgm/pandocfilters") + (synopsis "Python module for writing Pandoc filters") + (description "Pandoc is a powerful utility to transform various +input formats into a wide range of output formats. To alter the +exported output document, Pandoc allows the usage of filters, which +are pipes that read a JSON serialization of the Pandoc AST from stdin, +transform it in some way, and write it to stdout. It allows therefore +to alter the processing of Pandoc's supported input formats, for +instance one can add new syntax elements to markdown, etc. + +This package provides Python bindings.") + (license license:bsd-3))) + +(define-public python-panflute + (package + (name "python-panflute") + (version "2.3.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "panflute" version)) + (sha256 + (base32 "07wg5md93jcdkpiqljwr3p1xzvm6nf7vbiay0bp84fgg6hmd06sz")))) + (build-system pyproject-build-system) + (arguments + (list #:tests? #f)) ;require pandoc to run tests + (native-inputs + (list python-setuptools)) + (propagated-inputs + (list python-click + python-pyyaml)) + (home-page "http://scorreia.com/software/panflute/") + (synopsis "Pythonic Pandoc filters") + (description + "Panflute is a Python package that makes Pandoc filters fun to write. +It is a pythonic alternative to John MacFarlane's pandocfilters, from which it +is heavily inspired.") + (license license:bsd-3))) + (define-public python-pastel (package (name "python-pastel") @@ -1437,13 +1517,13 @@ terminal.") (define-public python-pathlib-abc (package (name "python-pathlib-abc") - (version "0.1.1") + (version "0.5.0") (source (origin (method url-fetch) (uri (pypi-uri "pathlib_abc" version)) (sha256 - (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8")))) + (base32 "1hy2rscq3msbpjs17jbhsqjs800kcnv2w1n425yh1ly609a9x726")))) (build-system pyproject-build-system) (native-inputs (list python-pytest python-hatchling)) (home-page "https://github.com/barneygale/pathlib-abc") @@ -1454,6 +1534,19 @@ release of Python; specifically, it provides three ABCs that can be used to implement path classes for non-local filesystems") (license license:psfl))) +;; XXX: It's for python-pathy@0.11.0, remove when no longer required. +(define-public python-pathlib-abc-for-python-pathy + (hidden-package + (package + (inherit python-pathlib-abc) + (version "0.1.1") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pathlib_abc" version)) + (sha256 + (base32 "1gjsj7r331i54kbisy0zz1h9icx1hv6n97jaj5s7f3wvj7fpnkh8"))))))) + (define-public python-pbs-installer (package (name "python-pbs-installer") @@ -3406,18 +3499,70 @@ commits.") (uri (pypi-uri "mkdocs-material" version)) (sha256 - (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3")))) - (build-system python-build-system) + (base32 "0ci9xiasq9nfn09v11m7p49vzazdbgslw7rpzjd6y3hsmn9vljz3")) + (modules '((guix build utils))) + (snippet + ;; TODO There are still bundled assets and minified JS. + #~(delete-file-recursively "material/assets/javascripts/lunr/min")))) + (build-system pyproject-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - ;; Requirement mkdocs-material-extensions - ;; in-turn requires mkdocs-material. This causes - ;; circular dependency, so we remove this requirement. - (add-after 'unpack 'patch-requirements - (lambda _ - (substitute* "requirements.txt" - (("mkdocs-material-extensions.*$") ""))))))) + (list + #:tests? #f ; No tests. + #:phases + #~(let ((symlink-js + (lambda (inputs) + (for-each + (lambda (lang) + (let* ((filename (string-append "lunr." lang ".min.js")) + (file (string-append "share/javascript/" filename))) + (symlink (search-input-file inputs file) filename))) + (list "ar" "da" "de" "es" "fi" "fr" "hu" "it" "ja" "multi" + "nl" "no" "pt" "ro" "ru" "stemmer.support" "sv" "tr" + "vi"))))) + (modify-phases %standard-phases + ;; Requirement mkdocs-material-extensions + ;; in-turn requires mkdocs-material. This causes + ;; circular dependency, so we remove this requirement. + (add-after 'unpack 'patch-requirements + (lambda _ + (substitute* "requirements.txt" + (("mkdocs-material-extensions.*$") + "")))) + (add-after 'ensure-no-mtimes-pre-1980 'inject-javascript-assets + (lambda* (#:key inputs #:allow-other-keys) + (mkdir-p "material/assets/javascripts/min/") + (with-directory-excursion "material/assets/javascripts/min/" + (symlink-js inputs)))) + (add-after 'wrap 'replace-javascript-assets + (lambda* (#:key inputs outputs #:allow-other-keys) + (let* ((site (site-packages inputs outputs)) + (js-assets (string-append site "/material/" + "assets/javascripts"))) + (with-directory-excursion js-assets + (delete-file-recursively "min") + (mkdir-p "min") + (with-directory-excursion "min" + (symlink-js inputs)))))))))) + (native-inputs (list python-setuptools)) + (inputs (list js-lunr-ar + js-lunr-da + js-lunr-de + js-lunr-es + js-lunr-fi + js-lunr-fr + js-lunr-hu + js-lunr-it + js-lunr-ja + js-lunr-nl + js-lunr-no + js-lunr-pt + js-lunr-ro + js-lunr-ru + js-lunr-sv + js-lunr-tr + js-lunr-vi + js-lunr-multi + js-lunr-stemmer-support)) (propagated-inputs (list python-markdown python-mkdocs python-pygments python-pymdown-extensions)) @@ -3717,15 +3862,28 @@ structure or other iterative computation.") (sha256 (base32 "1cnaqnckpcrpc4b8ba18s5ds05w1yfiszcp7ql7pmx0jnrj25qax")))) (build-system pyproject-build-system) - (arguments (list #:tests? #false)) ;there are none + (arguments + (list + #:tests? #false ;there are none + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'relax-shellescape-requirement + (lambda _ + (substitute* "src/__init__.py" + (("import shellescape") + "import shlex") + (("shellescape\\.quote") + "shlex.quote")) + (substitute* "setup.py" + (("\"shellescape\",") + ""))))))) (propagated-inputs (list python-beautifulsoup4 python-emoji-for-gh-md-to-html python-pillow python-requests - python-shellescape python-webcolors)) - (native-inputs (list python-setuptools python-wheel)) + (native-inputs (list python-setuptools)) (home-page "https://github.com/phseiff/github-flavored-markdown-to-html/") (synopsis "Github-flavored Markdown") (description @@ -3920,22 +4078,28 @@ distribute/setuptools setup.py script.") (define-public python-rapidfuzz (package (name "python-rapidfuzz") - (version "3.6.1") + (version "3.14.1") (source (origin - (method url-fetch) - (uri (pypi-uri "rapidfuzz" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/rapidfuzz/RapidFuzz") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "1rrx043zqqql31pcp92k61digibymp3l382gaxr4h8717kp0nrim")))) + (base32 "1kqy9paxri1ih47mwmsxwz7a222sn2si5n8qd7gxhdf1wdrpdrm7")))) (build-system pyproject-build-system) (native-inputs - (list python-packaging + (list cmake-minimal + python-cython python-pytest - python-scikit-build - python-setuptools)) + python-scikit-build-core + rapidfuzz-cpp + taskflow)) (home-page "https://github.com/rapidfuzz/RapidFuzz") (synopsis "Rapid fuzzy string matching") - (description "RapidFuzz is a fast string matching library for Python and + (description + "RapidFuzz is a fast string matching library for Python and C++, which is using the string similarity calculations from FuzzyWuzzy.") (license license:expat))) @@ -7771,16 +7935,8 @@ services or command-line parsing, converted from JSON/YAML (or something else) to Python data-types.") (license license:psfl))) -(define-public python-schema-0.5 - (package (inherit python-schema) - (version "0.5.0") - (source - (origin - (method url-fetch) - (uri (pypi-uri "schema" version)) - (sha256 - (base32 - "10zqvpaky51kgb8nd42bk7jwl8cn2zvayxjpdc1wwmpybj92x67s")))))) +;; It may be removed after 2025-11-29. +(define-deprecated/public-alias python-schema-0.5 python-schema) (define-public python-kitchen (package @@ -12977,27 +13133,6 @@ using the PLY parsing library. It parses C code into an AST and can serve as a front-end for C compilers or analysis tools.") (license license:bsd-3))) -(define-public python2-pycparser - (let ((base (package - (inherit python-pycparser) - (version "2.18") - (source - (origin - (method url-fetch) - (uri (pypi-uri "pycparser" version)) - (sha256 - (base32 - "09mjyw82ibqzl449g7swy8bfxnfpmas0815d2rkdjlcqw81wma4r")))) - ;; FIXME: package-with-python2 needs to be updated to accept - ;; pyproject-build-system packages. - (build-system python-build-system) - (arguments - (cons* #:tests? #f - (strip-keyword-arguments - '(#:test-backend) - (package-arguments python-pycparser))))))) - (package-with-python2 base))) - (define-public python-pywavelets (package (name "python-pywavelets") @@ -15002,16 +15137,6 @@ implementation of D-Bus.") (properties `((python2-variant . ,(delay python2-dbus)))) (license license:expat))) -(define-public python2-dbus - (package/inherit python-dbus - (name "python2-dbus") - (inputs `(("python" ,python-2) - ("libxcrypt" ,libxcrypt) ;required by Python.h - ,@(alist-delete "python" - (package-inputs python-dbus)))) - (arguments - `(#:configure-flags '("PYTHON_VERSION=2"))))) - (define-public python-notify2 (package (name "python-notify2") @@ -17396,57 +17521,6 @@ structures.") (description "GPX file parser and GPS track manipulation library.") (license license:asl2.0))) -(define-public wfetch - (let ((commit "e1cfa37814aebc9eb56ce994ebe877b6a6f9a715") - (revision "2")) - (package - (name "wfetch") - (version (git-version "0.1-pre" revision commit)) - (home-page "https://github.com/Gcat101/Wfetch") - (source - (origin - (method git-fetch) - (uri (git-reference - (url home-page) - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1dmr85plx8zr6s14ym3r32g6crwxghkval5a24ah90ijx4dbn5q5")))) - (build-system pyproject-build-system) - (arguments - (list - #:tests? #f ;no test suite - #:phases - #~(modify-phases %standard-phases - (delete 'build) - (replace 'install - (lambda _ - (let ((bin (string-append #$output "/bin")) - (share (string-append #$output "/share"))) - (mkdir-p share) - (substitute* "wfetch/wfetch.py" - (("os.sep, 'opt', 'wfetch'") - (string-append "'" share "'"))) - ;; The documentation expects the executable to be named - ;; 'wfetch', not 'wfetch.py'. - (rename-file "wfetch/wfetch.py" "wfetch/wfetch") - (install-file "wfetch/wfetch" bin) - (copy-recursively "wfetch/icons" share))))))) - (native-inputs (list python-setuptools)) - (inputs (list python-pyowm python-fire python-termcolor python-requests)) - (synopsis "Command-line tool to display weather info") - (description - "This package provides a tool similar to Neofetch/pfetch, but for -weather: it can display the weather condition, temperature, humidity, etc. - -To use it, you must first run: - -@example -export WEATHER_CLI_API=@var{your OpenWeatherMap API key} -@end example -") - (license license:gpl3+)))) - (define-public python-get-version (package (name "python-get-version") @@ -19849,7 +19923,7 @@ text.") (build-system pyproject-build-system) (arguments (list - ;; tests: 10230 passed, 39 skipped, 73 deselected, 2 xfailed, 4 warnings + ;; tests: 10158 passed, 41 skipped, 143 deselected, 2 xfailed, 4 warnings #:test-flags #~(list "-m" "not network and not requires_docker" ;; Not all of the tests are thread save, see: @@ -19892,7 +19966,55 @@ text.") "test_create_db_cluster" ;; Checksum error "test_upload_file_with_checksum_algorithm" - "test_list_objects_v2_checksum_algo") + "test_list_objects_v2_checksum_algo" + ;; Assertion is not equal + "test_create_describe_update_and_delete_ledger" + "test_s3tables_get_table" + "test_tag_resource_and_list_tags_for_resource" + + ;; XXX: Probably will be resolved in the next + ;; release, as botocore's refresh pace is fast. + ;; + ;; botocore.exceptions.UnknownServiceError: Unknown + ;; service: <...> + "test_create_app_response" + "test_describe_apps" + "test_create_instance" + "test_describe_instances" + "test_ec2_integration" + "test_create_layer_response" + "test_describe_layers" + "test_create_stack_response" + "test_describe_stacks" + "test_robot_application" + "test_create_describe_update_and_delete_ledger" + "test_tag_resource_and_list_tags_for_resource" + ;; botocore.exceptions.ClientError: An error + ;; occurred (404) when calling <...> + "test_create_event_source_mapping" + "test_delete_event_source_mapping" + "test_delete_table_deletes_underlying_table_storage" + "test_event_source_mapping_create_from_cloudformation_json" + "test_event_source_mapping_delete_from_cloudformation_json" + "test_event_source_mapping_delete_stack" + "test_event_source_mapping_update_from_cloudformation_json" + "test_get_event_source_mapping" + "test_get_table" + "test_invoke_fake_function_from_sqs_queue" + "test_list_event_source_mappings" + "test_rename_table" + "test_underlying_table_storage_does_not_support_delete_object" + "test_underlying_table_storage_does_not_support_list_objects" + "test_update_event_source_mapping" + "test_update_table_metadata_location" + "test_write_metadata_to_table" + ;; botocore.exceptions.ParamValidationError: + ;; Parameter validation failed <...> + "test_create_db_proxy" + "test_create_db_proxy_duplicate_name" + "test_create_db_proxy_invalid_subnet" + "test_describe_db_proxies" + "test_list_tags_db_proxy") " and not ") "tests") #:phases @@ -20231,29 +20353,28 @@ browser from Python.") ;; are compatible. (package (name "python-botocore") - (version "1.35.91") + (version "1.40.61") (source (origin (method url-fetch) (uri (pypi-uri "botocore" version)) (sha256 (base32 - "0822q7w802vwngsxkfwjrbs4zc21avs1hsai5i6zy7vhaicrq2vv")))) + "1kajxzrh4nq4hx7rgbam0sffx06d45q7rw2csv69q3q9kgb7lj52")))) (build-system pyproject-build-system) (arguments (list + ;; tests: 4491 passed, 72 skipped #:test-flags #~(list "--numprocesses" (number->string (min (parallel-job-count) 8)) - ;; It struggles to find 'botocore'. - "--ignore" "tests/functional/leak/test_resource_leaks.py" - ;; Tests require networking. - "--ignore" "tests/integration"))) + ;; The full test suite is huge, run some of it's portion. + "--ignore=tests/integration" + "--ignore=tests/functional"))) (native-inputs (list python-jsonschema python-pytest python-pytest-xdist - python-setuptools - python-wheel)) + python-setuptools)) (propagated-inputs (list python-dateutil python-jmespath @@ -20268,29 +20389,29 @@ Amazon Web Services (AWS) API.") (define-public python-boto3 (package (name "python-boto3") - (version "1.35.59") + (version "1.40.61") (source (origin - (method git-fetch) ; no tests in PyPI release + (method git-fetch) (uri (git-reference - (url "https://github.com/boto/boto3") - (commit version))) + (url "https://github.com/boto/boto3") + (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "10bdzdaw7qg2m5n5ivb2zzsdl7wgjmz05xyxajd4cmk629ick95m")))) + (base32 "0rjcs9grnrcak6w4l5plqcbwvknmg1k3q0xzg11kpp0sfiszbdph")))) (build-system pyproject-build-system) (arguments (list + ;; tests: 1415 passed, 17 skipped, 1 warning #:test-flags - #~(list "--numprocesses" (number->string (parallel-job-count)) + #~(list "--numprocesses" (number->string (min 8 (parallel-job-count))) ;; Integration tests are trying to connect to AWS. - "--ignore" "tests/integration"))) + "--ignore=tests/integration"))) (native-inputs (list python-mock python-pytest python-pytest-xdist - python-setuptools - python-wheel)) + python-setuptools)) (propagated-inputs (list python-botocore python-jmespath @@ -21088,49 +21209,6 @@ developed separately, both serve the same purpose: to provide Python bindings for libmagic.") (license license:expat))) -(define-public s3cmd - (package - (name "s3cmd") - (version "2.3.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/s3tools/s3cmd") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0rdgwwmmp8mdxc84bxq6k9a7v7z2qgc3df47djzs2b84gw81dglx")))) - (build-system pyproject-build-system) - (arguments - (list - #:tests? #f ; XXX: Tests require network access. - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'hide-wrapping - (lambda _ - (substitute* "S3/MultiPart.py" - (("sys\\.argv\\[0\\]") - "\"s3cmd\"")) - (substitute* "s3cmd" - (("optparser\\.get_prog_name\\(\\)") - "\"s3cmd\"")))) - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "python" "run-tests.py"))))))) - (native-inputs (list python-setuptools)) - (inputs (list python-dateutil python-magic)) - (home-page "https://s3tools.org/s3cmd") - (synopsis "Command line tool for S3-compatible storage services") - (description - "S3cmd is a command line tool for uploading, retrieving and managing data -in storage services that are compatible with the Amazon Simple Storage -Service (S3) protocol, including S3 itself. It supports rsync-like backup, -GnuPG encryption, and more. It also supports management of Amazon's -CloudFront content delivery network.") - (license license:gpl2+))) - (define-public python-securetar (package (name "python-securetar") @@ -23168,43 +23246,6 @@ pytest-fixtures-style dependency injection.") binary or text.") (license license:bsd-3))) -(define-public binwalk - (package - (name "binwalk") - (version "2.3.4") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/ReFirmLabs/binwalk") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "0cfm1khckq986l0q68kmfyfagc6zmb94hgjjm847fjcil77dnlw6")) - (modules '((guix build utils))) - (snippet - #~(begin - (for-each delete-file - (list "testing/tests/input-vectors/firmware.zip" - "testing/tests/test_firmware_zip.py")))))) - (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'check 'set-home - (lambda _ - (setenv "HOME" "")))))) - (native-inputs - (list python-coverage python-nose)) - (home-page "https://github.com/ReFirmLabs/binwalk") - (synopsis "Firmware analysis tool") - (description "Binwalk is a tool for analyzing, reverse engineering, and - extracting firmware images") - (license license:expat))) - -(define-deprecated-package python-binwalk - binwalk) - (define-public python-bson (package (name "python-bson") @@ -24217,25 +24258,24 @@ creating a tag.") (method url-fetch) (uri (pypi-uri "pbkdf2" version)) (sha256 - (base32 - "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc")))) - (build-system python-build-system) + (base32 "0yb99rl2mbsaamj571s1mf6vgniqh23v98k4632150hjkwv9fqxc")))) + (build-system pyproject-build-system) (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - (invoke "python" "test/test_pbkdf2.py")))))) + (list + #:test-backend #~'custom + #:test-flags #~(list "test/test_pbkdf2.py"))) + (native-inputs (list python-setuptools)) (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. + (description + "This module implements the password-based key derivation 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 python-qrcode @@ -24269,22 +24309,37 @@ console.") (define-public python-rst2ansi (package (name "python-rst2ansi") - (version "0.1.5") + (properties '((commit . "c6f390b45be689a5760060c990e3fe10f502e671") + (revision . "0"))) + (version (git-version "0.1.5" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) (source (origin - (method url-fetch) - (uri (pypi-uri "rst2ansi" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/Snaipe/python-rst-to-ansi") + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0vzy6gd60l79ff750scl0sz48r1laalkl6md6dwzah4dcadgn5qv")))) - (build-system python-build-system) - (propagated-inputs - (list python-docutils)) + (base32 "0vsn1jjhm1hx0q5i954lyhny2yvn619am1di03aypfl0wm1mh7qd")))) + (build-system pyproject-build-system) + (arguments + (list + #:tests? #f ; 2 tests fail with additional line characters + #:phases + #~(modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "cram" "test" "-v"))))))) + (native-inputs (list python-cram python-setuptools)) + (propagated-inputs (list python-docutils)) (home-page "https://github.com/Snaipe/python-rst-to-ansi") (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.") + "Python module dedicated to rendering RST (reStructuredText) documents to +ansi-escaped strings suitable for display in a terminal.") (license license:expat))) (define-public python-ansi2html @@ -24313,7 +24368,7 @@ converting text with ANSI color codes to HTML or LaTeX.") (define-public python-easy-ansi (package (name "python-easy-ansi") - (version "0.3") + (version "2.1") (source (origin (method git-fetch) @@ -24322,40 +24377,68 @@ converting text with ANSI color codes to HTML or LaTeX.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3")))) - (build-system python-build-system) + (base32 "16zk4vyrr3hhb6aijmqchjlz181mgk7mi9zyyjd8i53h9rr00wkx")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'install 'remove-extra + (lambda* (#:key inputs outputs #:allow-other-keys) + (with-directory-excursion (site-packages inputs outputs) + (delete-file-recursively "tests") + (delete-file "setup.py"))))))) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://gitlab.com/joeysbytes/easy-ansi") (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-easy-ansi-0.3 + (package + (inherit python-easy-ansi) + (name "python-easy-ansi") + (version "0.3") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://gitlab.com/joeysbytes/easy-ansi") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0albh55ynzs98qy9pln4qaxw5qhhh3lk09jy9bx19gycrp1c3lc3")))) + (arguments '()))) + (define-public python-pycosat (package (name "python-pycosat") - (version "0.6.3") + (version "0.6.6") (source (origin - (method url-fetch) - (uri (pypi-uri "pycosat" version ".zip")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/ContinuumIO/pycosat") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1vg0f2fwcybpdqv92z0hwdl603n2safh3fqvjjxkksd78r4qg6ac")))) + (base32 "1p62d7fqny4ayr218lshrp35g75ljaxlgza9yr2hm44aqggvmqbw")))) ;; TODO: Unundle picosat. http://fmv.jku.at/picosat/ - (build-system python-build-system) - (native-inputs - (list unzip)) + (build-system pyproject-build-system) + (arguments (list #:test-backend #~'unittest)) + (native-inputs (list unzip python-setuptools)) (home-page "https://github.com/ContinuumIO/pycosat") (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.") + "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.") (license license:expat))) (define-public python-pypeg2 @@ -24639,22 +24722,28 @@ builds partial trees by inspecting living objects.") (define-public python-isbnlib (package (name "python-isbnlib") - (version "3.10.4") + (version "3.10.14") (source (origin - (method url-fetch) - (uri (pypi-uri "isbnlib" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/xlcnd/isbnlib") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0iin0x2xqwyphyyzd0mzrq5v5xm7b6dlbb294k4dywra5qvbrgzm")))) - (build-system python-build-system) - (arguments '(#:tests? #f)) ; No test + (base32 "07vpq8y0mn16489d1pl4zxgczgl1s2ydli4lci7f73z4zv179akp")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags #~(list "-m" "not network"))) + (native-inputs (list python-pytest python-pytest-cov python-setuptools)) (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.") + (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.") (license license:lgpl3+))) (define-public python-isoduration @@ -24809,23 +24898,25 @@ applications in seconds while maintaining all the flexibility.") (define-public python-mwclient (package (name "python-mwclient") - (version "0.10.1") + (version "0.11.0") (source (origin (method git-fetch) - ;; The PyPI version wouldn't contain tests. (uri (git-reference (url "https://github.com/mwclient/mwclient") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "120snnsh9n5svfwkyj1w9jrxf99jnqm0jk282yypd3lpyca1l9hj")))) - (build-system python-build-system) + (base32 "14kg353vzrwh7zks7zsza4hfb2n5vxprh9hnw4rjsimm8509axda")))) + (build-system pyproject-build-system) (propagated-inputs - (list python-requests-oauthlib python-six)) + (list python-requests-oauthlib)) (native-inputs - (list python-mock python-pytest python-pytest-cov - python-pytest-runner python-responses)) + (list python-mock + python-pytest + python-pytest-cov + python-responses + python-setuptools)) (home-page "https://github.com/btongminh/mwclient") (synopsis "MediaWiki API client") (description "This package provides a MediaWiki API client.") @@ -24834,21 +24925,28 @@ applications in seconds while maintaining all the flexibility.") (define-public python-kneed (package (name "python-kneed") - (version "0.7.0") + (version "0.8.5") (source (origin - (method url-fetch) - (uri (pypi-uri "kneed" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/arvkevi/kneed") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "0vkwi0pr7nfkp3c46hnmx0275yx68v96v10rmspv0wis33x6f39l")))) - (build-system python-build-system) - (propagated-inputs - (list python-matplotlib python-numpy python-scipy)) + (base32 "0kcglaql1nqvjv5q62myybznii1n1akln5yacp63rg8xv7l0zad1")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags #~(list "--ignore=tests/test_no_matplotlib.py"))) + (native-inputs (list python-hatchling python-pytest python-pytest-cov)) + (propagated-inputs (list python-matplotlib python-numpy python-scipy)) (home-page "https://github.com/arvkevi/kneed") (synopsis "Knee-point detection in Python") - (description "This package implements the kneedle algorithm. Given a set -of x and y values, kneed will return the knee point of the function. The knee -point is the point of maximum curvature.") + (description + "This package implements the kneedle algorithm. Given a set of x and y +values, kneed will return the knee point of the function. The knee point is +the point of maximum curvature.") (license license:bsd-3))) (define-public python-diff-cover @@ -24959,26 +25057,36 @@ parts of the lines that were modified.") (define-public python-levenshtein (package (name "python-levenshtein") - (version "0.12.2") + (version "0.27.1") (source (origin - (method url-fetch) - (uri (pypi-uri "python-Levenshtein" version)) - (sha256 - (base32 - "1xj60gymwx1jl2ra9razx2wk8nb9cv1i7l8d14qsp8a8s7xra8yw")))) - (build-system python-build-system) - (home-page "https://github.com/ztane/python-Levenshtein") + (method git-fetch) + (uri (git-reference + (url "https://github.com/rapidfuzz/Levenshtein") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1khr1vjmrwakjfdsb22k508h3g8awjp0yb398ca8n1xanwzk4l8h")))) + (build-system pyproject-build-system) + (propagated-inputs (list python-rapidfuzz)) + (native-inputs + (list cmake-minimal + python-cython + python-pytest + python-scikit-build-core + python-setuptools + rapidfuzz-cpp)) + (home-page "https://github.com/rapidfuzz/Levenshtein") (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 python-scandir @@ -25138,41 +25246,40 @@ filetypes can be easily added by creating plugins for them.") (define-public python-radon (package (name "python-radon") - (version "5.1.0") + (version "6.0.1") (source (origin - (method url-fetch) - (uri (pypi-uri "radon" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/rubik/radon") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1vmf56zsf3paa1jadjcjghiv2kxwiismyayq42ggnqpqwm98f7fb")))) - (build-system python-build-system) + (base32 "01n3idnrglgbjgwvvgs7yg9amjda3zs2659sp2zqpllp9gva73y9")))) + (build-system pyproject-build-system) (arguments - `(#:phases (modify-phases %standard-phases - (add-after 'unpack 'relax-requirements - (lambda _ - (substitute* "setup.py" - ((".*'future'.*") - "") - (("mando>=0\\.6,<0\\.7") - "mando>=0.6") - (("colorama==0.4.1") - "colorama>=0.4.1")))) - (replace 'check - (lambda _ - (invoke "python" "radon/tests/run.py")))))) + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* (list "pyproject.toml" "requirements.txt") + (("(mando.*>=0\\.6),<0\\.8" _ mando-lower-bound) + mando-lower-bound))))))) (propagated-inputs (list python-colorama python-mando)) - (native-inputs (list python-pytest python-pytest-mock)) + (native-inputs (list python-poetry-core python-pytest python-pytest-mock + python-setuptools)) (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") + (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") (license license:expat))) (define-public python-rgbxy @@ -25343,39 +25450,31 @@ in pure Python.") ;; The latest commit contains fixes for building with both python3 and python2. (define-public python-rfc6555 - (let ((commit "1a181b432312731f6742a5eb558dae4761d32361") - (revision "1")) - (package - (name "python-rfc6555") - (version (git-version "0.0.0" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/sethmlarson/rfc6555") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1bxl17j9vs69cshcqnlwamr03hnykxqnwz3mdgi6x3s2k4q18npp")))) - (build-system python-build-system) - (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (if tests? - ;; Other tests require network access. - (invoke "pytest" "tests/test_ipv6.py") - #t)))))) - (native-inputs - (list python-pytest)) - (home-page "https://pypi.org/project/rfc6555/") - (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.") - (license license:asl2.0)))) + (package + (name "python-rfc6555") + (version "0.1.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/sethmlarson/rfc6555") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0cynzrs3l6ywmkpcpx9m36604dav64sk3rk1s12hj49qqyx20v1f")))) + (build-system pyproject-build-system) + (arguments + (list + ;; Other tests require network access. + #:test-flags #~(list "tests/test_ipv6.py"))) + (native-inputs (list python-pytest python-setuptools)) + (home-page "https://pypi.org/project/rfc6555/") + (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.") + (license license:asl2.0))) (define-public python-sacn (package @@ -25485,31 +25584,32 @@ in pure Python.") (name "python-arcp") (version "0.2.1") (source - (origin - (method url-fetch) - (uri (pypi-uri "arcp" version)) - (sha256 - (base32 - "1p8mfyjssa6pbn5dp6pyzv9yy6kwm2rz5jn2kjbq5vy9f9wsq5sw")))) - (build-system python-build-system) - (native-inputs - (list python-pytest)) + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/stain/arcp-py") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1wjygci60nmcdrgrhb0vwqmhspzdv3g69x2b92vjxq709ifrpgqp")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://arcp.readthedocs.io/") - (synopsis - "Archive and Package URI parser and generator") + (synopsis "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 @@ -25778,46 +25878,45 @@ web frameworks.") (define-public python-apache-libcloud (package (name "python-apache-libcloud") - (version "3.1.0") + (version "3.8.0") (source (origin (method url-fetch) (uri (pypi-uri "apache-libcloud" version)) (sha256 - (base32 - "1b28j265kvibgxrgxx0gwfm6cmv252c8ph1j2vb0cpms8ph5if5v")))) - (build-system python-build-system) + (base32 "14bc4z246ka0h6kywpxqdfgb2c5y6lfclpx99ki2bhiv285lrgvm")))) + (build-system pyproject-build-system) (arguments - '(#:tests? #f ; XXX: all tests fail requiring additional credentials - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-ssh - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "libcloud/compute/ssh.py" - (("'ssh'") - (string-append "'" (search-input-file inputs "/bin/ssh") - "'"))))) - (add-after 'unpack 'patch-tests - (lambda _ - (substitute* "libcloud/test/compute/test_ssh_client.py" - (("^class ShellOutSSHClientTests") - "@unittest.skip(\"Guix container doesn't have ssh service\") + (list + #:tests? #f ; XXX: all tests fail requiring additional credentials + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'patch-ssh + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "libcloud/compute/ssh.py" + (("'ssh'") + (format #f "~s" (search-input-file inputs "/bin/ssh")))))) + (add-after 'unpack 'patch-tests + (lambda _ + (substitute* "libcloud/test/compute/test_ssh_client.py" + (("^class ShellOutSSHClientTests") + "@unittest.skip(\"Guix container doesn't have ssh service\") class ShellOutSSHClientTests")))) - (add-before 'check 'copy-secret - (lambda _ - (copy-file "libcloud/test/secrets.py-dist" - "libcloud/test/secrets.py")))))) + (add-before 'check 'copy-secret + (lambda _ + (copy-file "libcloud/test/secrets.py-dist" + "libcloud/test/secrets.py")))))) (inputs (list openssh)) (propagated-inputs - (list python-paramiko python-requests)) + (list python-requests)) (native-inputs - (list python-lockfile python-mock python-pytest python-pytest-runner - python-requests-mock)) + (list python-pytest python-requests-mock python-setuptools)) (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.") + (description + "@code{libcloud} is a Python library for interacting with many of the +popular cloud service providers using a unified API.") (license license:asl2.0))) (define-public python-smmap @@ -26762,16 +26861,18 @@ working with iterables.") (define-public python-latexcodec (package (name "python-latexcodec") - (version "2.0.1") + (version "3.0.1") (source (origin - (method url-fetch) - (uri (pypi-uri "latexcodec" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/mcmtroffaes/latexcodec/") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "16pynfnn8y8xp55yp06i721fccv5dlx9ba6k5bzcwq9j6wf5b8ia")))) - (build-system python-build-system) - (propagated-inputs - (list python-six)) + (base32 "0j4hkn161h0hsx3ixs85dqnsaya27ck9c2ri1lv8cayc5a9kqvcp")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://readthedocs.org/projects/latexcodec/") (synopsis "Work with LaTeX code in Python") (description "Lexer and codec to work with LaTeX code in Python.") @@ -26821,29 +26922,24 @@ close matches in Python.") (define-public python-pybtex (package (name "python-pybtex") - (version "0.24.0") + (version "0.25.0") (source (origin - (method url-fetch) - (uri (pypi-uri "pybtex" version)) + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/pybtex/pybtex") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "0ma7sc10hk6caq5zghbk865vrlaynz7x5z630z0facqpnqssx3l1")))) - (build-system python-build-system) - (native-inputs - (list python-pytest)) - (propagated-inputs - (list python-latexcodec python-pyyaml python-six)) - (arguments - (list - #:phases #~(modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "pytest"))))))) + (base32 "12rixrciizlvdxxja7qm6c02yzyslzd0jcv07niaii1ly0dg1fq4")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) + (propagated-inputs (list python-latexcodec python-pyyaml)) (home-page "https://pybtex.org/") (synopsis "BibTeX-compatible bibliography processor") - (description "Pybtex is a BibTeX-compatible bibliography processor written -in Python. You can simply type pybtex instead of bibtex.") + (description + "Pybtex is a BibTeX-compatible bibliography processor written in Python. +You can simply type pybtex instead of bibtex.") (license license:expat))) (define-public python-pybtex-apa-style @@ -26878,77 +26974,78 @@ in Python. You can simply type pybtex instead of bibtex.") (version "1.0.1") (source (origin - (method url-fetch) - (uri (pypi-uri "onetimepass" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/tadeck/onetimepass/") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "09vagxgbq78wvq4xbikmn2hpqqsa2i96kqsmphf7dqynfv0dlsd5")))) - (build-system python-build-system) + (base32 "0wmv62l3r8r4428gdzyj80lhgadfqvj220khz1wnm9alyzg60wkh")))) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; Requires unpackaged timecop. + (native-inputs (list python-setuptools)) (propagated-inputs (list python-six)) (home-page "https://github.com/tadeck/onetimepass/") (synopsis "One-time password library") - (description "Python one-time password library for HMAC-based (HOTP) and -time-based (TOTP) passwords.") + (description + "Python one-time password library for HMAC-based (HOTP) and time-based +(TOTP) passwords.") (license license:expat))) (define-public python-online-judge-api-client (package (name "python-online-judge-api-client") - (version "10.10.1") - ;; Source distributions are not uploaded to PyPI. - ;; https://pypi.org/project/online-judge-api-client/10.10.1/#files - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/online-judge-tools/api-client") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "0yjqhh44va5nawd9rpqcjyf0g7rjlkvn7s90fmwmwjyqvy6lhjiz")) - (patches (search-patches - "python-online-judge-api-client-tests.patch")))) - (build-system python-build-system) + (properties '((commit . "615c345f169e2603e0b907287559a4535fc3c6f9") + (revision . "0"))) + (version (git-version "10.10.1" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/online-judge-tools/api-client") + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "13m3cxv6bd3igj6649149xb27ljmzqzpli6hpfrywvgbm238hbws")) + (patches + (search-patches "python-online-judge-api-client-tests.patch")) + )) + (build-system pyproject-build-system) (arguments - (list #:phases #~(modify-phases %standard-phases - ;; These tests require network connections - (add-after 'unpack 'remove-failing-test - (lambda _ - (for-each delete-file - '("tests/get_contest_atcoder.py" - "tests/get_contest_atcoder_problems.py" - "tests/get_contest_codechef.py" - "tests/get_contest_codeforces.py" - "tests/get_contest_yukicoder.py" - "tests/get_problem_anarchygolf.py" - "tests/get_problem_aoj.py" - "tests/get_problem_atcoder.py" - "tests/get_problem_codechef.py" - "tests/get_problem_codeforces.py" - "tests/get_problem_csacademy.py" - "tests/get_problem_facebook.py" - "tests/get_problem_hackerrank.py" - "tests/get_problem_kattis.py" - "tests/get_problem_library_checker.py" - "tests/get_problem_poj.py" - "tests/get_problem_topcoder.py" - "tests/get_problem_toph.py" - "tests/get_problem_yukicoder.py" - "tests/login_service.py")) #t))))) - (propagated-inputs (list python-appdirs - python-beautifulsoup4 - python-colorlog - python-lxml - python-requests - python-toml - python-jsonschema)) + (list + #:test-flags + #~(list "--ignore-glob=tests/get_contest_*.py" + "--ignore-glob=tests/get_problem_*.py") + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'configure-tests + (lambda* (#:key inputs outputs #:allow-other-keys) + (delete-file-recursively + (string-append (site-packages inputs outputs) + "/tests")) + (call-with-output-file "pytest.ini" + (lambda (port) + (format port "\ +[pytest] +python_files = tests/*.py")))))))) + (native-inputs (list python-pytest python-setuptools)) + (propagated-inputs + (list python-appdirs + python-beautifulsoup4 + python-colorlog + python-lxml + python-requests + python-toml + python-jsonschema)) (home-page "https://github.com/online-judge-tools/api-client") (synopsis "API client for various online judges") (description "This is an API client for various online judges, used as the backend -library of @code{oj} command. You can use the Python -library (@code{onlinejudge} module) and the command-line -interface (@command{oj-api} command) which talks JSON compatible with -jmerle/competitive-companion.") +library of @code{oj} command. You can use the Python library +(@code{onlinejudge} module) and the command-line interface (@command{oj-api} +command) which talks JSON compatible with jmerle/competitive-companion.") (license license:expat))) (define-public online-judge-tools @@ -27164,53 +27261,62 @@ Glob2 currently based on the glob code from Python 3.3.1.") (define-public python-gipc (package (name "python-gipc") - (version "0.6.0") + (version "1.8.0") (source (origin - (method url-fetch) - (uri (pypi-uri "gipc" version ".zip")) + (method git-fetch) + (uri (git-reference + (url "https://github.com/jgehrcke/gipc") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0pd9by719qh882hqs6xpby61sn1x5h98hms5p2p8yqnycrf1s0h2")))) - (build-system python-build-system) + (base32 "18w1fi3gh8i3kl58n6jpixzc2w42znxqhb3lj6hwn1641wq2hyrz")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'adjust-for-pytest-8 + (lambda _ + (substitute* "test/test_gipc.py" + (("def setup") "def setup_method") + (("def teardown") "def teardown_method"))))))) (native-inputs - (list unzip)) + (list python-pytest + python-setuptools)) (propagated-inputs (list python-gevent)) (home-page "https://gehrcke.de/gipc/") (synopsis "Child process management in the context of gevent") - (description "Usage of Python's multiprocessing package in a -gevent-powered application may raise problems. With @code{gipc}, -process-based child processes can safely be created anywhere within a -gevent-powered application.") + (description + "Usage of Python's multiprocessing package in a gevent-powered +application may raise problems. With @code{gipc}, process-based child +processes can safely be created anywhere within a gevent-powered +application.") (license license:expat))) (define-public python-beautifultable (package (name "python-beautifultable") - (version "1.0.0") + (version "1.1.0") (source (origin - (method url-fetch) - (uri (pypi-uri "beautifultable" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/pri22296/beautifultable") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0wwlbifcbpzy3wfv6yzsxncarsngzizmmxbn6cy5gazlcq7h4k5x")))) - (build-system python-build-system) - (propagated-inputs - (list python-wcwidth)) - (arguments - `(#:phases - (modify-phases %standard-phases - (add-after 'unpack 'patch-setup.py - (lambda _ - (substitute* "setup.py" - (("setup\\(") - "setup(\n test_suite=\"test\","))))))) + (base32 "0b6c7dpc45sm3vn65qm00q20sdgpi78xxzwc0rij7hnj9c45w97x")))) + (build-system pyproject-build-system) + (arguments (list #:test-backend #~'unittest)) + (native-inputs (list python-pandas python-setuptools)) + (propagated-inputs (list python-wcwidth)) (home-page "https://github.com/pri22296/beautifultable") (synopsis "Print ASCII tables for terminals") - (description "@code{python-beautifultable} provides a class for easily -printing tabular data in a visually appealing ASCII format to a terminal. + (description + "@code{python-beautifultable} provides a class for easily printing +tabular data in a visually appealing ASCII format to a terminal. Features include, but are not limited to: @itemize @@ -27235,9 +27341,9 @@ Features include, but are not limited to: (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 - "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk")))) - (build-system python-build-system) + (base32 "055xf7ja7zjhxis0ab5fnfsx16fsvr5fvc6mixqybanwxh8sgfjk")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://github.com/asharov/globber") (synopsis "Library for string matching with glob patterns") (description @@ -27293,7 +27399,7 @@ commit, but it also includes some other useful statistics.") (define-public python-gitignore-parser (package (name "python-gitignore-parser") - (version "0.1.12") + (version "0.1.13") (source (origin (method git-fetch) @@ -27302,18 +27408,10 @@ commit, but it also includes some other useful statistics.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "00s8vvslnlbqnmkgnmc374mjzbsw7b167gh7wf5ygigd79cpnnxk")))) + (base32 "0lx1lip9p70my7z77szxc6izg3dj3000r6z71f2bnx2z13rl5pld")))) (build-system pyproject-build-system) - (arguments - (list - #:phases - #~(modify-phases %standard-phases - ;; Tests are missing in PyPI. - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "python" "-m" "unittest"))))))) - (native-inputs (list python-setuptools python-wheel)) + (arguments (list #:test-backend #~'unittest)) + (native-inputs (list python-setuptools)) (home-page "https://github.com/mherrmann/gitignore_parser") (synopsis "Spec-compliant gitignore parser for Python") (description @@ -27326,27 +27424,32 @@ commit, but it also includes some other useful statistics.") (version "2.0.4") (source (origin - (method url-fetch) - (uri (pypi-uri "fusepy" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/fusepy/fusepy") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0v5grm4zyf58hsplwsxfbihddw95lz9w8cy3rpzbyha287swgx8h")))) - (build-system python-build-system) + (base32 "10smh49lzmqam6ddxcnp1dajy4s9hi5ri3qp1rhwdyfsaq3pay81")))) + (build-system pyproject-build-system) (arguments - `(#:phases - (modify-phases %standard-phases - (add-before 'build 'set-library-file-name - (lambda* (#:key inputs #:allow-other-keys) - (let ((fuse (assoc-ref inputs "fuse"))) - (substitute* "fuse.py" - (("find_library\\('fuse'\\)") - (string-append "'" fuse "/lib/libfuse.so'"))))))))) - (propagated-inputs - (list fuse-2)) + (list + #:tests? #f ; No formalized tests. + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'set-library-file-name + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "fuse.py" + (("find_library\\('fuse'\\)") + (format #f "~s" + (search-input-file inputs "lib/libfuse.so"))))))))) + (native-inputs (list python-setuptools)) + (propagated-inputs (list fuse-2)) (home-page "https://github.com/fusepy/fusepy") (synopsis "Simple ctypes bindings for FUSE") - (description "Python module that provides a simple interface to FUSE and -MacFUSE. The binding is created using the standard @code{ctypes} library.") + (description + "Python module that provides a simple interface to FUSE and MacFUSE. The +binding is created using the standard @code{ctypes} library.") (license license:isc))) (define-public python-fusepyng @@ -27574,24 +27677,20 @@ and corruption checks.") (define-public python-requests-file (package (name "python-requests-file") - (version "1.5.1") + (version "3.0.1") (source (origin - (method url-fetch) - (uri (pypi-uri "requests-file" version)) + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/dashea/requests-file") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "13kx4k83i9zcv20h0fnmawwwdzhcmw1z97mqib1h379qsc445mq7")))) - (build-system python-build-system) - (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "python" "tests/test_requests_file.py"))))))) - (propagated-inputs - (list python-requests python-six)) - (home-page "https://github.com/dashea/requests-file") + (base32 "0wvz2fkx01libz731a9pfx0l5p44cd33ba8gs7kw5dksfzfwvark")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) + (propagated-inputs (list python-requests)) + (home-page "https://codeberg.org/dashea/requests-file") (synopsis "File transport adapter for Requests") (description "Requests-File is a transport adapter for use with the Requests Python @@ -27625,47 +27724,6 @@ a file (or some information about a file), return a set of standardized tags identifying what the file is.") (license license:expat))) -(define-public tldr - (package - (name "tldr") - (version "3.4.3") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/tldr-pages/tldr-python-client") - (commit version))) - (file-name (git-file-name name version)) - (sha256 - (base32 "06rhpywaypqwakw8v187cdf52yl5c7fm19f1q7nbbsydbs0ndmb1")))) - (build-system pyproject-build-system) - (arguments - (list - ;; This test fails. It tries to open a network socket. - #:test-flags #~(list "-k" "not test_error_message") - #:phases - #~(modify-phases %standard-phases - (add-after 'build 'build-doc - (lambda _ - (invoke "make" "-C" "docs")))))) - (native-inputs - (list python-hatchling - python-pytest - python-sphinx-argparse)) - (inputs - (list python-colorama - python-termcolor - python-shtab)) - (home-page "https://github.com/tldr-pages/tldr-python-client") - (synopsis "Python command-line client for tldr pages") - (description "This package provides the @code{tldr} command allowing users -to view @code{tldr} pages from a shell. The @code{tldr} pages are a community -effort to simplify the man pages with practical examples.") - (license license:expat))) - -(define-public python-tldr - (deprecated-package "python-tldr" tldr)) - (define-public python-nodeenv (package (name "python-nodeenv") @@ -27710,15 +27768,13 @@ environments.") (method url-fetch) (uri (pypi-uri "PyNamecheap" version)) (sha256 - (base32 - "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l")))) - (build-system python-build-system) - (propagated-inputs - (list python-requests)) - (home-page - "https://github.com/Bemmu/PyNamecheap") - (synopsis - "Namecheap API client in Python") + (base32 "0wkbwz208j8nfrsmzmclvxg22ymknn0mlz76wbdza9k2bx2zja6l")))) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; No tests. + (native-inputs (list python-setuptools)) + (propagated-inputs (list python-requests)) + (home-page "https://github.com/Bemmu/PyNamecheap") + (synopsis "Namecheap API client in Python") (description "PyNamecheap is a Namecheap API client in Python.") (license license:expat))) @@ -27763,23 +27819,38 @@ derivation parsing, namingly @code{b32decode()}, @code{b32encode()} and (define-public python-dns-lexicon (package (name "python-dns-lexicon") - (version "2.4.0") + (version "3.21.1") (source (origin - (method url-fetch) - (uri (pypi-uri "dns-lexicon" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/dns-lexicon/dns-lexicon") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0jdn3ns71bsybr7njgsqr9xlxsqh7zh6phn4ld0liazqdn2l5f6m")))) - (build-system python-build-system) + (base32 "138j8nrkrisn7kh5rqi2wz130p6vr4bkaw1pmbfpjkdjk118ng8c")))) + (build-system pyproject-build-system) (arguments - `(#:tests? #f)) ;requires internet access + (list + ;; Integration tests require network access. + #:test-flags #~(list "--ignore-glob=tests/providers/*.py") + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'configure-tests + (lambda _ + (setenv "HOME" (getcwd))))))) + (native-inputs (list nss-certs-for-test python-hatchling python-pytest)) (propagated-inputs - (list python-future python-pynamecheap python-requests - python-tldextract python-urllib3)) - (home-page "https://github.com/AnalogJ/lexicon") - (synopsis - "Manipulate DNS records on various DNS providers") + (list python-beautifulsoup4 + python-cryptography + python-dnspython + python-importlib-metadata + python-pyotp + python-pyyaml + python-requests + python-tldextract)) + (home-page "https://github.com/dns-lexicon/dns-lexicon") + (synopsis "Manipulate DNS records on various DNS providers") (description "Lexicon provides a way to manipulate DNS records on multiple DNS providers in a standardized way. It has a CLI but it can also be used as a @@ -27817,12 +27888,15 @@ readable error messages.") (version "0.4.1") (source (origin - (method url-fetch) - (uri (pypi-uri "commandlines" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/chrissimpkins/commandlines") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0r7xcr0knv02p4mswa2bng61nn8nbhhrs6kvdnb9bb3hhjvm1dl6")))) - (build-system python-build-system) + (base32 "03mxsknqbiwdl4cydnmr3dbid5rh1y1pwfcnbf6k4sf0wiw98y67")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://github.com/chrissimpkins/commandlines") (synopsis "Command line argument to object parsing library") (description @@ -28022,12 +28096,15 @@ codecs for use in data storage and communication applications.") (version "0.3.3") (source (origin - (method url-fetch) - (uri (pypi-uri "asciitree" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/mbr/asciitree") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0vhgri2m2xlnibhz4xwn4hpbc7xacisxjqrk6k5kyppq96vbk92a")))) - (build-system python-build-system) + (base32 "071wlpyi8pa262sj9xdy0zbj163z84dasxad363z3sfndqxw78h1")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://github.com/mbr/asciitree") (synopsis "Draws ASCII trees") (description "This package draws tree structures using characters.") @@ -28254,12 +28331,18 @@ data.") (version "1.0.0") (source (origin - (method url-fetch) - (uri (pypi-uri "locket" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/mwilliamson/locket.py") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0cm6290zm3ba62n2x2piy3s8d41hrmffda2nw18ggfwb582lq3aw")))) - (build-system python-build-system) + (base32 "0xx57gq5r7x58yd2mq6zxlr2kpzbyb0b5y5hiprgvkib948jxx0p")))) + (build-system pyproject-build-system) + ;; XXX: Requires python-spur, which requires another version of + ;; python-paramiko. + (arguments (list #:tests? #f)) + (native-inputs (list python-setuptools)) (home-page "https://github.com/mwilliamson/locket.py") (synopsis "File-based locks for Python") (description @@ -28352,18 +28435,23 @@ decisions with any given backend.") (define-public python-ilinkedlist (package (name "python-ilinkedlist") - (version "0.4.0") + (properties '((commit . "b5ea3f67833071c2e0aba2eac35e82496f469238") + (revision . "0"))) + (version (git-version "0.4.0" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) + (home-page "https://github.com/luther9/ilinkedlist-py") (source (origin - (method url-fetch) - (uri (pypi-uri "ilinkedlist" version)) + (method git-fetch) + (uri (git-reference + (url home-page) + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0nrw4sr3afldrp7073hvc0rgdz282s0l819jdmj1i6nn05v33h0l")))) - (build-system python-build-system) - (native-inputs (list python-pytest)) - (inputs (list python)) - (home-page "https://github.com/luther9/ilinkedlist-py") + (base32 "0lrs6arzm7dg70ny4ri06alhi40s03n71jsx5hsi0fimvwyvfhch")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (synopsis "Immutable linked list library") (description "This is a implementation of immutable linked lists for Python. It @@ -28380,11 +28468,15 @@ with a non-list @code{cdr}.") (version "0.1.3") (source (origin - (method url-fetch) - (uri (pypi-uri "readlike" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/jangler/readlike") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 "027w8fvi50ksl57q0a7kb5zvmq8jxaawnviib1jdqw0p3igvm1j4")))) - (build-system python-build-system) + (base32 "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1")))) + (build-system pyproject-build-system) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://github.com/jangler/readlike") (synopsis "GNU Readline-like line editing module") (description @@ -28404,13 +28496,18 @@ are not supported.") (version "1.4.3") (source (origin - (method url-fetch) - (uri (pypi-uri "ReParser" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/xmikos/reparser") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "0nniqb69xr0fv7ydlmrr877wyyjb61nlayka7xr08vlxl9caz776")))) - (build-system python-build-system) + (base32 "04v7h52wny0j2qj37501nk33j0s4amm134kagdicx2is49zylzq1")))) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; No tests. + (native-inputs (list python-setuptools)) (home-page "https://github.com/xmikos/reparser") - (synopsis "Simple lexer/parser for inline markup based on regular expressions") + (synopsis "Lexer/parser for inline markup based on regular expressions") (description "This Python library provides a simple lexer/parser for inline markup based on regular expressions.") @@ -28494,21 +28591,32 @@ of Python libraries for building Python applications.") (define-public python-astor (package (name "python-astor") - (version "0.8.1") + (properties '((commit . "df09001112f079db54e7c5358fa143e1e63e74c4") + (revision . "0"))) + (version (git-version "0.8.1" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) (source (origin - (method url-fetch) - (uri (pypi-uri "astor" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/berkerpeksag/astor") + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "0ppscdzzvxpznclkmhhj53iz314x3pfv4yc7c6gwxqgljgdgyvka")))) - (build-system python-build-system) - ;; FIXME: There are two errors and two test failures. - (arguments `(#:tests? #f)) + (base32 "0ymj0n23b6b4qc6x8ycysh2dipdry5a3gakcaf8nravzp5ma2psl")))) + (build-system pyproject-build-system) + (arguments + (list + ;; FIXME: Unclear why this test fails. + #:test-flags #~(list "--deselect=\ +tests/test_rtrip.py::RtripTestCase::test_convert_stdlib"))) + (native-inputs (list python-pytest python-setuptools)) (home-page "https://github.com/berkerpeksag/astor") (synopsis "Read and write Python ASTs") - (description "Astor is designed to allow easy manipulation of Python -source via the Abstract Syntax Tree.") + (description + "Astor is designed to allow easy manipulation of Python source via the +Abstract Syntax Tree.") (license license:bsd-3))) (define-public python-astunparse @@ -29380,37 +29488,6 @@ to and from JSON. Common data types are implemented and it is easy to register custom encoders and decoders.") (license license:expat))) -;; XXX: See: <https://codeberg.org/guix/guix/issues/3054>. -(define-public python-iocapture - ;; The latest release is more than a year older than this commit. - (let ((commit "fdc021c431d0840303908dfc3ca8769db383595c") - (revision "1")) - (package - (name "python-iocapture") - (version "0.1.2") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/oinume/iocapture") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1mkbhqibxvgwg0p7slr8dfraa3g2s6bsayladhax2jccwj4kcndz")))) - (build-system pyproject-build-system) - (native-inputs - (list python-flexmock - python-pytest - python-pytest-cov - python-setuptools - python-six)) - (home-page "https://github.com/oinume/iocapture") - (synopsis "Python capturing tool for stdout and stderr") - (description - "This package helps you to capture the standard out (stdout) and the -standard error channel (stderr) in your program.") - (license license:expat)))) - (define-public python-ioctl-opt (package (name "python-ioctl-opt") @@ -29742,26 +29819,26 @@ memoization.") (define-public python-forbiddenfruit (package (name "python-forbiddenfruit") - (version "0.1.3") + (version "0.1.4") (source (origin - ;; Source tarball on PyPi lacks Makefile that builds and runs tests (method git-fetch) (uri (git-reference (url "https://github.com/clarete/forbiddenfruit") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "1fp2xvdqpi910j9r3q68x38phpxbm700gjdi2m2j5gs91xdnyyh2")))) - (build-system python-build-system) + (base32 "16chhrxbbmg6lfbzm532fq0v00z8qihcsj0kg2b5jlgnb6qijwn8")))) + (build-system pyproject-build-system) (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - (invoke "make" "SKIP_DEPS=1")))))) - (native-inputs - (list python-nose python-coverage)) + (list + #:phases + #~(modify-phases %standard-phases + (replace 'check + (lambda* (#:key tests? #:allow-other-keys) + (when tests? + (invoke "make" "SKIP_DEPS=1"))))))) + (native-inputs (list python-coverage python-pynose python-setuptools)) (home-page "https://github.com/clarete/forbiddenfruit") (synopsis "Patch python built-in objects") (description "This project allows Python code to extend built-in types.") @@ -29875,13 +29952,14 @@ file to ensure it completely and accurately describes your project.") (sha256 (base32 "0gij55qzzq1h83kfpvhai1vf78kkhyvxa6l17m2nl24454lhfin4")))) - (build-system python-build-system) - (arguments - `(#:tests? #f)) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; No tests. + (native-inputs (list python-setuptools)) (home-page "https://framagit.org/tyreunom/python-android-strings-lib") (synopsis "Android strings.xml support") - (description "Android Strings Lib provides support for android's strings.xml -files. These files are used to translate strings in android apps.") + (description + "Android Strings Lib provides support for android's strings.xml files. +These files are used to translate strings in android apps.") (license license:expat))) (define-public offlate @@ -29982,21 +30060,29 @@ custom PNG processing.") (version "0.18.0") (source (origin - (method url-fetch) - (uri (pypi-uri "fuzzywuzzy" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/seatgeek/fuzzywuzzy") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1s00zn75y2dkxgnbw8kl8dw4p1mc77cv78fwfa4yb0274s96w0a5")))) - (build-system python-build-system) + (base32 "0zh8xd9k95waipsdz516rn51ya9xxlxbd7ivbka4gnkqm9ah79mc")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + #~(list "--deselect=test_fuzzywuzzy_pytest.py::test_process_warning"))) (native-inputs - (list python-hypothesis python-pycodestyle python-pytest)) - (propagated-inputs - (list python-levenshtein)) + (list python-hypothesis + python-pycodestyle + python-pytest + python-setuptools)) + (propagated-inputs (list python-levenshtein)) (home-page "https://github.com/seatgeek/fuzzywuzzy") (synopsis "Fuzzy string matching in Python") - (description "Approximate string matching using -@emph{Levenshtein Distance} to calculate the differences between -sequences.") + (description + "Approximate string matching using @emph{Levenshtein Distance} to +calculate the differences between sequences.") (license license:gpl2))) (define-public python-block-tracing @@ -30008,10 +30094,10 @@ sequences.") (method url-fetch) (uri (pypi-uri "block_tracing" version)) (sha256 - (base32 - "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz")))) - (build-system python-build-system) - (arguments '(#:tests? #f)) ; no tests + (base32 "0s2y729qr5rs7n506qfh8cssk8m2bi6k2y5vbrh2z3raf2d01alz")))) + (build-system pyproject-build-system) + (arguments (list #:tests? #f)) ; No tests. + (native-inputs (list python-setuptools)) (home-page "https://github.com/rianhunter/block_tracing") (synopsis "Protect process memory") (description @@ -30110,22 +30196,26 @@ Python. It also provides some custom formatters and handlers.") (define-public python-pifpaf (package (name "python-pifpaf") - (version "3.1.5") + (version "3.4.0") (source (origin - (method url-fetch) - (uri (pypi-uri "pifpaf" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/jd/pifpaf") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "19bdmxldc2m570isl7hbqgbb20si4sin7pi5fw8sv9py8dyv2s4n")))) - (build-system python-build-system) + (base32 "1mj41h5xrkx71d7g5di3ykd4bsbgr7x432zbp63majgjci86gmm9")))) + (build-system pyproject-build-system) (arguments - '(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - (invoke "python" "setup.py" "testr" "--slowest" - "--testr-args=until-failure")))))) + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'install 'install-drivers + (lambda* (#:key inputs outputs #:allow-other-keys) + (let ((site (site-packages inputs outputs))) + (copy-recursively "pifpaf/drivers" + (string-append site "/pifpaf/drivers/")))))))) (propagated-inputs (list python-click python-daiquiri @@ -30135,14 +30225,20 @@ Python. It also provides some custom formatters and handlers.") python-psutil python-xattr)) (native-inputs - (list python-mock python-os-testr python-requests - python-testrepository python-testtools)) + (list python-mock + python-stestr + python-packaging + python-requests + python-testrepository + python-testtools + python-setuptools)) (home-page "https://github.com/jd/pifpaf") (synopsis "Tools and fixtures to manage daemons for testing in Python") - (description "Pifpaf is a suite of fixtures and a command-line tool that -starts and stops daemons for a quick throw-away usage. This is typically -useful when needing these daemons to run integration testing. It originally -evolved from its precursor @code{overtest}.") + (description + "Pifpaf is a suite of fixtures and a command-line tool that starts and +stops daemons for a quick throw-away usage. This is typically useful when +needing these daemons to run integration testing. It originally evolved from +its precursor @code{overtest}.") (license license:asl2.0))) (define-public python-pytest-check-links @@ -30368,29 +30464,63 @@ key. (version "2.5.0") (source (origin - (method url-fetch) - (uri (pypi-uri "daemonize" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/thesharp/daemonize") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 "1hwbl3gf9fdds9sc14zgjyjisjvxidrvqc11xlbb0b6jz17nw0nx")))) - (build-system python-build-system) + (base32 "0pz914x6dfq133nfv0y8q8fss4zr52ip8mq3ds50rx0ddlbb0k2x")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-backend #~'custom + #:test-flags #~(list "tests/test.py") + #:phases + #~(modify-phases %standard-phases + (add-before 'check 'fix-tests + (lambda _ + ;; XXX: nobody has group nogroup on Guix. + (substitute* "tests/test.py" + (("grp\\.getgrnam\\(\"nobody\"\\)\\.gr_gid") + (number->string (passwd:gid (getpw "nobody")))))))))) + (native-inputs (list coreutils-minimal procps python-setuptools)) (home-page "https://github.com/thesharp/daemonize") (synopsis "Library for writing system daemons in Python") - (description "Daemonize is a library for writing system daemons in Python.") + (description + "Daemonize is a library for writing system daemons in Python.") (license license:expat))) (define-public python-pymacaroons (package (name "python-pymacaroons") - (version "0.13.0") + (properties '((commit . "78c55c1d33a0b23ddc71140a9c999f957d79e9dd") + (revision . "0"))) + (version (git-version "0.13.0" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) (source (origin - (method url-fetch) - (uri (pypi-uri "pymacaroons" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/ecordell/pymacaroons") + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) (sha256 - (base32 "1f0357a6g1h96sk6wy030xmc1p4rd80a999qvxd28v7nlm1blsqy")))) - (build-system python-build-system) - (propagated-inputs - (list python-six python-pynacl)) + (base32 "0ybdxlx6crb7l850dzz50arqrm4d4dl5dvzlf8f7sdhdcn2lgr7m")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + ;; XXX: Despite python-hypothesis, ModuleNotFoundError: + ;; No module named 'hypothesis.specifiers' + #~(list "--ignore=tests/property_tests/macaroon_property_tests.py"))) + (native-inputs + (list python-hypothesis + python-mock + python-pytest + python-setuptools)) + (propagated-inputs (list python-pynacl)) (home-page "https://github.com/ecordell/pymacaroons") (synopsis "Python Macaroon Library") (description @@ -30407,7 +30537,7 @@ enforcement of that policy.") (define-public python-ldap3 (package (name "python-ldap3") - (version "2.7") + (version "2.9.1") (home-page "https://github.com/cannatag/ldap3") (source (origin @@ -30416,18 +30546,14 @@ enforcement of that policy.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0xw9fkqld21xsvdpaqir8ccc2l805xnn9gxahsnl70xzp3mwl0xv")))) - (build-system python-build-system) + (base32 "07nxbv41wpg5567r07yvm4chgs761drsvn53gn548zi26gmrpr07")))) + (build-system pyproject-build-system) (arguments - '(#:tests? #f ;TODO: Tests need a real LDAP server to run - #:phases (modify-phases %standard-phases - (replace 'check - (lambda* (#:key tests? #:allow-other-keys) - (when tests? - (invoke "nosetests" "-s" "test")) - #t))))) + (list + #:tests? #f ;TODO: Tests need a real LDAP server to run + #:test-backend #~'nose)) (native-inputs - (list python-nose)) + (list python-pynose python-setuptools)) (propagated-inputs (list python-gssapi python-pyasn1)) (synopsis "Python LDAP client") @@ -30439,15 +30565,18 @@ library.") (define-public python-boltons (package (name "python-boltons") - (version "23.0.0") + (version "25.0.0") (source (origin - (method url-fetch) - (uri (pypi-uri "boltons" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/mahmoud/boltons") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1c5lpqi74i55li0wvpyxnircj40na797x7447k53an2j54cafl4c")))) - (build-system python-build-system) + (base32 "0j061hd1iwcyz1rvasprjwwgb39x6h36n1l3dw310ig3pzbr84wh")))) + (build-system pyproject-build-system) + (native-inputs (list python-flit-core python-pytest python-setuptools)) (home-page "https://github.com/mahmoud/boltons") (synopsis "Extensions to the Python standard library") (description @@ -30511,22 +30640,33 @@ happened, and what caused it.") (define-public python-pem (package (name "python-pem") - (version "20.1.0") + (version "23.1.0") (source (origin - (method url-fetch) - (uri (pypi-uri "pem" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/hynek/pem") + (commit version))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1xh88ss279fprxnzd10dczmqwjhppbyvljm33zrg2mgybwd66qr7")))) - (build-system python-build-system) + (base32 "01x14j1pliyxvcx8hlwlwfchn893ddkxxpxbyqhyh6hjyag2ammd")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'set-version + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))) (native-inputs - (list python-certifi - python-coverage + (list nss-certs-for-test + python-certifi + python-hatch-fancy-pypi-readme + python-hatch-vcs + python-hatchling python-pretend python-pyopenssl python-pytest - python-sphinx python-twisted)) (home-page "https://pem.readthedocs.io/") (synopsis "Easy PEM file parsing in Python") @@ -30537,25 +30677,46 @@ happened, and what caused it.") (define-public python-pysaml2 (package (name "python-pysaml2") - (version "6.5.1") + (version "7.5.4") (source (origin - (method url-fetch) - (uri (pypi-uri "pysaml2" version)) + (method git-fetch) + (uri (git-reference + (url "https://github.com/IdentityPython/pysaml2") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) (sha256 - (base32 - "1xk2x0slz1f8cqv7vn77qx99xfd1mshhswiwrljk9m72w2m9iivd")))) - (build-system python-build-system) + (base32 "1vxi6kmckaj0djn79xw8f0gdd569i2y6sywsywyvyrwdcf6k8fqc")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + #~(list "-k" + (string-join + ;; XXX: encryption failures + (list "not test_encrypted_response_6" + "test_validate_cert_chains" + "test_validate_with_root_cert" + ;; XXX: xml parsing error + "test_namespace_processing") " and not ")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "pyproject.toml" + (("\"(pyopenssl|xmlschema).*\"" _ dep) + (format #f "~s" dep)))))))) + (native-inputs (list python-poetry-core python-pytest)) (propagated-inputs (list python-cryptography python-dateutil python-defusedxml - python-importlib-resources + python-pymongo python-pyopenssl - python-pytz + python-responses python-requests - python-six - python-xmlschema)) + python-xmlschema + python-xmlsec)) (home-page "https://idpy.org") (synopsis "Python implementation of SAML Version 2 Standard") (description @@ -30634,43 +30795,6 @@ cryptographically signed ones).") dictionaries.") (license license:expat))) -(define-public pyzo - (package - (name "pyzo") - (version "4.20.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/pyzo/pyzo") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 "1a82k7hjmv20lrwiwsdrvczrm21wq16m4snwsirwhj0jh5k1x9iw")))) - (build-system pyproject-build-system) - (arguments - (list - #:test-flags - #~(list "--ignore-glob=pyzo/yoton/tests/*" ; XXX: yoton is outdated. - "--ignore=pyzo/codeeditor/_test.py"))) ; XXX: cannot import qt. - (native-inputs - (list python-flit-core - python-pytest - python-setuptools)) - (inputs (list python-pyside-6)) - (home-page "https://pyzo.org") - (synopsis "Python IDE for scientific computing") - (description - "Pyzo is a Python IDE focused on interactivity and introspection, -which makes it very suitable for scientific computing. Its practical -design is aimed at simplicity and efficiency. - -It consists of two main components, the editor and the shell, and uses -a set of pluggable tools to help the programmer in various ways. Some -example tools are source structure, project manager, interactive help, -workspace...") - (license license:bsd-2))) - (define-public python-osc (package (name "python-osc") @@ -36292,86 +36416,6 @@ and abstract ELF, PE and MachO formats.") Storage}.") (license license:lgpl3+))) -(define-public shrinkwrap - (package - (name "shrinkwrap") - (version "0.1.0") - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/fzakaria/shrinkwrap") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (modules '((guix build utils))) - (snippet '(substitute* "pyproject.toml" - (("lief = \"0\\.12\\.0\"") "lief = \"*\""))) - (sha256 - (base32 - "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp")))) - (build-system pyproject-build-system) - (native-inputs - (list python-click - python-poetry-core - python-pypa-build - python-pytest)) - (inputs (list python-lief python-sh)) - (home-page "https://github.com/fzakaria/shrinkwrap") - (synopsis "Emboss needed dependencies on the top level executable") - (description - "@code{shrinkwrap} is a tool which will discover all transitive dynamic -shared objects, and lift them up to the executable referenced by absolute -path.") - (license license:expat))) - -(define-public staticsite - (package - (name "staticsite") - (version "2.3") - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/spanezz/staticsite") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1rhr25xydvnlrrcz389j3f6nknmczm5x11cagrji1qww70piwy08")))) - (build-system pyproject-build-system) - (arguments - (list - #:phases - #~(modify-phases %standard-phases - (add-after 'unpack 'use-themes-in-output - (lambda _ - (substitute* "staticsite/global_settings.py" - (("/usr/share/staticsite") #$output)))) - (add-after 'install 'install-themes - (lambda _ - (let ((themedir (string-append #$output "/themes"))) - (copy-recursively "themes" themedir))))))) - (native-inputs - (list perl-image-exiftool - python-dateutil - python-docutils-0.19 - python-jinja2 - python-markdown - python-pillow - python-pyinotify - python-pytz - python-pyyaml - python-ruamel.yaml - python-slugify - python-tornado - tzdata-for-tests - python-setuptools - python-wheel - python-toml)) - (home-page "https://github.com/spanezz/staticsite") - (synopsis "Static site generator") - (description "Statistic is a static site generator based on Markdown and -Jinja2.") - (license (list license:gpl3+ license:expat)))) - (define-public python-pymonad (package (name "python-pymonad") @@ -37037,6 +37081,17 @@ ratio) (list python-setuptools python-wheel)))) +(define-public python-termcolor-next + (package + (inherit python-termcolor) + (version "3.1.0") + (source + (origin + (method url-fetch) + (uri (pypi-uri "termcolor" version)) + (sha256 + (base32 "0w2rwl4h7664illllkmicdh3fz3z3pznqxbaxkp0j6aqxvxxfvba")))))) + (define-public python-terminaltables (package (name "python-terminaltables") @@ -39032,6 +39087,42 @@ multiple Unicode code points, e.g. \"G\" + acute-accent) @end enumerate") (license license:expat))) +(define-public python-universal-pathlib + (package + (name "python-universal-pathlib") + (version "0.2.6") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/fsspec/universal_pathlib") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0y2czk4civjjy9v8vhv6icivk4lapjcjzhdxjrrm3629apqja7wp")))) + (build-system pyproject-build-system) + (arguments + (list + #:tests? #f ;requires network + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'set-version + (lambda _ + (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))) + (native-inputs + (list python-setuptools + python-setuptools-scm)) + (propagated-inputs + (list python-fsspec + python-pathlib-abc)) + (home-page "https://github.com/fsspec/universal_pathlib") + (synopsis + "@code{pathlib} API extended to use @code{fsspec} backends") + (description + "Universal Pathlib is a Python library that extends the @code{pathlib.Path} +API to support a variety of backend filesystems via filesystem_spec.") + (license license:expat))) + (define-public python-unpaddedbase64 (package (name "python-unpaddedbase64") @@ -39308,21 +39399,17 @@ parsing (browser/HTTP) user agent strings.") (define-public python-userspacefs (package (name "python-userspacefs") - (version "2.0.5") + (version "3.1.1") (source (origin (method url-fetch) (uri (pypi-uri "userspacefs" version)) (sha256 - (base32 - "0v0qkdwfc61s2yiq7d7amin93x5biypfmi9pfhf8yj1rdpx5yvsx")))) + (base32 "0lfzgijza3p4wbrhlf8pzj89j7caj8x6aij78d4izppvq4kfjqs6")))) (build-system pyproject-build-system) - (arguments - (list #:tests? #f)) ;no tests - (native-inputs - (list python-setuptools)) - (propagated-inputs - (list python-fusepyng)) + (arguments (list #:tests? #f)) ;no tests + (native-inputs (list python-setuptools)) + (propagated-inputs (list python-aiohttp python-typing-extensions)) (home-page "https://thelig.ht/code/userspacefs/readme.html") (synopsis "User-space file systems for Python") (description @@ -40698,12 +40785,13 @@ of several plugins.") (sha256 (base32 "1ryc5099sjsa49fhcm6dp5l4rp9v9yxrh17ml78y89idfbbfhvs1")))) (build-system pyproject-build-system) + ;; tests: 3007 passed, 1758 skipped (native-inputs (list python-poetry-core python-pytest python-pytest-mock)) (propagated-inputs - (list python-termcolor)) + (list python-termcolor-next)) (home-page "https://github.com/pavdmyt/yaspin") (synopsis "Yet Another Terminal Spinner") (description "Yaspin provides a terminal spinner to indicate the progress @@ -41029,6 +41117,113 @@ you do not want to store entirely on disk or on memory.") ;; No copyright headers in the source. The LICENSE file indicates GPL3. (license license:gpl3))) +(define-public python2-dbus + (package/inherit python-dbus + (name "python2-dbus") + (inputs `(("python" ,python-2) + ("libxcrypt" ,libxcrypt) ;required by Python.h + ,@(alist-delete "python" + (package-inputs python-dbus)))) + (arguments + `(#:configure-flags '("PYTHON_VERSION=2"))))) + +(define-public python2-pycparser + (let ((base (package + (inherit python-pycparser) + (version "2.18") + (source + (origin + (method url-fetch) + (uri (pypi-uri "pycparser" version)) + (sha256 + (base32 + "09mjyw82ibqzl449g7swy8bfxnfpmas0815d2rkdjlcqw81wma4r")))) + ;; FIXME: package-with-python2 needs to be updated to accept + ;; pyproject-build-system packages. + (build-system python-build-system) + (arguments + (cons* #:tests? #f + (strip-keyword-arguments + '(#:test-backend) + (package-arguments python-pycparser))))))) + (package-with-python2 base))) + +(define-public shrinkwrap + (package + (name "shrinkwrap") + (version "0.1.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/fzakaria/shrinkwrap") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1f3qrygj16y767q2c7pn9j6m95ggcmj9s5cx9v92ygygly4mr3jp")))) + (build-system pyproject-build-system) + (native-inputs + (list python-click + python-poetry-core + python-pypa-build + python-pytest)) + (inputs (list python-lief python-sh)) + (home-page "https://github.com/fzakaria/shrinkwrap") + (synopsis "Emboss needed dependencies on the top level executable") + (description + "@code{shrinkwrap} is a tool which will discover all transitive dynamic +shared objects, and lift them up to the executable referenced by absolute +path.") + (license license:expat))) + +(define-public staticsite + (package + (name "staticsite") + (version "2.5") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/spanezz/staticsite") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "0fk0yy0flwwfqwb4gsizr7gnkadas4rjffn3mnzlwmkn08z3w0c7")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'use-themes-in-output + (lambda _ + (substitute* "staticsite/global_settings.py" + (("/usr/share/staticsite") #$output)))) + (add-after 'install 'install-themes + (lambda _ + (let ((themedir (string-append #$output "/themes"))) + (copy-recursively "themes" themedir))))))) + (native-inputs + (list python-hatchling + python-pytest)) + (inputs + (list perl-image-exiftool + python-dateutil + python-docutils + python-jinja2 + python-markdown + python-pillow + python-pytz + python-pyyaml + python-ruamel.yaml + python-slugify + python-toml + tzdata-for-tests)) + (home-page "https://github.com/spanezz/staticsite") + (synopsis "Static site generator") + (description + "Statistic is a static site generator based on Markdown and Jinja2.") + (license (list license:gpl3+ license:expat)))) + ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances ;;; of a merge conflict, place them above by existing packages with similar |
