diff --git a/docs/notes/2.32.x.md b/docs/notes/2.32.x.md index 470d786a58a..d655fce25be 100644 --- a/docs/notes/2.32.x.md +++ b/docs/notes/2.32.x.md @@ -147,6 +147,8 @@ The version of [Pex](https://github.com/pex-tool/pex) used by the Python backend ### Plugin API changes +PyO3, the interface crate between Rust and Python, has been upgraded to v0.28.3. + ## Full Changelog For the full changelog, see the individual GitHub Releases for this series: diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock index 89b866d52d8..b9ef77bdb00 100644 --- a/src/rust/Cargo.lock +++ b/src/rust/Cargo.lock @@ -2486,15 +2486,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -2601,7 +2592,7 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.7.1", + "memoffset", "pin-utils", ] @@ -3258,37 +3249,34 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.27.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab53c047fcd1a1d2a8820fe84f05d6be69e9526be40cb03b73f86b6b03e6d87d" +checksum = "91fd8e38a3b50ed1167fb981cd6fd60147e091784c427b8f7183a7ee32c31c12" dependencies = [ - "indoc", "libc", "lock_api", - "memoffset 0.9.1", "once_cell", "parking_lot 0.12.5", "portable-atomic", "pyo3-build-config", "pyo3-ffi", "pyo3-macros", - "unindent", ] [[package]] name = "pyo3-build-config" -version = "0.27.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b455933107de8642b4487ed26d912c2d899dec6114884214a0b3bb3be9261ea6" +checksum = "e368e7ddfdeb98c9bca7f8383be1648fd84ab466bf2bc015e94008db6d35611e" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.27.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c85c9cbfaddf651b1221594209aed57e9e5cff63c4d11d1feead529b872a089" +checksum = "7f29e10af80b1f7ccaf7f69eace800a03ecd13e883acfacc1e5d0988605f651e" dependencies = [ "libc", "pyo3-build-config", @@ -3296,9 +3284,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.27.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b10c9bf9888125d917fb4d2ca2d25c8df94c7ab5a52e13313a07e050a3b02" +checksum = "df6e520eff47c45997d2fc7dd8214b25dd1310918bbb2642156ef66a67f29813" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -3308,9 +3296,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.27.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b51720d314836e53327f5871d4c0cfb4fb37cc2c4a11cc71907a86342c40f9" +checksum = "c4cdc218d835738f81c2338f822078af45b4afdf8b2e33cbb5916f108b813acb" dependencies = [ "heck", "proc-macro2", @@ -4315,9 +4303,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.13.2" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" +checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" [[package]] name = "task_executor" @@ -4891,12 +4879,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unindent" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" - [[package]] name = "unit-prefix" version = "0.5.1" diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml index d00c80d25b4..f094e965089 100644 --- a/src/rust/Cargo.toml +++ b/src/rust/Cargo.toml @@ -194,8 +194,8 @@ prodash = { git = "https://github.com/stuhood/prodash", rev = "stuhood/raw-messa prost = "0.13" prost-build = "0.13" prost-types = "0.13" -pyo3 = { version = "0.27.2", features = ["parking_lot"] } -pyo3-build-config = "0.27.2" +pyo3 = { version = "0.28.3", features = ["parking_lot"] } +pyo3-build-config = "0.28.3" rand = "0.10.0" regex = "1.12.3" reqwest = { version = "0.12", default-features = false } diff --git a/src/rust/engine/src/externs/address.rs b/src/rust/engine/src/externs/address.rs index a90662f6062..d2151ec1106 100644 --- a/src/rust/engine/src/externs/address.rs +++ b/src/rust/engine/src/externs/address.rs @@ -437,7 +437,7 @@ fn split_on_longest_dir_prefix<'a, 'b>( matched } -#[pyclass(name = "Address")] +#[pyclass(name = "Address", from_py_object)] #[derive(Clone, Hash, Eq, PartialEq, Ord, PartialOrd)] pub struct Address { // NB: Field ordering is deliberate, so that Ord will roughly match `self.spec`. diff --git a/src/rust/engine/src/externs/dep_inference.rs b/src/rust/engine/src/externs/dep_inference.rs index 98f912417ff..1ecfdc105c7 100644 --- a/src/rust/engine/src/externs/dep_inference.rs +++ b/src/rust/engine/src/externs/dep_inference.rs @@ -20,7 +20,7 @@ pub(crate) fn register(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_class::() } -#[pyclass(name = "InferenceMetadata")] +#[pyclass(name = "InferenceMetadata", from_py_object)] #[derive(Clone, Debug, PartialEq)] pub struct PyInferenceMetadata(pub dependency_inference_request::Metadata); @@ -78,7 +78,7 @@ impl PyInferenceMetadata { } } -#[pyclass(name = "NativeDependenciesRequest")] +#[pyclass(name = "NativeDependenciesRequest", from_py_object)] #[derive(Clone, Debug, PartialEq)] pub struct PyNativeDependenciesRequest { pub directory_digest: DirectoryDigest, diff --git a/src/rust/engine/src/externs/fs.rs b/src/rust/engine/src/externs/fs.rs index 2b288470b29..50560832d96 100644 --- a/src/rust/engine/src/externs/fs.rs +++ b/src/rust/engine/src/externs/fs.rs @@ -56,7 +56,7 @@ pub fn possible_store_missing_digest(e: store::StoreError) -> PyErr { failure.into() } -#[pyclass(name = "Digest")] +#[pyclass(name = "Digest", from_py_object)] #[derive(Clone, Debug, PartialEq, Eq)] pub struct PyDigest(pub DirectoryDigest); @@ -114,7 +114,7 @@ impl PyDigest { } } -#[pyclass(name = "FileDigest")] +#[pyclass(name = "FileDigest", from_py_object)] #[derive(Debug, Clone, PartialEq, Eq)] pub struct PyFileDigest(pub Digest); @@ -501,7 +501,12 @@ impl PyFilespecMatcher { // ----------------------------------------------------------------------------- /// The kind of path (e.g., file, directory, symlink) as identified in `PathMetadata` -#[pyclass(name = "PathMetadataKind", rename_all = "UPPERCASE", eq)] +#[pyclass( + name = "PathMetadataKind", + rename_all = "UPPERCASE", + eq, + from_py_object +)] #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum PyPathMetadataKind { File, @@ -530,7 +535,7 @@ impl From for fs::PathMetadataKind { } /// Expanded version of `Stat` when access to additional filesystem attributes is necessary. -#[pyclass(name = "PathMetadata")] +#[pyclass(name = "PathMetadata", from_py_object)] #[derive(Clone, Debug, Eq, PartialEq)] pub struct PyPathMetadata(pub fs::PathMetadata); @@ -652,7 +657,14 @@ impl PyPathMetadata { } /// The path's namespace (to separate buildroot and system paths) -#[pyclass(name = "PathNamespace", rename_all = "UPPERCASE", frozen, eq, hash)] +#[pyclass( + name = "PathNamespace", + rename_all = "UPPERCASE", + frozen, + eq, + hash, + from_py_object +)] #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)] pub enum PyPathNamespace { Workspace, diff --git a/src/rust/engine/src/externs/mod.rs b/src/rust/engine/src/externs/mod.rs index edaf8593e95..51e4e352685 100644 --- a/src/rust/engine/src/externs/mod.rs +++ b/src/rust/engine/src/externs/mod.rs @@ -65,8 +65,8 @@ create_exception!(native_engine, EngineError, PyException); create_exception!(native_engine, IntrinsicError, EngineError); create_exception!(native_engine, IncorrectProductError, EngineError); +#[pyclass(from_py_object)] #[derive(Clone)] -#[pyclass] pub struct PyFailure(pub Failure); #[pymethods] diff --git a/src/rust/engine/src/externs/process.rs b/src/rust/engine/src/externs/process.rs index b466314c942..f9ea19993c4 100644 --- a/src/rust/engine/src/externs/process.rs +++ b/src/rust/engine/src/externs/process.rs @@ -17,7 +17,7 @@ pub(crate) fn register(m: &Bound<'_, PyModule>) -> PyResult<()> { Ok(()) } -#[pyclass(name = "ProcessExecutionEnvironment")] +#[pyclass(name = "ProcessExecutionEnvironment", from_py_object)] #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct PyProcessExecutionEnvironment { pub environment: ProcessExecutionEnvironment, diff --git a/src/rust/engine/src/externs/target.rs b/src/rust/engine/src/externs/target.rs index 81be9ea37d9..767667fbf70 100644 --- a/src/rust/engine/src/externs/target.rs +++ b/src/rust/engine/src/externs/target.rs @@ -118,7 +118,7 @@ fn validate_choices( Ok(()) } -#[pyclass(name = "_NoValue")] +#[pyclass(name = "_NoValue", from_py_object)] #[derive(Clone)] struct NoFieldValue;