diff options
Diffstat (limited to 'host/lib/property_tree_python.cpp')
-rw-r--r-- | host/lib/property_tree_python.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/host/lib/property_tree_python.cpp b/host/lib/property_tree_python.cpp new file mode 100644 index 000000000..0b7f18aa2 --- /dev/null +++ b/host/lib/property_tree_python.cpp @@ -0,0 +1,61 @@ +// +// Copyright 2020 Ettus Research, a National Instruments Brand +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +#include "property_tree_python.hpp" +#include <uhd/property_tree.hpp> +#include <pybind11/pybind11.h> +#include <pybind11/stl.h> +#include <string> + +namespace py = pybind11; + +template <typename T> +void export_property(py::module& m, const std::string& type_str) +{ + const std::string classname = std::string("property__") + type_str; + py::class_<uhd::property<T>>(m, classname.c_str()) + .def("get", &uhd::property<T>::get) + .def("get_desired", &uhd::property<T>::get_desired) + .def("set", &uhd::property<T>::set) + .def("set_coerced", &uhd::property<T>::set_coerced); +} + +void export_property_tree(py::module& m) +{ + using property_tree = uhd::property_tree; + using fs_path = uhd::fs_path; + + py::class_<fs_path>(m, "fs_path") + // Constructors + .def(py::init<>()) + .def(py::init<std::string>()); + py::implicitly_convertible<std::string, fs_path>(); + + // Per type we want to expose, add one line here, and one accessor below + export_property<int>(m, "int"); + export_property<double>(m, "double"); + export_property<std::string>(m, "str"); + export_property<bool>(m, "bool"); + + py::class_<property_tree>(m, "property_tree") + .def("subtree", &property_tree::subtree, py::arg("path")) + .def("exists", &property_tree::exists, py::arg("path")) + .def("list", &property_tree::list, py::arg("path")) + // One line per type + .def( + "access_int", &property_tree::access<int>, py::return_value_policy::reference) + .def("access_double", + &property_tree::access<double>, + py::return_value_policy::reference) + .def("access_str", + &property_tree::access<std::string>, + py::return_value_policy::reference) + .def("access_bool", + &property_tree::access<bool>, + py::return_value_policy::reference) + // End of types + ; +} |