unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Nicolas Graves via Guix-patches via <guix-patches@gnu.org>
To: 70858@debbugs.gnu.org
Cc: ngraves@ngraves.fr
Subject: [bug#70858] [PATCH 02/32] build-system/pyproject: Ignore unwanted pytest flags.
Date: Fri, 10 May 2024 09:55:06 +0200	[thread overview]
Message-ID: <20240510075605.6303-2-ngraves@ngraves.fr> (raw)
In-Reply-To: <20240510075605.6303-1-ngraves@ngraves.fr>

* guix/build/pyproject-build-system.scm : Ignore unwanted pytest flags.

Change-Id: Ib9f1602e5af11227e5b7ce124f0f9be4fa2b78e4
---
 guix/build/pyproject-build-system.scm | 99 ++++++++++++++++++++++++++-
 1 file changed, 96 insertions(+), 3 deletions(-)

diff --git a/guix/build/pyproject-build-system.scm b/guix/build/pyproject-build-system.scm
index 947d240114a..2df9f2f4798 100644
--- a/guix/build/pyproject-build-system.scm
+++ b/guix/build/pyproject-build-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net>
 ;;; Copyright © 2022 Marius Bakke <marius@gnu.org>
+;;; Copyright © 2024 Nicolas Graves <ngraves@ngraves.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +36,8 @@ (define-module (guix build pyproject-build-system)
             add-installed-pythonpath
             site-packages
             python-version
-            pyproject-build))
+            pyproject-build
+            with-guix-pytest-plugin))
 
 ;;; Commentary:
 ;;;
@@ -142,7 +144,94 @@ (define* (build #:key outputs build-backend backend-path configure-flags #:allow
      wheel-dir
      config-settings)))
 
