pub struct RiPythonModuleAdapter {
pub name: String,
pub is_critical: bool,
pub priority: i32,
pub dependencies: Vec<String>,
}Expand description
Python module adapter that implements RiModule trait.
This structure enables Python modules to integrate with the Ri module system
by implementing the AsyncServiceModule trait. Python code can create instances
of this adapter with custom configuration, and they will participate in the
module lifecycle just like Rust-native modules.
§Thread Safety
This structure is designed to be safely used across threads when combined with the appropriate Python GIL management. The underlying implementation ensures proper synchronization during lifecycle callbacks.
§Lifecycle Methods
All lifecycle methods (init, before_start, start, after_start,
before_shutdown, shutdown, after_shutdown) have default implementations
that return Ok(()), allowing Python modules to override only the methods
they need.
§Python Usage
class MyPythonModule:
def name(&self):
return "python_module"
async def start(&self, ctx):
print("Starting Python module")
return None
adapter = dms.RiPythonModuleAdapter(name="my_module")
adapter.name = "python_module"Fields§
§name: String§is_critical: bool§priority: i32§dependencies: Vec<String>Trait Implementations§
Source§impl AsyncServiceModule for RiPythonModuleAdapter
impl AsyncServiceModule for RiPythonModuleAdapter
Source§fn is_critical(&self) -> bool
fn is_critical(&self) -> bool
Source§fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn init<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn before_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn before_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn after_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn after_start<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn before_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn before_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn after_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn after_shutdown<'life0, 'life1, 'async_trait>(
&'life0 mut self,
_ctx: &'life1 mut RiServiceContext,
) -> Pin<Box<dyn Future<Output = RiResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl Clone for RiPythonModuleAdapter
impl Clone for RiPythonModuleAdapter
Source§fn clone(&self) -> RiPythonModuleAdapter
fn clone(&self) -> RiPythonModuleAdapter
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'py> IntoPyObject<'py> for RiPythonModuleAdapter
impl<'py> IntoPyObject<'py> for RiPythonModuleAdapter
Source§type Target = RiPythonModuleAdapter
type Target = RiPythonModuleAdapter
Source§type Output = Bound<'py, <RiPythonModuleAdapter as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <RiPythonModuleAdapter as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for RiPythonModuleAdapter
impl PyClass for RiPythonModuleAdapter
Source§impl PyClassImpl for RiPythonModuleAdapter
impl PyClassImpl for RiPythonModuleAdapter
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"Python module adapter that implements RiModule trait.\n\nThis structure enables Python modules to integrate with the Ri module system\nby implementing the `AsyncServiceModule` trait. Python code can create instances\nof this adapter with custom configuration, and they will participate in the\nmodule lifecycle just like Rust-native modules.\n\n## Thread Safety\n\nThis structure is designed to be safely used across threads when combined\nwith the appropriate Python GIL management. The underlying implementation\nensures proper synchronization during lifecycle callbacks.\n\n## Lifecycle Methods\n\nAll lifecycle methods (`init`, `before_start`, `start`, `after_start`,\n`before_shutdown`, `shutdown`, `after_shutdown`) have default implementations\nthat return `Ok(())`, allowing Python modules to override only the methods\nthey need.\n\n## Python Usage\n\n```python\n\n\nclass MyPythonModule:\n def name(&self):\n return \"python_module\"\n\n async def start(&self, ctx):\n print(\"Starting Python module\")\n return None\n\nadapter = dms.RiPythonModuleAdapter(name=\"my_module\")\nadapter.name = \"python_module\"\n```\x00"
const RAW_DOC: &'static CStr = c"Python module adapter that implements RiModule trait.\n\nThis structure enables Python modules to integrate with the Ri module system\nby implementing the `AsyncServiceModule` trait. Python code can create instances\nof this adapter with custom configuration, and they will participate in the\nmodule lifecycle just like Rust-native modules.\n\n## Thread Safety\n\nThis structure is designed to be safely used across threads when combined\nwith the appropriate Python GIL management. The underlying implementation\nensures proper synchronization during lifecycle callbacks.\n\n## Lifecycle Methods\n\nAll lifecycle methods (`init`, `before_start`, `start`, `after_start`,\n`before_shutdown`, `shutdown`, `after_shutdown`) have default implementations\nthat return `Ok(())`, allowing Python modules to override only the methods\nthey need.\n\n## Python Usage\n\n```python\n\n\nclass MyPythonModule:\n def name(&self):\n return \"python_module\"\n\n async def start(&self, ctx):\n print(\"Starting Python module\")\n return None\n\nadapter = dms.RiPythonModuleAdapter(name=\"my_module\")\nadapter.name = \"python_module\"\n```\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<RiPythonModuleAdapter>
type ThreadChecker = SendablePyClass<RiPythonModuleAdapter>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for RiPythonModuleAdapter
impl PyClassNewTextSignature for RiPythonModuleAdapter
const TEXT_SIGNATURE: &'static str = "(name)"
Source§impl PyMethods<RiPythonModuleAdapter> for PyClassImplCollector<RiPythonModuleAdapter>
impl PyMethods<RiPythonModuleAdapter> for PyClassImplCollector<RiPythonModuleAdapter>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for RiPythonModuleAdapter
impl PyTypeInfo for RiPythonModuleAdapter
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for RiPythonModuleAdapter
impl ExtractPyClassWithClone for RiPythonModuleAdapter
Auto Trait Implementations§
impl Freeze for RiPythonModuleAdapter
impl RefUnwindSafe for RiPythonModuleAdapter
impl Send for RiPythonModuleAdapter
impl Sync for RiPythonModuleAdapter
impl Unpin for RiPythonModuleAdapter
impl UnsafeUnpin for RiPythonModuleAdapter
impl UnwindSafe for RiPythonModuleAdapter
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more