Add generated API doc to RST
[ric-plt/xapp-frame-py.git] / docs / rmr_api.rst
index e3d5f0e..d1f6d98 100644 (file)
-RMR
-====
+RMR Python Bindings
+===================
 
 Overview
 --------
-The xapp framework repo includes a python submodule called `rmr`.
-This package (`ricxappframe.rmr`) is a CTYPES wrapper around the C rmr library.
-Most Xapp users will never use this package natively; however python apps that need access to the low level rmr API can use this package.
-Usage of this python package requires that you have the c rmr libraries installed.
 
+The xapp python framework repository includes a python submodule
+called `rmr`.  This package (`ricxappframe.rmr`) is a CTYPES wrapper
+around the RMR shared library.  Most Xapp users will never use this
+package natively; however python apps that need access to the low
+level RMR API can use this package.  Usage of this python package
+requires that you have the RMR shared-object library installed.
 
-.. API
-.. ---
 
-.. .. automodule:: ricxappframe.rmr.rmr
-..   :members:
+RMR API
+-------
+
+..
+  Sphinx can generate API documentation by running Python to pull doc strings
+  from the binding code using these Sphinx directives that are commented out:
+         .. automodule:: ricxappframe.rmr.rmr
+             :members:
+  But that approach requires the RMR library to be installed, which is difficult
+  to achieve at ReadTheDocs.io.  Instead, the RST below was generated and captured
+  according to the method shown at
+  https://stackoverflow.com/questions/2668187/make-sphinx-generate-rst-class-documentation-from-pydoc
+
+
+
+.. py:module:: ricxappframe.rmr.rmr
+
+
+..
+    !! processed by numpydoc !!
+
+.. py:class:: rmr_mbuf_t
+   :module: ricxappframe.rmr.rmr
+
+
+   Reimplementation of rmr_mbuf_t which is in an unaccessible header file (src/common/include/rmr.h)
+
+   | typedef struct {
+   |    int     state;          // state of processing
+   |    int     mtype;          // message type
+   |    int     len;            // length of data in the payload (send or received)
+   |    unsigned char* payload; // transported data
+   |    unsigned char* xaction; // pointer to fixed length transaction id bytes
+   |    int sub_id;             // subscription id
+   |    int      tp_state;      // transport state (a.k.a errno)
+   |
+   | these things are off limits to the user application
+   |
+   |    void*   tp_buf;         // underlying transport allocated pointer (e.g. nng message)
+   |    void*   header;         // internal message header (whole buffer: header+payload)
+   |    unsigned char* id;      // if we need an ID in the message separate from the xaction id
+   |    int flags;              // various MFL (private) flags as needed
+   |    int alloc_len;          // the length of the allocated space (hdr+payload)
+   | } rmr_mbuf_t;
+
+   We do not include the fields we are not supposed to mess with
+
+   RE PAYLOADs type below, see the documentation for c_char_p:
+      class ctypes.c_char_p
+          Represents the C char * datatype when it points to a zero-terminated string. For a general character pointer that may also point to binary data, POINTER(c_char) must be used. The constructor accepts an integer address, or a bytes object.
+
+
+
+
+
+
+
+
+
+
+
+
+
+   :Attributes:
+
+       **len**
+           Structure/Union member
+
+       **mtype**
+           Structure/Union member
+
+       **payload**
+           Structure/Union member
+
+       **state**
+           Structure/Union member
+
+       **sub_id**
+           Structure/Union member
+
+       **tp_state**
+           Structure/Union member
+
+       **xaction**
+           Structure/Union member
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_init(uproto_port, max_msg_size, flags)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to rmr C documentation for rmr_init
+   extern void* rmr_init(char* uproto_port, int max_msg_size, int flags)
+
+   This python function checks that the context is not None and raises
+   an excption if it is.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_ready(vctx)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to rmr C documentation for rmr_ready
+   extern int rmr_ready(void* vctx)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_close(vctx)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to rmr C documentation for rmr_close
+   extern void rmr_close(void* vctx)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_set_stimeout(vctx, time)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_set_stimeout
+   extern int rmr_set_stimeout(void* vctx, int time)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_alloc_msg(vctx, size, payload=None, gen_transaction_id=False, mtype=None, meid=None, sub_id=None, fixed_transaction_id=None)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_alloc_msg
+   extern rmr_mbuf_t* rmr_alloc_msg(void* vctx, int size)
+   TODO: on next API break, clean up transaction_id ugliness. Kept for now to preserve API.
+
+   if payload is not None, attempts to set the payload
+   if gen_transaction_id is True, it generates and sets a transaction id. Note, fixed_transaction_id supersedes this option
+   if mtype is not None, sets the sbuf's message type
+   if meid is not None, sets the sbuf's meid
+   if sub_id is not None, sets the sbud's subscription id
+   if fixed_transaction_id is set, it deterministically sets the transaction_id. This overrides the option gen_transation_id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_realloc_payload(ptr_mbuf, new_len, copy=False, clone=False)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_realloc_payload().
+   extern rmr_mbuf_t* rmr_realloc_payload(rmr_mbuf_t*, int, int, int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_free_msg(mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_free_msg
+   extern void rmr_free_msg(rmr_mbuf_t* mbuf )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_payload_size(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_payload_size
+   extern int rmr_payload_size(rmr_mbuf_t* msg)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_send_msg(vctx, ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_send_msg
+   extern rmr_mbuf_t* rmr_send_msg(void* vctx, rmr_mbuf_t* msg)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_rcv_msg(vctx, ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_rcv_msg
+   extern rmr_mbuf_t* rmr_rcv_msg(void* vctx, rmr_mbuf_t* old_msg)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_torcv_msg(vctx, ptr_mbuf, ms_to)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_torcv_msg
+   extern rmr_mbuf_t* rmr_torcv_msg(void* vctx, rmr_mbuf_t* old_msg, int ms_to)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_rts_msg(vctx, ptr_mbuf, payload=None, mtype=None)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_rts_msg
+   extern rmr_mbuf_t*  rmr_rts_msg(void* vctx, rmr_mbuf_t* msg)
+
+   additional features beyond c-rmr:
+       if payload is not None, attempts to set the payload
+       if mtype is not None, sets the sbuf's message type
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_call(vctx, ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_call
+   extern rmr_mbuf_t* rmr_call(void* vctx, rmr_mbuf_t* msg)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_set_meid(ptr_mbuf, byte_str)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_bytes2meid
+   extern int rmr_bytes2meid(rmr_mbuf_t* mbuf, unsigned char const* src, int len);
+
+   Caution:  the meid length supported in an RMR message is 32 bytes, but C applications
+   expect this to be a nil terminated string and thus only 31 bytes are actually available.
+
+   Raises: exceptions.MeidSizeOutOfRang
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_get_meid(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Get the managed equipment ID (meid) from the message header.
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+   :Returns:
+
+       string:
+           meid
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: rmr_get_src(ptr_mbuf, dest)
+   :module: ricxappframe.rmr.rmr
+
+
+   Refer to the rmr C documentation for rmr_get_src
+   extern unsigned char*  rmr_get_src(rmr_mbuf_t* mbuf, unsigned char* dest);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: get_payload(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Given a rmr_buf_t*, get it's binary payload as a bytes object
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+   :Returns:
+
+       bytes:
+           the message payload
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: get_xaction(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   given a rmr_buf_t*, get it's transaction id
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+   :Returns:
+
+       bytes:
+           the transaction id
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: message_summary(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Returns a dict that contains the fields of a message
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+   :Returns:
+
+       dict:
+           dict message summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: set_payload_and_length(byte_str, ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   | Set an rmr payload and content length
+   | In place method, no return
+
+
+   :Parameters:
+
+       **byte_str: bytes**
+           the bytes to set the payload to
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: generate_and_set_transaction_id(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Generate a UUID and Set an rmr transaction id to it
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: set_transaction_id(ptr_mbuf, tid_bytes)
+   :module: ricxappframe.rmr.rmr
+
+
+   Set an rmr transaction id
+   TODO: on next API break, merge these two functions. Not done now to preserve API.
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+       **tid_bytes: bytes**
+           bytes of the desired transaction id
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!
+
+.. py:function:: get_src(ptr_mbuf)
+   :module: ricxappframe.rmr.rmr
+
+
+   Get the message source (likely host:port)
+
+
+   :Parameters:
+
+       **ptr_mbuf: ctypes c_void_p**
+           Pointer to an rmr message buffer
+
+   :Returns:
+
+       string:
+           message source
+
+
+
+
+
+
+
+
+
+
+
+
+
+   ..
+       !! processed by numpydoc !!