-(define* (check #:key tests? test-backend test-flags #:allow-other-keys)
+(define pytest-default-ignore-alist
+  '(("cov" . ("--cov" "--cov-reset" "--cov-report" "--cov-config"
+              "--no-cov-on-fail" "--no-cov" "--cov-fail-under"
+              "--cov-append" "--cov-branch" "--cov-context"))
+    ("mypy" . ("--mypy" "--mypy-config-file" "--mypy-ignore-missing-imports"))
+    ("isort" . ("--isort"))
+    ("flake8" . ("--flake8"))
+    ("black" . ("--black"))
+    ("flakes" . ("--flakes"))
+    ("pep8" . ("--pep8"))))
+
+(define (pytest-ignore-flags-plugin flags)
+  "This function converts an list of flags into a string that can
+  be instantiated as a python pytest plugin."
+  (format #f "\
+import pytest
+
+def pytest_addoption(parser):
+    group = parser.getgroup('guix','Guix ignored options')
+    options = [~{~s, ~}]
+    for option in options:
+        group.addoption(option, action='append', nargs='?')"
+          flags))
+
+(define (call-with-guix-pytest-plugin inputs thunk)
+  "This function emulates command line options provided by pytest plugins in
+the absence of the plugins defining these options.
+
+This is done by selecting absent plugins, gettings their flags defined in
+PYTEST-DEFAULT-IGNORE-ALIST, and generating the plugin from there with
+PYTEST-IGNORE-FLAGS-PLUGIN."
+  (let* ((former-path (getenv "PYTHONPATH"))
+         (input-names
+          (map car
+               (filter (match-lambda
+                         ((name . _)
+                          (if (string-prefix? "python-pytest-" name)
+                              name
+                              #f))
+                         ( _ #f))
+                       inputs)))
+         (filtered-flags
+          (filter identity
+                  (append-map
+                   (match-lambda
+                     ((group . flags)
+                      (if (member (string-append "python-pytest-" group)
+                                  input-names)
+                          (list #f)
+                          flags))
+                     (_ (list #f)))
+                   pytest-default-ignore-alist)))
+         (dir (string-append
+               (if (access? (dirname (getcwd)) W_OK)
+                   (dirname (getcwd))
+                   ;; fallback if we're already out-of-source
+                   (getcwd))
+               "/.guix-pytest")))
+    (dynamic-wind
+      (lambda ()
+        (setenv "PYTHONPATH"
+                (string-append
+                 (if former-path
+                     (string-append former-path ":")
+                     "")
+                 dir))
+        (setenv "PYTEST_PLUGINS"
+                (string-append
+                 (if (getenv "PYTEST_PLUGINS")
+                     (string-append former-path ",")
+                     "")
+                 "pytest_guix_plugin"))
+        (mkdir-p dir)
+        (with-output-to-file (string-append dir "/__init__.py")
+          (lambda _ (display "")))
+        (with-output-to-file (string-append dir "/pytest_guix_plugin.py")
+          (lambda _
+            (display (pytest-ignore-flags-plugin filtered-flags)))))
+      thunk
+      (lambda ()
+        (setenv "PYTHONPATH" former-path)
+        (unsetenv "PYTEST_PLUGINS")))))
+
+(define-syntax-rule (with-guix-pytest-plugin inputs exp ...)
+  "Evaluate EXP in a context where the Guix pytest plugin is added."
+  (call-with-guix-pytest-plugin inputs (lambda () exp ...)))
+
+(define* (check #:key inputs tests? test-backend test-flags #:allow-other-keys)
   "Run the test suite of a given Python package."
   (if tests?
       ;; Unfortunately with PEP 517 there is no common method to specify test
@@ -165,7 +254,8 @@ (define* (check #:key tests? test-backend test-flags #:allow-other-keys)
         (format #t "Using ~a~%" use-test-backend)
         (match use-test-backend
           ('pytest
-           (apply invoke pytest "-vv" test-flags))
+           (with-guix-pytest-plugin inputs
+             (apply invoke pytest "-vv" test-flags)))
           ('nose
            (apply invoke nosetests "-v" test-flags))
           ('nose2
@@ -386,3 +476,6 @@ (define* (pyproject-build #:key inputs (phases %standard-phases)
   (apply python:python-build #:inputs inputs #:phases phases args))
 
 ;;; pyproject-build-system.scm ends here
+;;; Local Variables:
+;;; eval: (put 'with-guix-pytest-plugin 'scheme-indent-function 1)
+;;; End:
-- 
2.41.0





  reply	other threads:[~2024-05-10  7:58 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-10  7:26 [bug#70858] [PATCH 00/32] python-team: Remove native inputs Nicolas Graves via Guix-patches via
2024-05-10  7:55 ` [bug#70858] [PATCH 01/32] guix: import: pypi: Ignore pypi-ignored-inputs Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` Nicolas Graves via Guix-patches via [this message]
2024-05-10  7:55   ` [bug#70858] [PATCH 03/32] build-system/pyproject: Remove python-black input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 04/32] build-system/pyproject: Remove python-pylint native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 05/32] build-system/pyproject: Remove python-flake8 inputs Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 06/32] build-system/pyproject: Remove python-coverage input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 07/32] gnu: python-cram: Remove python-coverage native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 08/32] gnu: u-boot-tools: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 09/32] gnu: python-aiosqlite: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 10/32] gnu: python-openid: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 11/32] build-system/pyproject: Remove python-coveralls native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 12/32] build-system/pyproject: Remove python-pycodestyle native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 13/32] gnu: python-versioneer: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 14/32] gnu: python-versioneer: Remove python-pyflakes native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 15/32] gnu: python-re-assert: Remove python-covdefaults native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 16/32] build-system/pyproject: Remove python-codecov native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 17/32] build-system/pyproject: Remove python-tox native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 18/32] build-system/pyproject: Remove python-mypy native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 19/32] gnu: python-immutables: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 20/32] build-system/pyproject: Remove python-isort native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 21/32] build-system/pyproject: Remove python-twine native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 22/32] build-system/pyproject: Remove python-pytest-cov native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 23/32] gnu: python-tinycss2: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 24/32] gnu: python-django-contact-form: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 25/32] gnu: python-dateutil: " Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 26/32] build-system/pyproject: Remove python-pytest-isort native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 27/32] build-system/pyproject: Remove python-pytest-black native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 28/32] build-system/pyproject: Remove python-pytest-flake8 native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 29/32] build-system/pyproject: Remove python-pytest-mypy inputs Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 30/32] build-system/pyproject: Stop hiding options Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 31/32] gnu: python-linear-operator: Remove python-flake8-print native-input Nicolas Graves via Guix-patches via
2024-05-10  7:55   ` [bug#70858] [PATCH 32/32] gnu: abjad-ext-ipython: Remove uneeded inputs Nicolas Graves via Guix-patches via
2024-06-01 15:36 ` [bug#70858] [PATCH python-team v2 00/32] Remove unwanted native-inputs Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 01/32] guix: import: pypi: Ignore pypi-ignored-inputs Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 02/32] build-system/pyproject: Ignore unwanted pytest flags Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 03/32] build-system/pyproject: Remove python-black input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 04/32] build-system/pyproject: Remove python-pylint native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 05/32] build-system/pyproject: Remove python-flake8 inputs Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 06/32] build-system/pyproject: Remove python-coverage input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 07/32] gnu: python-cram: Remove python-coverage native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 08/32] gnu: u-boot-tools: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 09/32] gnu: python-aiosqlite: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 10/32] gnu: python-openid: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 11/32] build-system/pyproject: Remove python-coveralls native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 12/32] build-system/pyproject: Remove python-pycodestyle native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 13/32] gnu: python-versioneer: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 14/32] gnu: python-versioneer: Remove python-pyflakes native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 15/32] gnu: python-re-assert: Remove python-covdefaults native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 16/32] build-system/pyproject: Remove python-codecov native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 17/32] build-system/pyproject: Remove python-tox native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 18/32] build-system/pyproject: Remove python-mypy native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 19/32] gnu: python-immutables: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 20/32] build-system/pyproject: Remove python-isort native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 21/32] build-system/pyproject: Remove python-twine native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 22/32] build-system/pyproject: Remove python-pytest-cov native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 23/32] gnu: python-tinycss2: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 24/32] gnu: python-django-contact-form: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 25/32] gnu: python-dateutil: " Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 26/32] build-system/pyproject: Remove python-pytest-isort native-input Nicolas Graves via Guix-patches via
2024-06-01 15:36   ` [bug#70858] [PATCH python-team v2 27/32] build-system/pyproject: Remove python-pytest-black native-input Nicolas Graves via Guix-patches via
2024-06-01 15:37   ` [bug#70858] [PATCH python-team v2 28/32] build-system/pyproject: Remove python-pytest-flake8 native-input Nicolas Graves via Guix-patches via
2024-06-01 15:37   ` [bug#70858] [PATCH python-team v2 29/32] build-system/pyproject: Remove python-pytest-mypy inputs Nicolas Graves via Guix-patches via
2024-06-01 15:37   ` [bug#70858] [PATCH python-team v2 30/32] build-system/pyproject: Stop hiding options Nicolas Graves via Guix-patches via
2024-06-01 15:37   ` [bug#70858] [PATCH python-team v2 31/32] gnu: python-linear-operator: Remove python-flake8-print native-input Nicolas Graves via Guix-patches via
2024-06-01 15:37   ` [bug#70858] [PATCH python-team v2 32/32] gnu: abjad-ext-ipython: Remove uneeded inputs Nicolas Graves via Guix-patches via
2024-06-05 16:53   ` [bug#70858] [PATCH python-team v2 00/32] Remove unwanted native-inputs Nicolas Graves via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240510075605.6303-2-ngraves@ngraves.fr \
    --to=guix-patches@gnu.org \
    --cc=70858@debbugs.gnu.org \
    --cc=ngraves@ngraves.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).