nautilus_network/python/
mod.rs1#![allow(unexpected_cfgs)]
23
24pub mod http;
25pub mod socket;
26pub mod websocket;
27
28use std::num::NonZeroU32;
29
30use pyo3::{exceptions::PyException, prelude::*};
31
32use crate::{
33 python::{
34 http::{HttpClientBuildError, HttpError, HttpInvalidProxyError, HttpTimeoutError},
35 websocket::WebSocketClientError,
36 },
37 ratelimiter::quota::Quota,
38};
39
40#[pymethods]
41impl Quota {
42 #[staticmethod]
48 pub fn rate_per_second(max_burst: u32) -> PyResult<Self> {
49 match NonZeroU32::new(max_burst) {
50 Some(max_burst) => Ok(Self::per_second(max_burst)),
51 None => Err(PyErr::new::<PyException, _>(
52 "Max burst capacity should be a non-zero integer",
53 )),
54 }
55 }
56
57 #[staticmethod]
63 pub fn rate_per_minute(max_burst: u32) -> PyResult<Self> {
64 match NonZeroU32::new(max_burst) {
65 Some(max_burst) => Ok(Self::per_minute(max_burst)),
66 None => Err(PyErr::new::<PyException, _>(
67 "Max burst capacity should be a non-zero integer",
68 )),
69 }
70 }
71
72 #[staticmethod]
78 pub fn rate_per_hour(max_burst: u32) -> PyResult<Self> {
79 match NonZeroU32::new(max_burst) {
80 Some(max_burst) => Ok(Self::per_hour(max_burst)),
81 None => Err(PyErr::new::<PyException, _>(
82 "Max burst capacity should be a non-zero integer",
83 )),
84 }
85 }
86}
87
88#[pymodule]
94pub fn network(_py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
95 m.add_class::<crate::http::HttpClient>()?;
96 m.add_class::<crate::http::HttpMethod>()?;
97 m.add_class::<crate::http::HttpResponse>()?;
98 m.add_class::<crate::ratelimiter::quota::Quota>()?;
99 m.add_class::<crate::websocket::WebSocketClient>()?;
100 m.add_class::<crate::websocket::WebSocketConfig>()?;
101 m.add_class::<crate::socket::SocketClient>()?;
102 m.add_class::<crate::socket::SocketConfig>()?;
103
104 m.add(
105 "WebSocketClientError",
106 m.py().get_type::<WebSocketClientError>(),
107 )?;
108 m.add("HttpError", m.py().get_type::<HttpError>())?;
109 m.add("HttpTimeoutError", m.py().get_type::<HttpTimeoutError>())?;
110 m.add(
111 "HttpInvalidProxyError",
112 m.py().get_type::<HttpInvalidProxyError>(),
113 )?;
114 m.add(
115 "HttpClientBuildError",
116 m.py().get_type::<HttpClientBuildError>(),
117 )?;
118
119 m.add_function(wrap_pyfunction!(http::http_get, m)?)?;
120 m.add_function(wrap_pyfunction!(http::http_post, m)?)?;
121 m.add_function(wrap_pyfunction!(http::http_patch, m)?)?;
122 m.add_function(wrap_pyfunction!(http::http_delete, m)?)?;
123 m.add_function(wrap_pyfunction!(http::http_download, m)?)?;
124
125 Ok(())
126}