diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 34589883..9f4e9cfc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -304,9 +304,10 @@ jobs: python-version: 3.x architecture: ${{ matrix.platform.python-architecture || 'x64' }} - name: Install NASM - run: | - choco install nasm -y - shell: cmd + uses: ilammy/setup-nasm@v1 + with: + version: "2.16.01" + from-source: "false" - name: Build wheels uses: PyO3/maturin-action@v1 with: diff --git a/Cargo.lock b/Cargo.lock index 0a73473e..bd382ab8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1401,9 +1401,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655" +checksum = "229ca13b8a15bb0d1487b81ab975bfcd97513416499a8312011b6036e42e0de4" dependencies = [ "indexmap", "inventory", @@ -1417,18 +1417,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb" +checksum = "70130e2b6dd1ee589a8788026a429561ca5c40fa7a2fa7914c2282eddae24700" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330" +checksum = "5e7ff73c555c286d212d4ce7e5fbda845a973c4f61bd5f160f5f2c3c2a04d1c4" dependencies = [ "libc", "pyo3-build-config", @@ -1436,26 +1436,26 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6" +checksum = "c46d2e5862c7bb8207e3b639f713dda3c499933444784154c11d013c5a691b60" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.119", + "syn 3.0.5", ] [[package]] name = "pyo3-macros-backend" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3" +checksum = "38b89f066f2ae72a2aef52d1537ca2fcd104440ebfadee06e97aa90738a25b9b" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.5", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a7c5fe1c..ea83fda9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ derive-deftly = { version = "1.14.0", default-features = false, features = ["min pingora-runtime = "0.9.0" tokio = { version = "1.53.2", features = ["rt-multi-thread", "sync", "time", "net", "macros"] } tokio-util = { version = "0.7.18", features = ["rt"] } -pyo3 = { version = "0.29.3", features = [ +pyo3 = { version = "0.30.1", features = [ "indexmap", "multiple-pymethods", "extension-module", diff --git a/src/buffer.rs b/src/buffer.rs index 481e6143..7b3d8231 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -25,7 +25,7 @@ use wreq::header::{HeaderCaseName, HeaderName, HeaderValue}; pub struct PyBuffer(BufferView); /// The exporter behind each memoryview; views keep it, and so its bytes, alive. -#[pyclass(frozen, skip_from_py_object)] +#[pyclass(frozen)] struct BufferView(Bytes); // ===== impl PyBuffer ===== diff --git a/src/client.rs b/src/client.rs index 0b9ce475..cc1e2c3e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -41,7 +41,7 @@ use crate::{ /// An IP socket address. #[derive(Clone, Copy, PartialEq, Eq)] -#[pyclass(eq, str, frozen, skip_from_py_object)] +#[pyclass(eq, str, frozen)] pub struct SocketAddr(pub std::net::SocketAddr); #[pymethods] @@ -210,7 +210,7 @@ struct Builder { /// A client for making HTTP requests. /// Unknown keyword arguments raise `TypeError` at call time. #[derive(Clone)] -#[pyclass(subclass, frozen, skip_from_py_object)] +#[pyclass(subclass, frozen)] pub struct Client { inner: wreq::Client, /// Runs this client's requests and response reads, keeping the runtime alive. @@ -228,7 +228,7 @@ pub struct Client { /// A blocking client for making HTTP requests. /// Unknown keyword arguments raise `TypeError` when the function is called. #[derive(Default)] -#[pyclass(name = "Client", subclass, frozen, skip_from_py_object)] +#[pyclass(name = "Client", subclass, frozen)] pub struct BlockingClient(Client); // ===== impl Client ===== diff --git a/src/client/resp/http.rs b/src/client/resp/http.rs index 7b5e1cd5..1796f8e5 100644 --- a/src/client/resp/http.rs +++ b/src/client/resp/http.rs @@ -32,7 +32,7 @@ use crate::{ /// Reads take the body with [`Response::take_bytes`]: a buffered body of known length up to /// the read's limit finishes on the caller, the event loop or a blocking thread, and any other /// body is collected on the runtime by [`Response::collect_later`]. -#[pyclass(subclass, frozen, str, skip_from_py_object)] +#[pyclass(subclass, frozen, str)] pub struct Response { uri: Uri, /// Response head; rebuilt responses share its extensions, including the connection's @@ -70,7 +70,7 @@ enum BodyRead { } /// A blocking response from a request. -#[pyclass(name = "Response", subclass, frozen, str, skip_from_py_object)] +#[pyclass(name = "Response", subclass, frozen, str)] pub struct BlockingResponse(Response); /// Forbids connection reuse on drop unless disarmed by taking the parts. Held by diff --git a/src/client/resp/stream.rs b/src/client/resp/stream.rs index a0d1e75b..1b1ca12d 100644 --- a/src/client/resp/stream.rs +++ b/src/client/resp/stream.rs @@ -42,7 +42,7 @@ pub enum Frame { /// /// Sync and async iteration share [`Streamer::next`]; [`Iteration`] picks the ready frames /// the caller reads and the error that ends iteration. -#[pyclass(subclass, frozen, skip_from_py_object)] +#[pyclass(subclass, frozen)] pub struct Streamer { reader: Arc, runtime: Runtime, diff --git a/src/header.rs b/src/header.rs index aecbbf63..efd1db38 100644 --- a/src/header.rs +++ b/src/header.rs @@ -13,12 +13,12 @@ use crate::{ /// An HTTP header map whose names and values are exposed as read-only memoryviews. #[derive(Clone)] -#[pyclass(subclass, str, skip_from_py_object)] +#[pyclass(subclass, str)] pub struct HeaderMap(pub header::HeaderMap); /// An HTTP original header map whose iterator exposes read-only memoryviews. #[derive(Clone)] -#[pyclass(subclass, str, skip_from_py_object)] +#[pyclass(subclass, str)] pub struct OrigHeaderMap(pub header::OrigHeaderMap); // ===== impl HeaderMap ===== diff --git a/src/http.rs b/src/http.rs index af1d09db..572aa113 100644 --- a/src/http.rs +++ b/src/http.rs @@ -28,7 +28,7 @@ define_enum!( /// HTTP status code. #[derive(Clone, Copy)] -#[pyclass(subclass, frozen, str, skip_from_py_object)] +#[pyclass(subclass, frozen, str)] pub struct StatusCode(pub wreq::StatusCode); impl<'a, 'py> FromPyObject<'a, 'py> for StatusCode { diff --git a/src/runtime.rs b/src/runtime.rs index 96d95994..a23a44d9 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -49,7 +49,7 @@ pub enum Scheduler { /// Shared Tokio runtime, released after its clients and active work are dropped. #[derive(Clone)] -#[pyclass(frozen, skip_from_py_object)] +#[pyclass(frozen)] pub struct Runtime { /// Shared owner; `None` only once `Drop` has taken it to shut the runtime down. inner: Option>,