diff mbox series

[bug#69048,29/32] gnu: Add python-pydantic-core.

Message ID d0ae3d0a78ab3d3f368c27bc2a5a68d852eb39f2.1707650794.git.h.goebel@crazy-compilers.com
State New
Headers show
Series Add python-pydantic v2 and required rust and python packages | expand

Commit Message

Hartmut Goebel Feb. 11, 2024, 11:43 a.m. UTC
* gnu/packages/python-xyz.scm (python-pydantic-core): New variable.
---
 gnu/packages/python-xyz.scm | 84 +++++++++++++++++++++++++++++++++++++
 1 file changed, 84 insertions(+)
diff mbox series

Patch

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index b4b69e0f3f..4749c3f204 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -7340,6 +7340,90 @@  (define-public python-pydantic
 errors when data is invalid.")
     (license license:expat)))
 
+(define-public python-pydantic-core
+  (package
+    (name "python-pydantic-core")
+    (version "2.16.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pydantic_core" version))
+       (sha256
+        (base32 "01hs4ynmqp2wlfvbygg4bzz3f7g5da4xw40z74ccr3cb1n2h798b"))))
+    (build-system cargo-build-system)
+    (arguments
+     (list
+      #:imported-modules `(,@%cargo-build-system-modules
+                           ,@%pyproject-build-system-modules)
+      #:modules '((guix build cargo-build-system)
+                  ((guix build pyproject-build-system) #:prefix py:)
+                  (guix build utils))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'patch-cargo-checksums 'relax-requirements
+            ;; pydantic-core updates to the newest available version quite
+            ;; often, including e.g. serde, which Guix does not (yet) update
+            ;; that often to avoid "rust world rebuild".
+           (lambda _
+             (substitute* "Cargo.toml"
+               (("^(serde.* = \\{ *version = \")[^\"]+(\")" _ pre post)
+                (string-append pre "1.0.0" post))
+               (("^(enum_dispatch = \")[^\"]+(\")" _ pre post)
+                (string-append pre "0.3.0" post))
+               (("^(smallvec = \")[^\"]+(\")" _ pre post)
+                (string-append pre "1.11.0" post))
+               (("^(ahash = \")[^\"]+(\")" _ pre post)
+                (string-append pre "0.8.0" post))
+               (("^(url = \")[^\"]+(\")" _ pre post)
+                (string-append pre "2.4.0" post))
+               (("^(base64 = \")[^\"]+(\")" _ pre post)
+                (string-append pre "0.21.0" post))
+               (("^(num-bigint = \")[^\"]+(\")" _ pre post)
+                (string-append pre "0.4.0" post))
+               (("^(uuid = \")[^\"]+(\")" _ pre post)
+                (string-append pre "1.3.0" post)))))
+          (add-before 'patch-cargo-checksums 'fix-crate-private
+           (lambda _
+             (substitute* "src/serializers/fields.rs"
+               (("pub fn (main_to_python|main_serde_serialize|add_computed_fields)"
+                 _ name )
+                (string-append "pub(crate) fn " name)))))
+          (add-after 'prepare-python-module 'build-python-module
+            (assoc-ref py:%standard-phases 'build))
+          (add-after 'build-python-module 'install-python-module
+            (assoc-ref py:%standard-phases 'install)))
+      #:cargo-inputs
+      `(("rust-ahash" ,rust-ahash-0.8)
+        ("rust-base64" ,rust-base64-0.21)
+        ("rust-enum-dispatch" ,rust-enum-dispatch-0.3)
+        ("rust-idna" ,rust-idna-0.5)
+        ("rust-jiter" ,rust-jiter-0.0.6)
+        ("rust-num-bigint" ,rust-num-bigint-0.4)
+        ("rust-pyo3" ,rust-pyo3-0.20)
+        ("rust-python3-dll-a", rust-python3-dll-a-0.2)
+        ("rust-regex" ,rust-regex-1)
+        ("rust-serde" ,rust-serde-1)
+        ("rust-serde-json" ,rust-serde-json-1)
+        ("rust-smallvec" ,rust-smallvec-1)
+        ("rust-speedate" ,rust-speedate-0.13)
+        ("rust-strum" ,rust-strum-0.25)
+        ("rust-strum-macros" ,rust-strum-macros-0.25)
+        ("rust-url" ,rust-url-2)
+        ("rust-uuid" ,rust-uuid-1)
+        ("rust-zerocopy" ,rust-zerocopy-0.7)
+        ("rust-lexical-parse-float" ,rust-lexical-parse-float-0.8))
+      #:install-source? #false))
+    (inputs
+     (list maturin))
+    (native-inputs
+     (list python-hatchling python-pytest python-wrapper))
+    (propagated-inputs (list python-typing-extensions))
+    (home-page "https://github.com/pydantic/pydantic-core")
+    (synopsis "Core functionality for pydantic")
+    (description "This package provides the core functionality for pydantic
+validation and serialization.")
+    (license license:expat)))
+
 (define-public python-pydantic-cli
   (package
     (name "python-pydantic-cli")