diff --git a/Cargo.lock b/Cargo.lock index 042843c..a46d284 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -171,17 +171,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" -[[package]] -name = "chacha20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" -dependencies = [ - "cfg-if", - "cpufeatures 0.3.1", - "rand_core 0.10.1", -] - [[package]] name = "chrono" version = "0.4.45" @@ -226,15 +215,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpufeatures" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" -dependencies = [ - "libc", -] - [[package]] name = "crunchy" version = "0.2.4" @@ -248,7 +228,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", - "rand_core 0.6.4", + "rand_core", "subtle", "zeroize", ] @@ -281,7 +261,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", @@ -418,7 +398,7 @@ dependencies = [ "hkdf", "pem-rfc7468", "pkcs8", - "rand_core 0.6.4", + "rand_core", "sec1", "subtle", "zeroize", @@ -475,7 +455,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -624,29 +604,11 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "r-efi 5.3.0", + "r-efi", "wasip2", "wasm-bindgen", ] -[[package]] -name = "getrandom" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" -dependencies = [ - "cfg-if", - "libc", - "r-efi 6.0.0", - "rand_core 0.10.1", -] - -[[package]] -name = "glob" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" - [[package]] name = "globset" version = "0.4.20" @@ -667,7 +629,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ "ff", - "rand_core 0.6.4", + "rand_core", "subtle", ] @@ -1020,9 +982,9 @@ dependencies = [ [[package]] name = "jsonschema" -version = "0.52.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee5867390f14ee43278d8d05d3af5f5314eeccb4684e6049033f2ba4ae3d4ae" +checksum = "b6a806f80c1f5560431009ce5ec29b59d38f950e0cd7db5f1b8925e6d8104e21" dependencies = [ "ahash", "bytecount", @@ -1048,25 +1010,27 @@ dependencies = [ [[package]] name = "jsonschema-regex" -version = "0.52.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7bbc0f53dcb425cf3bae539be26b406b7053e6995e34e4b04477091e600044" +checksum = "cb862addfa7782108933abcf842fe25334523a9df5b89ea4d9620e3dd7b42181" dependencies = [ "regex-syntax", ] [[package]] name = "jsonschema-value" -version = "0.52.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3e24abcd5f7eff512eb6bb915ac67772f2e7142ae5b5ac67b4ac75bd417d46" +checksum = "a05cd404c5ff6e2731dbbf7e290a27417750acfb59e329560a1d0af384c93fb0" dependencies = [ "ahash", "bytecount", "fraction", + "getrandom 0.3.4", "num-cmp", "num-traits", "serde_json", + "zmij", ] [[package]] @@ -1083,7 +1047,7 @@ dependencies = [ "p256", "p384", "pem", - "rand 0.8.8", + "rand", "rsa", "serde", "serde_json", @@ -1270,7 +1234,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.8", + "rand", "smallvec", "zeroize", ] @@ -1395,7 +1359,6 @@ dependencies = [ "ahash", "ctrlc", "futures-util", - "glob", "http-body-util", "hyper", "hyper-util", @@ -1406,7 +1369,6 @@ dependencies = [ "pyo3", "pyo3-async-runtimes", "pyo3-stub-gen", - "rand 0.10.2", "regex", "serde", "serde_json", @@ -1514,7 +1476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ "phf_shared", - "rand 0.8.8", + "rand", ] [[package]] @@ -1740,12 +1702,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "r-efi" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" - [[package]] name = "rand" version = "0.8.8" @@ -1754,18 +1710,7 @@ checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" -dependencies = [ - "chacha20", - "getrandom 0.4.3", - "rand_core 0.10.1", + "rand_core", ] [[package]] @@ -1775,7 +1720,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -1787,12 +1732,6 @@ dependencies = [ "getrandom 0.2.17", ] -[[package]] -name = "rand_core" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" - [[package]] name = "rawpointer" version = "0.2.1" @@ -1830,9 +1769,9 @@ dependencies = [ [[package]] name = "referencing" -version = "0.52.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6326ce79629af4702ac033666390011ccc70fe82ffedd62824d061f133bd10b" +checksum = "a3b4a92fac7e28c27de3ad26df2ecb9e652f227b258e845af034052e5b22c96c" dependencies = [ "ahash", "fluent-uri", @@ -1897,7 +1836,7 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core 0.6.4", + "rand_core", "signature", "spki", "subtle", @@ -2082,7 +2021,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures 0.2.17", + "cpufeatures", "digest", ] @@ -2109,7 +2048,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core 0.6.4", + "rand_core", ] [[package]] @@ -2587,7 +2526,7 @@ dependencies = [ "getopts", "log", "phf_codegen", - "rand 0.8.8", + "rand", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 13490c7..d3081d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ stub_gen = ["pyo3-stub-gen/infer_signature"] [dependencies] # Python bindings -pyo3 = ">=0.29.0" +pyo3 = "0.29.0" pyo3-async-runtimes = { version = "0.29.0", features = ["tokio-runtime"] } pyo3-stub-gen = { git = "https://github.com/Jij-Inc/pyo3-stub-gen", branch = "main", default-features = false, features = [ "either", @@ -41,7 +41,7 @@ matchit = { git = "https://github.com/ibraheemdev/matchit", branch = "master" } # Serialization / Data formats serde = "1.0.229" serde_json = "1.0.151" -jsonschema = { version = "0.52.0", default-features = false } +jsonschema = { version = "0.56.0", default-features = false } # Template engines tera = { version = "2", features = ["glob_fs", "fast"] } @@ -49,8 +49,6 @@ tera = { version = "2", features = ["glob_fs", "fast"] } # Utilities ahash = "0.8.12" ctrlc = "3.5.2" -glob = "0.3.4" -rand = "0.10.2" url = "2.5.8" jsonwebtoken = { version = "11.0.0", features = ["rust_crypto"] } diff --git a/src/into_response.rs b/src/into_response.rs index 7cc03fc..109cda7 100644 --- a/src/into_response.rs +++ b/src/into_response.rs @@ -102,7 +102,8 @@ impl From for Response { }; let response = Response::from(status); let detail = value.value(py).to_string().replace('"', "'"); - response.set_body(format!(r#"{{"detail": "{}"}}"#, detail)) + let body = serde_json::json!({ "detail": detail }).to_string(); + response.set_body(body) }) } } diff --git a/src/lib.rs b/src/lib.rs index 2d00ad6..45bf9b6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -51,7 +51,7 @@ pyo3_stub_gen::define_stub_info_gatherer!(stub_info); struct ProcessRequest { match_route: Option, middlewares: Option>, - request: Arc, + request: Request, response_sender: oneshot::Sender, cors: Option>, wrapper: Option>>, @@ -451,7 +451,6 @@ impl HttpServer { #[pyo3(signature=(workers=None))] fn run<'py>(&self, workers: Option, py: Python<'py>) -> PyResult> { let server = self.clone(); - if self.is_async { future_into_py(py, async move { server.run_server().await }) } else { diff --git a/src/multipart.rs b/src/multipart.rs index ac4f551..4b067c5 100644 --- a/src/multipart.rs +++ b/src/multipart.rs @@ -1,7 +1,11 @@ use ahash::HashMap; use futures_util::stream; use hyper::body::Bytes; -use pyo3::{exceptions::PyValueError, prelude::*, types::PyBytes}; +use pyo3::{ + exceptions::{PyKeyError, PyValueError}, + prelude::*, + types::PyBytes, +}; use pyo3_stub_gen::derive::*; use crate::IntoPyException; @@ -108,17 +112,28 @@ pub struct Multipart { impl Multipart { async fn parse_field(&mut self, field: multer::Field<'_>) -> PyResult<()> { - let name = field.name().unwrap_or_default().to_string(); + let name = field + .name() + .ok_or_else(|| PyKeyError::new_err("missing field 'name'"))? + .to_string(); let value = field.text().await.into_py_exception()?; self.fields.insert(name, value); Ok(()) } async fn parse_file(&mut self, mut field: multer::Field<'_>) -> PyResult<()> { - let name = field.file_name().unwrap().to_string(); - let content_type = field.content_type().unwrap().to_string(); - let field_name = field.name().unwrap_or_default().to_string(); - + let name = field + .file_name() + .ok_or_else(|| PyKeyError::new_err("missing 'file_name'"))? + .to_string(); + let content_type = field + .content_type() + .ok_or_else(|| PyKeyError::new_err("missing 'content-type'"))? + .to_string(); + let field_name = field + .name() + .ok_or_else(|| PyKeyError::new_err("missing field 'name'"))? + .to_string(); let mut data = Vec::new(); while let Some(chunk) = field.chunk().await.into_py_exception()? { data.extend_from_slice(&chunk); diff --git a/src/request.rs b/src/request.rs index d286cbf..634cae5 100644 --- a/src/request.rs +++ b/src/request.rs @@ -290,7 +290,7 @@ impl Request { let process_request = ProcessRequest { match_route: Some(owned_match_route), middlewares, - request: Arc::new(self), + request: self, response_sender, wrapper: ctx.wrapper.clone(), cors: ctx.cors.clone(), @@ -308,7 +308,7 @@ impl Request { let process_request = ProcessRequest { match_route: None, middlewares: None, - request: Arc::new(self), + request: self, response_sender, wrapper: ctx.wrapper.clone(), cors: ctx.cors.clone(), diff --git a/src/response.rs b/src/response.rs index a32fd57..8529fc5 100644 --- a/src/response.rs +++ b/src/response.rs @@ -289,9 +289,8 @@ impl Response { pub(crate) fn call_wrapper(mut self, pr: &ProcessRequest) -> Self { if let Some(wrapper) = &pr.wrapper { - let request = (*pr.request).clone(); self = Python::attach(|py| { - let result = wrapper.call(py, (request, self), None)?; + let result = wrapper.call(py, (pr.request.clone(), self), None)?; convert_to_response(result, py) }) .unwrap_or_else(Response::from);