Subject: [bug#58310] [PATCH 05/14] gnu: Add python-hatch.

From: Garek Dyszel <[email-masked]>
Date: Wed, 05 Oct 2022 13:46:04 -0400

diff --git a/gnu/packages/python-build.scm b/gnu/packages/python-build.scm
index f90d23874f..0b8d8a7647 100644
--- a/gnu/packages/python-build.scm
+++ b/gnu/packages/python-build.scm
@@ -579,3 +579,64 @@ (define-public python-hatchling-bootstrap
     (synopsis "Bootstrap binaries to build @code{python-hatch}")
     (description "Bootstrap binaries to build @code{python-hatch}")
     (license license:expat)))
+
+(define-public python-hatch
+  (package
+    (name "python-hatch")
+    (version "1.10.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/pypa/hatch")
+                    (commit (string-append "hatch-v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "030yi9hw50mn899pq073lw2a55r57skl2g9agjp3b4l95f3nay30"))))
+    (inputs (list python-pypa-build
+                  python-editables
+                  python-importlib-metadata
+                  python-version
+                  python-packaging-next
+                  python-pathspec
+                  python-pluggy-1.0 ;TODO: Not detected by pytest?
+                  python-hatchling-bootstrap
+                  python-tomli
+                  python-platformdirs
+                  python-rich
+                  python-tomli-w))
+    (build-system python-build-system)
+    (arguments
+     `( ;Tests appear to be written such that the input python-pluggy-1.0 is
+       ;; not detected.
+       #:tests? #f
+       #:phases (modify-phases %standard-phases
+                  (replace 'build
+                    (lambda _
+                      ;; ZIP does not support timestamps before 1980.
+                      (setenv "SOURCE_DATE_EPOCH" "315532800")
+                      (invoke "hatchling" "build")))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((whl (car (find-files "dist" "\\.whl$"))))
+                        (invoke "pip"
+                                "--no-cache-dir"
+                                "--no-input"
+                                "install"
+                                "--no-deps"
+                                "--prefix"
+                                (assoc-ref %outputs "out")
+                                whl))))
+                  (replace 'check
+                    (lambda* (#:key tests? #:allow-other-keys)
+                      (when tests?
+                        (chdir "tests")
+                        (invoke "pytest" "-vv"))))
+                  ;; Can't have hatch as a requirement of itself.
+                  (delete 'sanity-check))))
+    (home-page "https://ofek.dev/projects/hatch/")
+    (synopsis "Python build system with project generation")
+    (description
+     "Python build system with project generation.  It also defines a specific
+syntax in @code{toml} files to check for dependencies.")
+    (license license:expat)))
-- 
2.37.3