#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![allow(clippy::derive_partial_eq_without_eq)]
#![cfg_attr(docsrs, feature(doc_cfg))]
pub mod context;
mod error;
pub mod lambda;
pub mod logging;
pub mod middleware;
mod server;
mod socket;
pub mod tls;
pub mod types;
mod util;
#[doc(inline)]
pub use error::{PyError, PyMiddlewareException};
#[doc(inline)]
pub use logging::{py_tracing_event, PyTracingHandler};
#[doc(inline)]
pub use middleware::{PyMiddlewareHandler, PyMiddlewareLayer, PyRequest, PyResponse};
#[doc(inline)]
pub use server::{PyApp, PyHandler};
#[doc(inline)]
pub use socket::PySocket;
#[doc(inline)]
pub use util::error::{rich_py_err, RichPyErr};
#[cfg(test)]
mod tests {
use std::sync::Once;
use pyo3::{PyErr, Python};
use pyo3_asyncio::TaskLocals;
static INIT: Once = Once::new();
pub(crate) fn initialize() -> TaskLocals {
INIT.call_once(|| {
pyo3::prepare_freethreaded_python();
});
Python::with_gil(|py| {
let asyncio = py.import("asyncio")?;
let event_loop = asyncio.call_method0("new_event_loop")?;
asyncio.call_method1("set_event_loop", (event_loop,))?;
Ok::<TaskLocals, PyErr>(TaskLocals::new(event_loop))
})
.unwrap()
}
}