Python CFFI bindings to sysrepo.
pip install sysrepoThis assumes that libsysrepo.so is installed on the system and that
sysrepo.h is available in the system include dirs.
Since sysrepo depends on libyang, the latter needs to be installed on the system as well.
You need the following system dependencies installed:
- Python development headers
- GCC
- Python CFFI module
On a Debian/Ubuntu system:
apt-get install python3-dev gcc python3-cffiThe current version requires at least C sysrepo 2.2.0.
The last version of the bindings that works with C sysrepo 1.x is v0.7.0.
If sysrepo headers and libraries are installed in a non-standard location, you
can export the SYSREPO_HEADERS and SYSREPO_LIBRARIES variables.
Additionally, for finer control, you may use SYSREPO_EXTRA_CFLAGS and
SYSREPO_EXTRA_LDFLAGS:
SYSREPO_HEADERS=/home/build/opt/sr/include \
SYSREPO_LIBRARIES=/home/build/opt/sr/lib \
SYSREPO_EXTRA_CFLAGS="-O3" \
SYSREPO_EXTRA_LDFLAGS="-Wl,-rpath=/opt/sr/lib" \
pip install sysrepoNote
This Python package depends on libyang CFFI bindings, if it is not installed yet and libyang headers and libraries are also installed in a non-standard location, you must export additional variables. See the "Compilation Flags" section here: https://pypi.org/project/libyang/.
with sysrepo.SysrepoConnection() as conn:
with conn.start_session() as sess:
sess.replace_config({"system": {"hostname": "foobar"}}, "my-module")with sysrepo.SysrepoConnection() as conn:
with conn.start_session("operational") as sess:
data = sess.get_data("/my-module:status")with sysrepo.SysrepoConnection() as conn:
with conn.start_session() as sess:
out = sess.rpc_send("/my-module:my-rpc", {"input-param": 42})with sysrepo.SysrepoConnection() as conn:
with conn.start_session() as sess:
sess.subscribe_module_change("my-module", None, module_change_cb)
sess.subscribe_oper_data_request(
"my-module", "/my-module:status", oper_data_cb)
sess.subscribe_rpc_call("/my-module:my-rpc", my_rpc_cb)See the examples/ folder for more details.
This project has been created with Python users in mind. In order to get a more pythonic API there are significant divergences with the C API.
- Connection handling (
sr_connect(),sr_disconnect()) - YANG modules management (
sr_install_module(),sr_remove_module()) - libyang context retrieval (
sr_get_context()wrapped using the libyang CFFI bindings). - Session management (
sr_session_start(),sr_session_stop(),sr_session_switch_ds(),sr_session_get_ds(),sr_unsubscribe()) - Module change subscriptions (
sr_module_change_subscribe()also with async callbacks,sr_get_changes_iter()). - Operational data subscriptions (
sr_oper_get_items_subscribe()also with async callbacks). - RPC/action call subscriptions (
sr_rpc_subscribe_tree()also with async callbacks). - Notifications subscriptions (
sr_event_notif_subscribe_tree()also with async callbacks). - Notification dispatch (
sr_event_notif_send_tree()). - RPC/action calling (
sr_rpc_send_tree()) - Datastore edition (
sr_set_item_str(),sr_delete_item(),sr_edit_batch(),sr_validate(),sr_apply_changes(),sr_discard_changes(),sr_replace_config()) - Get data (
sr_get_data(),sr_get_item(),sr_get_items()) - Module locking (
sr_*lock*)
All other features are not yet or only partially supported by sysrepo-python. The most notable are:
- Module management (
sr_*_module_*)
This is an open source project and all contributions are welcome.
See the CONTRIBUTING.rst file for more details.