Skip to main content

Sysrepo CFFI bindings

Project description

Python CFFI bindings to sysrepo.

pypi-project python-versions build-status license code-style

Installation

pip install sysrepo

This 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-cffi

Compatibility

The 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.

Compilation Flags

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 sysrepo

Examples

Module Config Replacement

with sysrepo.SysrepoConnection() as conn:
    with conn.start_session() as sess:
        sess.replace_config({"system": {"hostname": "foobar"}}, "my-module")

Operational Data Request

with sysrepo.SysrepoConnection() as conn:
    with conn.start_session("operational") as sess:
        data = sess.get_data("/my-module:status")

RPC Call

with sysrepo.SysrepoConnection() as conn:
    with conn.start_session() as sess:
        out = sess.rpc_send("/my-module:my-rpc", {"input-param": 42})

Subscription

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.

Differences With libsysrepo.so C API

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.

Supported Features

  • 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*)

Not Yet Supported Features

All other features are not yet supported by sysrepo-python. The most notable are:

  • Module management (sr_*_module_*)

Contributing

This is an open source project and all contributions are welcome.

See the CONTRIBUTING.rst file for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sysrepo-1.7.2.tar.gz (39.9 kB view details)

Uploaded Source

File details

Details for the file sysrepo-1.7.2.tar.gz.

File metadata

  • Download URL: sysrepo-1.7.2.tar.gz
  • Upload date:
  • Size: 39.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for sysrepo-1.7.2.tar.gz
Algorithm Hash digest
SHA256 fb646ea9a3c7e3c78c5bf1d0d532770aa3ed87c54df9147d36d6ebb1e4d05cdc
MD5 4ac80cb8c0c9a3bb7193eaef873eadb3
BLAKE2b-256 9504a61e3a152fdfe02d2f36010b5678d95f04f16ccfaf7704e345828a5fb841

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page